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

一、flask写CBV

CBV源码分析的结论如下

1 as_view 执行流程跟djagno一样

2 路径如果不传别名,别名就是函数名(endpoint)

3 视图函数加多个装饰器(上下顺序和必须传endpoint)

4 视图类必须继承MethodView,否则需要重写dispatch_request

5 视图类加装饰器:类属性decorators = [auth,]

写CBV的例子如下

# 基于类的视图,写法

from flask import Flask,request
from flask.views import View, MethodView app = 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 响应中写入cookie
response = 'hello'
res = make_response(response) # flask.wrappers.Response
res.set_cookie('xx','xx') # 2 响应头中写数据(新手四件套,都用make_response包一下)
response = render_template('index.html')
res = make_response(response) # flask.wrappers.Response
res.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_request
def before():
print('我来了111')
# if 'index' in request.path:
return '不让看了' # 如果不是retrun了None,说明被拦截了直接返回 # 2 请求走了会走,一定要返回response对象
@app.after_request
def after(response):
print('我走了111')
return response # 3 teardown_request,无论视图函数是否出错,都会执行它,做错误日志
@app.teardown_request
def teardown(e):
print(e)
print('执行我了') # 4 errorhandler 监听响应状态码,如果符合监听的状态码,就会走它
@app.errorhandler(404)
def error_404(arg):
return "404错误了"

Flask框架cbv的写法、请求与响应、请求扩展、session源码分析、闪现的更多相关文章

  1. Flask框架(三)—— 请求扩展、中间件、蓝图、session源码分析

    Flask框架(三)—— 请求扩展.中间件.蓝图.session源码分析 目录 请求扩展.中间件.蓝图.session源码分析 一.请求扩展 1.before_request 2.after_requ ...

  2. Flask框架(五) —— session源码分析

    Flask框架(五) —— session源码分析 目录 session源码分析 1.请求来了,执行__call__方法 2.__call__方法 3.调用__call__方法 3.1.ctx = s ...

  3. Vue3中的响应式对象Reactive源码分析

    Vue3中的响应式对象Reactive源码分析 ReactiveEffect.js 中的 trackEffects函数 及 ReactiveEffect类 在Ref随笔中已经介绍,在本文中不做赘述 本 ...

  4. Django框架之drf:5、反序列化器校验部分源码分析、断言、drf之请求与响应、视图组件介绍及两个视图基类、代码部分实战

    Django框架之drf 目录 Django框架之drf 一.反序列化类校验部分源码解析 二.断言 三.drf之请求 1.Request能够解析的前端传入编码格式 2.Request类中的属性和方法 ...

  5. bootstrap_栅格系统_响应式工具_源码分析

    -----------------------------------------------------------------------------margin 为负 ​使盒子重叠 ​等高 等高 ...

  6. Http请求连接池-HttpClient的AbstractConnPool源码分析

    在做服务化拆分的时候,若不是性能要求特别高的场景,我们一般对外暴露Http服务.Spring里提供了一个模板类RestTemplate,通过配置RestTemplate,我们可以快速地访问外部的Htt ...

  7. TOMCA源码分析——处理请求分析(上)

    在<TOMCAT源码分析——请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT源码分析——请求原理分析 ...

  8. Tomcat源码分析——请求原理分析(中)

    前言 在<TOMCAT源码分析——请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT源码分析——请求原 ...

  9. 源码分析Retrofit请求流程

    Retrofit 是 square 公司的另一款广泛流行的网络请求框架.前面的一篇文章<源码分析OKHttp执行过程>已经对 OkHttp 网络请求框架有一个大概的了解.今天同样地对 Re ...

  10. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...

随机推荐

  1. Abp Abp.AspNetZeroCore 2.0.0 2.1.1 Path

    纯手工修改,移除校验代码可调试. 将文件复制到 %userprofile%\.nuget\packages\abp.aspnetzerocore 目录中 替换对应的文件 Abp.AspNetZeroC ...

  2. 异常(Java)

    异常 基本介绍 什么是异常? 在实际工作中,遇到的情况不可能是非常完美.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对 软件程序在运行过程 ...

  3. 关于pandas的一些用法

    pandas用法之前我总是把他想的无比复杂.其实也是比较简单的,这个东西在做数据统计的时候还是挺好用的. 然后这里列举几个比较好用的几段代码.偏向数据透视类型pivot的,导出方式是直接在IDE 生成 ...

  4. 第16章 发布和部署应用程序(ASP.NET Core in Action, 2nd Edition)

    本章包括 发布 ASP.NET Core 应用程序 在 IIS 中托管 ASP.NET Core 应用程序 自定义 ASP.NET Core 应用程序的 URL 通过捆绑和缩小优化客户端资源 到目前为 ...

  5. train_data

    for images, labels in train_data: for images, labels in train_data: img = images[0] img = img.numpy( ...

  6. ROM,RAM,内存

    ROM是用来存放最基本的程序的,不是系统程序(windows),而是主板自带的最基本的程序, 无法被删除,更改.只能读取. 操作系统是放在硬盘里的,在开机时会在内存中加载,所以windows7比win ...

  7. Spring 笔记一

    1.什么是框架? 框架,是一种半成品的软件,是高度抽取可重用代码的一种设计,多个可重用模块的集合,形成某个领域的整体解决方案. 2.Spring 框架 概述:Spring 是一个开源框架,一个容器框架 ...

  8. vscode工程目录文件及文件夹摘选

    在工程工作区下新建一个.vscode 文件夹中并新建一个名为"settings.json"的文件,然后在 settings.json 中输入如下内容: { "search ...

  9. 通过右键菜单生成pyd

    批处理 @echo off reg add "HKCR\AllFilesystemObjects\shell\构建PYTHON\command" /ve /t REG_SZ /d ...

  10. 【前端工程化】使用Nexus 搭建前端 npm 私服

    参考文献1 - https://blog.51cto.com/lookingdream/3609619 参考文献2 - https://blog.csdn.net/u013278374/article ...