首页 > 滚动 > > 内容页

Flask框架cbv的写法、请求与响应、请求扩展、session源码分析、闪现

发表时间:2023-04-03 17:33:15 来源:博客园


(资料图片)

本篇文章将会详细讲在flask框架如何写cbv、请求与响应、请求扩展、session源码分析、闪现等知识点。

目录

一、flask写CBV

CBV源码分析的结论如下

1 as_view 执行流程跟djagno一样2 路径如果不传别名,别名就是函数名(endpoint)3 视图函数加多个装饰器(上下顺序和必须传endpoint)4 视图类必须继承MethodView,否则需要重写dispatch_request5 视图类加装饰器:类属性decorators = [auth,]

写CBV的例子如下

# 基于类的视图,写法from flask import Flask,requestfrom flask.views import View, MethodViewapp = Flask(__name__)app.debug = True# 视图类,继承MethodView,类中写跟请求方式同名的方法即可,之前学的所有都一致class IndexView(MethodView):    def get(self):        print(request.method)        return "get 请求"    def post(self):        print(request.method)        return "post 请求"app.add_url_rule("/index", endpoint="index", view_func=IndexView.as_view("index"))if __name__ == "__main__":    app.run()

二、请求与响应

  1. 请求:全局的request对象
  2. 响应:其实就那新手四件套
print(request.method)print(request.args)print(request.form)print(request.values)print(request.cookies)print(request.headers)print(request.path)print(request.full_path)print(request.url)print(request.base_url)print(request.host_url)print(request.host)
# 1 响应中写入cookieresponse = "hello"res = make_response(response)  # flask.wrappers.Responseres.set_cookie("xx","xx")# 2 响应头中写数据(新手四件套,都用make_response包一下)response = render_template("index.html")res = make_response(response)  # flask.wrappers.Responseres.headers["yy"]="yy"

三、session

cookie :存在于客户端浏览器的键值对session:存在于服务端的键值对
djagno 放在了django_session表中flask加密后,放到了cookie中,如果session发生了变化想把session放到redis中,mysql中,已经有人帮咱们写了,第三方的只需要写个类,重写open_session,save_session自己写

四、flash

# 作用:1 可以跨请求,来保存数据2 当次请求,访问出错,被重定向到其他地址,重定向到这个地址后,拿到当时的错误# 用法:设置 闪现flash("%s,我错了"%name) ,可以设置多次,放到列表中flash("超时错误",category="debug") 分类存 获取 闪现get_flashed_messages() ,取完就删除get_flashed_messages(category_filter=["debug"])分类取 # 本质放到session中

五、请求扩展

请求扩展中:在请求来了,或请求走了,可以绑定一些函数,到这里就会执行这个函数,类似于django的中间件,在flask中就用请求扩展,来代替djagno的中间件

before_request:请求来了会走,如果他返回了四件套,就结束了after_request :请求走了会走,一定要返回response对象teardown_request:无论是否出异常会走,可以用来日志输出errorhandler:监听状态码,404  500
# 1 请求来了会走,如果他返回了四件套,就结束了@app.before_requestdef before():    print("我来了111")    # if "index" in request.path:    return "不让看了"  # 如果不是retrun了None,说明被拦截了直接返回# 2 请求走了会走,一定要返回response对象@app.after_requestdef after(response):    print("我走了111")    return response# 3 teardown_request,无论视图函数是否出错,都会执行它,做错误日志@app.teardown_requestdef teardown(e):    print(e)    print("执行我了")# 4 errorhandler  监听响应状态码,如果符合监听的状态码,就会走它@app.errorhandler(404)def error_404(arg):    return "404错误了"
最近更新