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 ...
随机推荐
- 使用JDBC连接操作数据库
JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成. JDBC ...
- 深入解读MySQL8.0 新特性 :Crash Safe DDL
前言 在MySQL8.0之前的版本中,由于架构的原因,mysql在server层使用统一的frm文件来存储表元数据信息,这个信息能够被不同的存储引擎识别.而实际上innodb本身也存储有元数据信息.这 ...
- Web部分
说出Servlet的生命周期,并说出Servlet和GCI的区别. Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init方法进行Servlet的初始化,请求到达时 ...
- 最近javascript的学习小记
一.关于javascript的原型与隐式原型 1.prototype 首先function是一个对象,每一个function都具有一个prototype对象,prototype对象默认是{constr ...
- Java-获取年月日对应的天干地支
一.概述 本次是以java语言开发为例,计算出年月日对应的天干地支. 二.代码 public class MyDate { /** * 对于年月日的天干地支 */ private int year_g ...
- Python 基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控
基于Python结合pykafka实现kafka生产及消费速率&主题分区偏移实时监控 By: 授客 QQ:1033553122 1.测试环境 python 3.4 zookeeper- ...
- Vue与React两个框架的区别对比
简单介绍 React--Facebook创建的JavaScript UI框架.它支撑着包括Instagram在内的大多数Facebook网站.React与当时流行的jQuery,Backbone.js ...
- 深入理解group by 语句的执行顺序 from→where→group by→select(含聚合函数)
由于之前没有对group by 语句的执行顺序(执行原理)做深入的了解,所以导致在实际应用过程中出现了一些问题.举个简单的粟子,比如一个表testA中的所有数据如下图: 我现在想从testA中查询us ...
- 解决laravel Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found 错误
这个错误的原因来自于没有安装一个依赖库: 官方文档说明如下: Modifying Columns Prerequisites Before modifying a column, be sure to ...
- (爬虫)requests库
一.requests库简介 urllib库和request库的作用一样,都是服务器发起请求数据,但是requests库比urllib库用起来更方便,它的接口更简单,选用哪种库看自己. 如果没有安装过这 ...