flask入门
一 Python现阶段三大主流框架Django Tornado Flask之间的区别
1 Django主要的特点是大而全,集成了 很多的组件,例如:Models Admin Form等,缺点是浪费资源
2 Torado 主要的特点是原生异步非阻塞,在IO密集型应用和多任务处理上占绝对性的优势
3 Flask主要的特点是小而精,第三方组件特别全,就是稳定性相对而言较差
而他们的应用也是大有不同的
Django通常用于大型WEB应用 由于内置组件足够强大 所以使用Django开大可以一气呵成
Torado通常用于API后端的应用,游戏服务后台,其内部实现的异步非阻塞很稳
Flask通常应用于小型的应用和快速构建应用,其强大的第三方库,能够支撑一个大型的web应用
二 Flask的安装
pip install Flask
实现一个简单的flask页面
第一个页面
from flask import Flask app = Flask(__name__) app.run()
第二个页面
from flask import Flask
app=FlasK(__name__)
def index():
return 'Hello World'
app.run()
三 Flask的三剑客
1 Response 相当于Django当中的HttpResponse from flask import Flask app = Flask(__name__) @app.route("/index") def index(): return "123" #返回字符串至客户端 2 render_template(相当于django中的render) from flask import render_template app = Flask(__name__) @app.route('/index') def index(): return render_template("login.html") #templates中的模板页面 3 redirect #重定向 from flask import redirect app = Flask(__name__) @app.route('/index') def index(): return redirect("/login") # 302
四 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
flask中的request是一个全局的 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中的比较重要的几个
1 注意: {{}}引用变量 执行函数 {%%} 逻辑代码 2 Markup 安全标签的字符串 相当于django当中的safe from flask import Flask,Markup tag = "<input type='text' name='username'>" #在Markup中会熏染成真正的input标签 tag = Markup(tag) 把tag传到html中熏染 {{tag}} 3 template_global(全局都可以使用)与template_filter(过滤器) from flask import Flask app = Flask(__name__) @app.template_global() def func(a,b): return a+b @app.template_filter() def fil(a,b,c): print(a) return a+b+c app.run(debug=True) #当加入debug=True时,代码修改后会自动执行 不用主动执行 前端中使用 {{ func(5,5) }} {{ 10 | fil(2,3) }}
八 Flask中的session
注意 session与request一样 都是全局的 都需要从flask 中导入 from flask import Flask,session app = Flask(__name__) app.secret_key = "DragonFire" # "加密字符串" 这个加密字符串可自行定义 # 用于序列化和反序列化 session信息 @app.route("/") def index(): if not session.get("user"): return redirect("/login") return render_template("index.html") @app.route("/login", methods=["POST", "GET"]) def login(): if request.method == "GET": return render_template("login.html") if request.form.get("username") == "alex" and request.form.get("password") == "DSB": session["user"] = request.form.get("username") + "先帝创业未半而中道崩殂" return redirect("/") # Flask-Session app.run(debug=True) #注意 由于Flask中默认Session 存放位置 - 客户端的Cookies中 所以Session需要加密 用到 secret_key 请求进入视图函数 带上cookie 将Session从cookie序列化出来 通过secret_key 反序列化成字典 Flask-Session