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简单使用
复制代码
from flask import Flask
app=Flask(name) #创建1个Flask实例
@app.route('/') #路由系统生成 视图对应url,1. decorator=app.route() 2. decorator(first_flask)
def first_flask(): #视图函数
return 'Hello World' #response
//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDQwMDAyOA==.html
if name == 'main':
app.run() #启动socket
复制代码
一、配置文件
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/')
复制代码
from flask import Flask
app=Flask(name)
@app.route('/') #设置url传参数 http://127.0.0.1:5000/zhanggen
def first_flask(name): #视图必须有对应接收参数
print(name)
return 'Hello World' #response
if name == 'main':
app.run()
复制代码
@app.route('/post/')
//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDM5NTUwMA==.html
复制代码
接收整型数字参数
app=Flask(name)
@app.route('//') #设置url传参数 http://127.0.0.1:5000/18/
def first_flask(age): #视图必须有对应接收参数
print(age)
return 'Hello World' #response
if name == 'main':
app.run()
复制代码
@app.route('/post/')
复制代码
接收浮点型型数字参数
app=Flask(name)
@app.route('//') #设置url传参数http://127.0.0.1:5000/2345555.8889/
def first_flask(salary): #视图必须有对应接收参数
print(salary)
return 'Hello World' #response
if name == 'main':
app.run()
复制代码
@app.route('/post/')
复制代码
接收URL链接类型参数
app=Flask(name)
@app.route('//') #设置url传参数:http://127.0.0.1:5000/http://www.baiu.com/
def first_flask(url): #视图必须有对应接收参数
print(url)
return 'Hello World' #response
if name == 'main':
app.run()