Flask Web开发入门
1、python web框架对比
Django
优点:
-
Model ORM 、 Session
- ModelForm
- amdin
- 大而全
不足之处:
- 开发小功能,会加载不需要的组件,浪费资源
Flask
优点:
- 小而精,三方组件全
- 内置session
缺点:
- 严重依赖第三方组件,稳定性相对较差
Tornado
优点:
- 异步IO 非阻塞 原生websocket
- 非常干净
缺点:
-
不精不全
Sanic
优点:
- 同时兼备tornado和flask的优势
- 目前热度最高
2、Flask快速入门
2.1基本用法
入门仪式Hello world
安装 pip install flask
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
2.2Response三剑客
与django对比来学习,方便理解,左边django,右边flask
django方法 Flask方法
返回字符串
HttpResponse: return "Hello World" 返回字符串至客户端
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): # 返回字符串 return '我喜欢你' if __name__ == '__main__': app.run(debug=True)
返回模板由浏览器渲染
render : return render_template("login.html")
app.py
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def hello_world(): # 返回与Django中的 render 使用一致 返回模板由浏览器渲染 return render_template('index.html') if __name__ == '__main__': app.run(debug=True)
跳转,重定向URL
redirect: return redirect("/login") # 302
from flask import Flask, render_template, redirect app = Flask(__name__) @app.route('/') def hello_world(): # 重定向到login return redirect('/login') @app.route('/login') def login(): # 返回html模板 return render_template('login.html') if __name__ == '__main__': app.run(debug=True)
2.3Flask中的小儿子
Flask中小儿子:
1.from flask import jsonify
retrun jsonify({name:111}) # 返回json标准的字符串
Content-Type:application/json
2.from flask import send_file
return send_file(path)
# 打开文件并返回文件内容(自动识别文件格式)
falsk 中的 request
get post delete put
django
def django(req):
return HttpResponse("hello")
from flask import request
request.method # 请求方式
request.form # 存放FormData中的数据 to_dict 序列化成字典
request.args # 获取URL中的数据 to_dict 序列化成字典
request.url # 访问的完整路径
request.path # 路由地址
request.host # 主机地址
request.values # 获取 FormData and URL中的数据 不要用to_dict
request.json # 如果提交时请求头中的Content-Type:application/json 字典操作
request.data # 如果提交时请求头中的Content-Type 无法被识别 将请求体中的原始数据存放 byte
request.cookies # 获取Cookie中的数据
request.headers # 获取请求头
request.files # 序列化文件存储 save()
Jinja2
{{}} 引用变量 执行函数
{%%} 逻辑代码
|safe Markup 安全标签字符串
@app.template_global()
@app.template_filter()
{% macro create_input(na,ty) %}
{{ na }} : <input type="{{ ty }}" name="{{ na }}">
{% endmacro %}
{{ create_input("username","text") }}
Flask 中的 Session
app.secret_key = "加密字符串" # 用于序列化和反序列化 session信息
由于Flask中默认Session 存放位置 - 客户端的Cookies中
所以Session需要加密 用到 secret_key
请求进入视图函数 带上cookie 将Session从cookie序列化出来 通过secret_key 反序列化成字典
Flask-Session