Flask的优缺点
优点:Flask小而精,三方组件全
缺点:稳定性相对较差,三方组件版本问题,Flask一旦迭代,就可能造成三方组件不兼容的问题。
flask三剑客 + 小儿子
Django flask
HTTPResponse : return "Hello World"
render : render_template
redirect : redirect
send_file("static/123.jpg") # 上传文件
jsonify("{id: 1}") # Content-Type: application/json
request
request.form Form表单提交的数据,POST
request.args url中的参数
request.data Content-Type无法解析的数据,原始数据是字节流(b"")
request.json Content-Type:application/jsonrequest.method 获取请求方式
request.path 路由地址/login
request.files 获取文件对象
session - Flask-Session
from flask import sessionapp.secret_key = '123' # 如果遇到了 Must provide secret_key to use csrf错误提醒,原因就是没有设置secret_key ,在代码中加上session["user"] = "wjs"
session存放在浏览器的cookie中默认名称是session 序列化的数据
session.get("user")Flask-Session 一个三方组件
from flask_session import Session
from flask import sessionapp.config["SESSION_TYPE"] = "redis"
app.config["SESSION_REDIS"] = Redis实例
Session(app)session["user"] = "wjs"
session存放在浏览器的cookie中默认名称是session -- UUID
session.get("user")
Flask实例化配置,对象配置:
实例化:Flask(__name__,template_folder="模板路径",static_folder="静态文件路径",static_url_path="/静态文件访问路径")对象配置:app.debug = Trueapp.config["DEBUG"] = Trueclass FlaskSetting(object):DEBUG = Trueapp.config.from_object(FlaskSetting)
蓝图 Blueprint
from flask import Blueprint
blue = Blueprint("blue",__name__,template_folder="模板路径",static_folder="静态文件路径",static_url_path="/静态文件访问路径",url_prefix="/blue")@blue.route("/blue01")
def blue01():return "123"记得在app中注册蓝图
app:app.register_blueprint(blue)
特殊装饰器:
@app.template_global() # 全局函数
def ab(a,b):return a + b
{{ab(1,2)}} # 调用ab函数@app.template_filter() # 偏函数
def abc(a, b, c):return a + b + c
{{2|abc(2,2)}} # 调用abc函数@app.before_request # 请求进入视图函数之前
def be1():return None # 跳过@app.after_request # 视图函数结束之后,返回客户端之前
def af1(response):return response正常: 请求-be1-be2-be3-af3-af2-af1-客户端 # be是按照代码执行顺序走,af是按照代码执行顺序的反序走异常: 请求-be1-be2-af3-af2-af1-客户端 # 断掉以后be断掉后面的就不走了,af还是都走@app.errorhandler(404) # 重定义错误信息
def error404(args): # args存放的是错误信息return render_template("error.html", args=args)
Flask CBV
from flask import viewsclass Login(views.MethodView):# methods = ["POST"]def get(self):passdef post(self):passapp.add_url_rule("/login",endpoint=None,view_func=Login.as_view(name="login"),methods=["POST"])
WTForms
simple,core
flash
from flask import flash,get_flashed_messagesflash("66","tag")get_flashed_messages(category_filter=["tag"])