Flask--特殊装饰器, CBV, 三方组件
一. Flask中的特殊装饰器
before_request
# before_request 是在视图函数执行之前执行的
@app.before_request
def before():
print('我是before_request')
# return '有我在,你永远到不了视图函数'
# 如果return的不是None,那么会直接返回,到不了视图函数
after_request
# after_request 是在视图函数执行之后执行的
@app.after_request
def after(ret): # 由于他在视图函数执行之后执行,所以它要接收视图函数的返回值
print('我是after_request')
return ret # ret就是视图函数的返回值
errorhandler
@app.errorhandler(404) # 括号里面写报错信息,例:访问的网址不存在就是404错误
def error404(error_msg):
print(f'{error_msg}') # 404 Not Found
return f'你丫瞎输什么网址,看好喽! ' # 自定义的回复消息

特殊装饰器执行的顺序

二 . CBV
from flask import Flask, views
app = Flask(__name__)
class Login(views.MethodView): def get(self):
return "login" def post(self):
return "post_login"
# CBV要用这中方式添加路由 view_func中的name参数必须写,而且只能是name='随便写'
app.add_url_rule("/login",view_func=Login.as_view(name="login"))
#这个name='login' 就是endpoint='login'
if __name__ == '__main__':
app.run(debug=True)
三 . 第三方组件
Flask-Session
# pip install Flask-Session
# 由于Flask太精简了,导致连存session的地方都没有,所以需要存到redis中去,flask中要下载redis
# pip install redis windows中也要安装redis,并且启动,这样flask中的redis才能用 from flask import Flask, session
from flask_session import Session
from redis import Redis app = Flask(__name__)
# 指定redis存储session
app.config['SESSION_TYPE'] = 'redis'
# 指定redis连接
app.config['SESSION_REDIS'] = Redis('127.0.0.1', 6379, db=6)
# db=6, 表示使用数据库6,redis一共有0-15这16个数据库,什么也不写默认数据库0
# 替换Flask原有的session机制
Session(app) @app.route('/index')
def test():
# 存在session到redis中
session['key'] = True
# 取出session中数据
# print(session.get('key'))
return '我是测试' if __name__ == '__main__':
app.run(debug=True)
WTForms(相当于Django中的modelform)
from flask import Flask, request, render_template app = Flask(__name__)
# simple是简单使用, core是核心功能
from wtforms.fields import simple, core
from wtforms import Form
from wtforms import validators class RegisterForm(Form):
username = simple.StringField(
label='用户名',
validators=[
validators.DataRequired(message='不能为空'),
validators.Length(max=16, min=6, message='要在%(min)d和%(max)d之间')
],
# 使用bootstrap的时候,添加样式
render_kw={'class': 'form-control'},
id='username'
)
password = simple.PasswordField(
label='密码',
validators=[
validators.DataRequired(message='不能为空'),
validators.Length(max=16, min=6, message='要在%(min)d和%(max)d之间')
],
render_kw={'class': 'form-control'},
id='password'
)
repassword = simple.PasswordField(
label='确认密码',
validators=[
validators.EqualTo('password', message='密码不一致')
] # 判断两次密码是否相等,第一个参数是密码字段但要写在引号里面
)
email = simple.StringField(
label='电子邮箱',
validators=[
validators.Email(message='邮箱格式不正确,如:1234@163.com')
]
)
# 多选是核心功能里面的
hobby = core.SelectMultipleField(
label='爱好',
choices=[
(1, '小姐姐'),
(2, '小萝莉'),
(3, '御姐'),
(4, '太妹'),
],
default=[1, 3],
# choices第一个参数是int类型,所以这里要指定int
coerce=int
)
# 单选也是核心功能里面的
gender = core.SelectField(
label='性别',
choices=[
(1, 'male'),
(2, 'female'),
],
default=1,
coerce=int
) @app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'GET':
print('能不能走到这!')
form_obj = RegisterForm()
return render_template('form_register.html', form_obj=form_obj)
else:
form_obj = RegisterForm(request.form)
if form_obj.validate():
return f'恭喜{form_obj.data.get("username")}注册成功!'
else:
return render_template('form_register.html', form_obj=form_obj) if __name__ == '__main__':
app.run(debug=True)
Flask--特殊装饰器, CBV, 三方组件的更多相关文章
- Flask - 特殊装饰器 和 Flask工作结构模式(FBV, CBV)
目录 Flask - 特殊装饰器 和 Flask工作结构模式 @app.errorhandler() @app.before_request @app.after_request FBV和CBV Fl ...
- python装饰器 & flask 通过装饰器 实现 单点登录验证
首先介绍装饰器,以下是一段标注了特殊输出的代码.用于帮助理解装饰器的调用过程. import time def Decorator_one(arg1): info = "\033[1;31; ...
- flask --- 03 .特殊装饰器, CBV , redis ,三方组件
一.特殊装饰器(中间件) 1.before_request 在请求进入视图函数之前 @app.before_request def look(): 2. after_request 在结束视图函数之后 ...
- flask 第三章 特殊装饰器 CBV Flask-Session WTForms
1.flask中的特殊装饰器 前面我们讲过的装饰器函数中,用来登录验证,这次我们来介绍几个flask中的特殊装饰器 1). @app.before_request 具体的用途是: 在请求进入视图函数之 ...
- Flask中的before_request装饰器和after_request装饰器以及WTForms组件
一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...
- 认证登录装饰器与form组件的使用
def auth(func): '''制作登录认证的装饰器''' def inner(request,*args,**kwargs): user_info=request.session.get(se ...
- flask类装饰器
from flask import Flask,request,views from functools import wraps app = Flask(__name__) #自定义登录装饰器 de ...
- Flask 之装饰器有关
- 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...
- flask之Flask特殊装饰器
flask_decorators.py ''' Flask中的特殊装饰器: (1)@app.before_request 请求到达视图函数之前,进行自定义操作,类似django中间件中的process ...
随机推荐
- github仓库的使用
业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103 远程仓库地址是:https://github.com/BinGuo66 ...
- 接口自动化:HttpClient + TestNG + Java(五) - 接口测试数据驱动
在上一篇中,我们实现了post方法请求的封装和测试,这一篇我们做测试数据的分离. 5.1 测试数据处理思路 5.1.1 测试数据分离 这里我想到,我们之前的测试demo里,全都是在testNG类里去写 ...
- C++与Lua交互之配置&交互原理&示例
|Lua 简介 Lua 是一种轻量小巧的脚本语言,也是号称性能最高的脚本语言,它用C语言编写并以源代码形式开放. 某些程序常常需要修改内容,而修改的内容不仅仅是数据,更要修改很多函数的行为. 而修改函 ...
- leetcode math类型题目解题总结
2. Add Two Numbers https://leetcode.com/problems/add-two-numbers/description/ class Solution { publi ...
- vue中的tab栏切换内容变换
<!DOCTYPE html> <html lang="cn-zh"> <head> <meta charset="UTF-8& ...
- web开发布局---传统布局篇
1.传统布局 盒状模型结合 display 属性.float 浮动以及 position 定位属性设计的各式传统布局形式. 2.说再多不如动手实践,下面举三个例子 html 部分代码: <sec ...
- arcgis api 3.x for js 入门开发系列十六迁徙流动图
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- android添加阴影
android底部增加背景 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns: ...
- github在README.md中插入图片
例子 
- Greedy分饼干
分饼干:因为饼干大小和孩子的食欲度不一定是按大小顺序排列的,所以开始要排序一下,然后从最小的饼干依次从食欲小的孩子开始看,如果他愿意吃,就++,看下一个小孩子,这回拿的就是大一点的饼干了. Examp ...