Flask-----轻量级的框架,快速的搭建程序
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。
“微”(micro) 并不表示你需要把整个 Web 应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask 在功能上有所欠缺。微框架中的“微”意味着 Flask 旨在保持核心简单而易于扩展。Flask 不会替你做出太多决策——比如使用何种数据库。而那些 Flask 所选择的——比如使用何种模板引擎——则很容易替换。
默认情况下,Flask 不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask 支持用扩展来给应用添加这些功能,如同是 Flask 本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask 也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。
pip3 install flask
#Flask依赖一个实现wsgi协议的模块:werkzeug from werkzeug.wrappers import Request, Response@Request.application def hello(request):return Response('Hello World!')if __name__ == '__main__':from werkzeug.serving import run_simplerun_simple('localhost', 4000, hello)
Django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。。 Flask:无socket,中间件(需要扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了
简单的Flask程序
示例
flask项目的基本目录结构:
flask项目名
|_____static #静态文件的存放目录
|_____templates #模板的存放目录
|_____项目名.py #主项目
|_____config.py #配置文件
#例:
#项目名.py
from flask import Flask
app = Flask(__name__) #app是程序实例,一个项目只能有一个程序实例
@app.route('/') #路由装饰器
def hello_world(): #视图函数
return 'Hello World!'
if __name__ == '__main__':
app.run() #有个host参数,代表监听范围,默认为127.0.0.1,只监听本机,0.0.0.0表示监听所有公网ip
@app.route()装饰器,可以将函数变为视图函数,他的参数为路由。
使用Flask-Script支持命令行选项
flask的开发web服务器支持很多选项,但只能在脚本中作为参数传给app.run()函数,然而传递设置选项的理想方式是使用命令行参数。Flask-Script是一个Flask的扩展,为Flask程序添加了一个命令行解析器。
#安装:pip install flask-script
#hello.py
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app) #实例化拓展
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
manager.run() 启动实例
修改代码后,使用命令行启动程序(python hello.py runserver)时就可以添加参数了: –host/-h 客户端访问web服务的ip
–port/-p web服务的端口
-d 开启debug
-r 自动reload,当代码发生变化时自动重启
–threaded 开启多线程
-?/–help 查看帮助信息
使用配置文件
将工程配置下写在配置文件中,利于以后的开发维护管理。
#config.py
DEBUG = True #设置工程为开发者
'''
其他配置参数,如数据库的配置等等
'''
#工程文件
import config
app.config.from_objec(config) #将配置文件配置到项目文件中
路由
路由传递参数:app.route('/index/\<arg1>')
参数放在尖括号里,可以设置参数的类型,int, float,path(/将不再是路径分隔符),如:\<int:arg1>,
url重定向:redirect('\<跳转的路由>')
解析路由:url_for(视图函数名),在模板中页面跳转也可以使用url_for()解析得到路由,放在{{ }}中
@app.route('/index/') #普通路由
def index():
return 'hello world'
@app.route('/add/<int:arg1>/<int:arg2>') #带参数的路由
def add(ag1, arg2):
return 'arg1 +arg2 = {}'.format(arg1+arg2)
@app.route('/hello')
def hello():
return rendirect(url_for('index')) #路由重定向和重定向一起使用
2. 请求与响应
Flask上下文全局变量
变量名 上下文 说明
current_app 程序上下文 当前激活程序的程序实例
g 程序上下文 处理请求时用作临时存储的对象,每次请求都会重设这个变量。
request 请求上下文 请求对象,封装了客户端发送的HTTP请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要记住的值的词典
Flask在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。程序上下文被推送后,就可以在线程中使用current_app和g变量。类似地,请求上下文被推送后,就可以使用request和session变量。如果使用这些变量时我们没有激活程序上下文或请求上下文,就会导致报错。
request:请求对象
封装了客户端发送的HTTP请求中的内容。
request.headers 请求头信息,数据类型为类字典结构,可以使用.get(”)获取数据。
#例:
@app.route('/request/')
def req():
# 完整的请求URL
#return request.url
# 基本路由信息,不包含get参数
#return request.base_url
# 只包含主机和端口
#return request.host_url
# 只包含装饰器中的路由地址
#return request.path
# 请求方法类型
#return request.method
# 客户端IP地址
#return request.remote_addr
# 所有的请求参数(GET)
#return request.args['page']
# 请求头信息
return request.headers['User-Agent']
response:响应对象
响应的两种方法:
视图函数直接返回一个元组:(response, status, headers)
视图函数返回一个make_response(键,值)函数产生的响应对象。
Cookies:
访问:通过请求对象的cookies属性访问(请求对象的cookies属性是一个内容为客户端提提交的所有cookies的字典)
设置cookies:通过响应对象的set_cookies方法来设置Cookies。
from flask import Flask, request, make_response
@app.route('/cookies/')
def cookies():
cook = request.cookies #获得cookies
resp = make_response('set cookies') #实例一个响应对象
resp.set_cookies('name','Tom') #设置cookies
return resp
session:
设置session
#设置秘钥:使用session就必须设置密码,以便用来对数据加密
app.config['SECRET_KEY'] = '随便什么字符串'
@app.route('/set_sesion/')
def set_session():
session['user-name'] = 'hello'
return '设置成功'
获取session
@app.route('/get_session/')
def get_session():
return session.get('username', 'who?')
请求钩子
4种钩子装饰器:
before_first_request:在处理第一个请求之前执行
before_request:在每次请求之前运行。
after_request:如果没有未处理的异常抛出在,在每次请求之后执行
teardown_request:即使有未处理的异常抛出,也在每次请求之后运行。
---------------------
参考: https://www.cnblogs.com/huchong/p/8227606.html
转载于:https://www.cnblogs.com/klb561/p/10492759.html
Flask-----轻量级的框架,快速的搭建程序相关推荐
- Python之flask结合Bootstrap框架快速搭建Web应用
目录 前言 安装bootstrap扩展 模板的继承 总结 前言 Flask是一个基于Python开发,依赖jinja2模板和Werkzeug WSGI服务的一个微型框架.Werkzeug用来处理Soc ...
- 人生苦短,我用Python(五)—通过Flask结合Bootstrap框架快速搭建Web应用-2
写在前面: Flask是一个基于Python开发,依赖jinja2模板和Werkzeug WSGI服务的一个微型框架.Werkzeug用来处理Socket服务,其在Flask中被用于接受和处理http ...
- 基于MINA框架快速开发网络应用程序
1.MINA框架简介 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架.通过使用 ...
- 2016 年 50 个最佳的轻量级 JavaScript 框架和库一
2016 年 50 个最佳的轻量级 JavaScript 框架和库 IT程序狮 · 1 天前 回顾今年已发布的 JS 框架和库,我们针对地筛选了一些能够提供直接和具体功能的免费 JavaScript ...
- 快速上手Flask(一) 认识框架Flask、项目结构、开发环境
文章目录 快速上手Flask(一) 认识框架Flask.项目结构.开发环境 Web开发轻量级框架Flask Flash历史和团队 Pallets 项目 flask运行过程 使用flask的场景 使用P ...
- Python轻量级Web框架Flask(5)——Flask模型基础和数据迁移
0.前言:学习这部分的前提是对python的面向对象有一定的了解,同时对MySQL有扎实的学习 1.Flask模型基础知识: Flask模型 ORM (注意:在flask中用ORM可以实现SQL语句功 ...
- 使用ThinkPHP框架快速搭建网站【转】
原文地址:http://blog.csdn.net/ruby97/article/details/7574851 使用ThinkPHP框架快速搭建网站 这一周一直忙于做实验室的网站,基本功能算是完成了 ...
- Google 开源 AdaNet:快速灵活的轻量级 AutoML 框架
雷锋网 AI 科技评论编者按:近期,Google 开源了轻量级 AutoML 框架-- AdaNet,该框架基于 TensorFlow,只需要少量的专家干预便能自动学习高质量模型,在提供学习保证(le ...
- 微信小程序wepy框架快速入门
微信小程序wepy框架快速入门 微信小程序简介 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一 ...
最新文章
- TiDB与gRPC的那点事
- 关于CE端口线路整改的建议
- python处理excel文件-python读取excel文件
- 动态代理-JDK_proxycglib
- Adobe FrameMaker 2019中文版
- Android线性布局(Linear Layout)
- java 多线程的使用_Java的多线程1:线程的使用
- 华为程序员面试要改:网上编程 90 分钟,现场编程 30 分钟
- 基于.NetCore3.1系列 —— 日志记录之日志配置揭秘
- Android之提示This version of Android Studio cannot open this project, please retry with Android Studio
- redis将散裂中某个值自增_0基础掌握Django框架(49)Redis
- 2020笔记本性价比之王_什么笔记本性价比高?2020性价比最高的笔记本电脑
- GDB 调试 Mysql 实战(一)源码编译安装
- 在Windows平台上安装Dubbox框架
- 嵌入式操作系统内核原理和开发(任务创建和堆栈溢出检查)
- [Ext JS 4] 实战之 带week(星期)的日期选择控件
- php正则表达式 什么,php正则表达式是什么?(代码实例)
- CSS层叠样式表的理解(一)
- Android 笔记
- ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第五天(非原创)
热门文章
- SharePoint Framework 简介
- Hyper-V 2016 系列教程28 Hyper-v平台USB 外设解决方案介绍
- 利用POI 技术动态替换word模板内容
- Swift项目中不能定义OC类继承Swift类
- leetcode - Search in Rotated Sorted Array II
- 64位Java开发平台的选择,如何区分JDK,Tomcat,eclipse的32位与64版本
- uboot命令及内核启动参数
- IPTV媒体分发技术之一——代理缓存(转)
- 移动网络新漏洞影响2G 以来的所有蜂窝网络
- 聊聊网络安全行业这十年(2010-2019)