Python主流WEB框架对比
Django:1个重武器,包含了web开发中常用的功能、组件的框架;(ORM、Session、Form、Admin、分页、中间件、信号、缓存、ContenType…);
Tornado:2大特性就是异步非阻塞、原生支持WebSocket协议;
Flask:封装功能不及Django完善,性能不及Tornado,但是Flask可扩展性强,因为flask的第三方开源组件丰富;
Bottle:比较简单;
结论
小型web应用设计的功能点不多使用Flask;
大型web应用设计的功能点比较多使用的组件也会比较多,使用Django(自带功能多不用去找插件);
如果追求性能可以考虑Tornado;
WSGI介绍
Django使用wsgiref模块Flask使用Werkzeug模块实现了WSGI协议。
HTTP协议是建立在TCP协议之上的,实现UWSGI协议本质是实现Socket服务端,也就是TCP层实现HTTP请求的接收、 对请求内容进行预处理如分割HTPP请求内容的Header和body,然后再触发后面的Django/Flask框架。
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架
pip3 install flask #安装flask
Flask框架是基于werkzeug模块实现的。
from werkzeug.wrappers import Request,Response
from werkzeug.serving import run_simple
@Request.application
def hello(request):
return Response("Hello World")
if __name__ == '__main__':
#请求一旦到来,执行第3个参数,hello(上下文)
run_simple('localhost', 4000, hello)
Flask简单使用
View Code
一、配置文件
app=Flask(name,template_folder=‘templates’,static_url_path=‘/static/’,static_path=‘/zhanggen’)
模板路径: template_folder=‘templates’
静态文件路径:static_url_path=‘/static/’
静态文件引入别名:static_path=‘/zhanggen’
设置为调试环境:app.debug=True (代码修改自动更新)
设置json编码格式 如果为False 就不使用ascii编码:app.config[‘JSON_AS_ASCII’]=False
设置响应头信息Content-Type app.config[‘JSONIFY_MIMETYPE’] =“application/json;charset=utf-8” (注意 ;charset=utf-8)
二、路由系统
1.动态路由(url传参)
@app.route(‘/user/’)
接收字符串类型参数
@app.route(‘/post/int:age’)
接收整型数字参数
@app.route(‘/post/float:salary’)
接收浮点型数字参数
@app.route(‘/post/path:path’)
接收URL链接类型参数
2、指定允许的请求方法
@app.route(‘/login’, methods=[‘GET’, ‘POST’])
指定允许的请求方法
3、通过别名反向生成url
url_for()反向生成url
4、通过app.add_url_rule()调用路由
app.add_url_rule()方法调用路由
5、扩展路由功能:正则匹配url
如果需要一些复杂的匹配规则可以自定义正则匹配url
自定义正则表达式匹配路由
四、视图
1、给Flask视图函数加装饰器
注意如果要给视图函数加装饰器增加新功能,一点要加在路由装饰器下面,才会被路由装饰器装饰,才能生生成url关系;
View Code
2、request和response
a.请求相关信息
request.method: 获取请求方法
request.json
request.json.get("json_key"):获取json数据 **较常用
request.argsget('name') :获取get请求参数
request.form.get('name') :获取POST请求参数
request.form.getlist('name_list'):获取POST请求参数列表(多个)
request.values.get('age') :获取GET和POST请求携带的所有参数(GET/POST通用)
request.cookies.get('name'):获取cookies信息
request.headers.get('Host'):获取请求头相关信息
request.path:获取用户访问的url地址,例如(/,/login/,/ index/);
request.full_path:获取用户访问的完整url地址+参数 例如(/login/?age=18)
request.script_root: 抱歉,暂未理解其含义;
request.url:获取访问url地址,例如http://127.0.0.1:5000/?age=18;
request.base_url:获取访问url地址,例如 http://127.0.0.1:5000/;
request.url_root
request.host_url
request.host:获取主机地址
request.files:获取用户上传的文件
obj = request.files['the_file_name']
obj.save('/var/www/uploads/' + secure_filename(f

最低0.47元/天 解锁文章
2509

被折叠的 条评论
为什么被折叠?



