一. 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, 三方组件的更多相关文章

  1. Flask - 特殊装饰器 和 Flask工作结构模式(FBV, CBV)

    目录 Flask - 特殊装饰器 和 Flask工作结构模式 @app.errorhandler() @app.before_request @app.after_request FBV和CBV Fl ...

  2. python装饰器 & flask 通过装饰器 实现 单点登录验证

    首先介绍装饰器,以下是一段标注了特殊输出的代码.用于帮助理解装饰器的调用过程. import time def Decorator_one(arg1): info = "\033[1;31; ...

  3. flask --- 03 .特殊装饰器, CBV , redis ,三方组件

    一.特殊装饰器(中间件) 1.before_request 在请求进入视图函数之前 @app.before_request def look(): 2. after_request 在结束视图函数之后 ...

  4. flask 第三章 特殊装饰器 CBV Flask-Session WTForms

    1.flask中的特殊装饰器 前面我们讲过的装饰器函数中,用来登录验证,这次我们来介绍几个flask中的特殊装饰器 1). @app.before_request 具体的用途是: 在请求进入视图函数之 ...

  5. Flask中的before_request装饰器和after_request装饰器以及WTForms组件

    一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...

  6. 认证登录装饰器与form组件的使用

    def auth(func): '''制作登录认证的装饰器''' def inner(request,*args,**kwargs): user_info=request.session.get(se ...

  7. flask类装饰器

    from flask import Flask,request,views from functools import wraps app = Flask(__name__) #自定义登录装饰器 de ...

  8. Flask 之装饰器有关

    - 先记住一句话:自定义python装饰器时一定要记住使用@functools.wraps(func)修饰wrapper - 在Flask中使用装饰器遇到AssertionError: View fu ...

  9. flask之Flask特殊装饰器

    flask_decorators.py ''' Flask中的特殊装饰器: (1)@app.before_request 请求到达视图函数之前,进行自定义操作,类似django中间件中的process ...

随机推荐

  1. Android序列化

    1.序列化的目的 (1)永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中 (2)通过序列化对象在网络中传递对象 (3)通过序列化对象在进程间传递 (4)在Intent之间,基本的数据类型直接 ...

  2. redis使用场景和java测试案例

    redis数据结构和使用场景 strings lists sets sort sets hashes strings token session validateCode 分布锁 lists 最近联系 ...

  3. python异常处理的哲学

    所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事.异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学.限于认知能力和经验所限,不可 ...

  4. 整合 MyPerf4J 做Java性能监控和统计工具

    快速启动MyPerf4J MyPerf4J 采用 JavaAgent 配置方式,透明化接入应用,对应用代码完全没有侵入. 打包 项目地址: https://github.com/LinShunKang ...

  5. 面试常问的几个排序和查找算法,PHP实现

    冒泡,快排,二分查找,都是面试常问的几个算法题目,虽然简单,但是一段时间不用的话就很容易忘记,这里我用PHP实现了一下,温故而知新. 排序 冒泡排序 每一次冒出一个最大的值 function bubb ...

  6. VSCode瞎折腾记

    搬到小机房后终于能用VSCode啦(没错以前的系统是xp) 但是这东西比Dev难搞多了qwq,简单记一下自己的DIY历程吧(不然全搞炸就凉了) 设置语言为中文 可以直接下载插件 让VSCode支持编译 ...

  7. 【Android】用Cubism 2制作自己的Live2D——官方App样例源码学习(2)!

    前言- 明确了项目目录的结构,但是结构什么的也太"抽象"了. 本篇开始上代码! 模型的绘制- 前几天的学习中,live2d的绘制有了一些了解了,在Android端使用OpenGL ...

  8. 微信小程序(基本知识点)

    创建页面的两种方式:   1.通过创建文件夹的方式创建(.wxml/.wxss/.json/.js/)   2.在app.json的"pages": []中添加路径"pa ...

  9. MySQL 基础知识梳理学习(六)----锁

    1.什么是锁: 对共享资源进行并发访问控制,提供数据的完整性和一致性. 2.锁的区别: 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务过程 临界资源 ...

  10. C#隐式转换与显示转换

    System.Objec时C#中所有类型的基类,也就是万类之源. 一.值类型 值类型都继承自System.ValueType(派生自System.Objec),继承自System.ValueType的 ...