Flask
2019-12-17 本文已影响0人
秋殇灬
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表单提交的数据,POSTrequest.args url中的参数request.data Content-Type无法解析的数据,原始数据是字节流(b"")request.json Content-Type:application/json request.method 获取请求方式request.path 路由地址/loginrequest.files 获取文件对象
session - Flask-Session
from flask import session app.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 Sessionfrom flask import session app.config["SESSION_TYPE"] = "redis"app.config["SESSION_REDIS"] = Redis实例Session(app) session["user"] = "wjs"session存放在浏览器的cookie中默认名称是session -- UUIDsession.get("user")
Flask实例化配置,对象配置:
实例化: Flask(__name__, template_folder="模板路径", static_folder="静态文件路径", static_url_path="/静态文件访问路径") 对象配置: app.debug = True app.config["DEBUG"] = True class FlaskSetting(object): DEBUG = True app.config.from_object(FlaskSetting)
蓝图 Blueprint
from flask import Blueprintblue = 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 views class Login(views.MethodView): # methods = ["POST"] def get(self): pass def post(self): pass app.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_messages flash("66","tag") get_flashed_messages(category_filter=["tag"])