1.flask中的特殊装饰器

前面我们讲过的装饰器函数中,用来登录验证,这次我们来介绍几个flask中的特殊装饰器

  1). @app.before_request

    具体的用途是: 在请求进入视图函数之前运行

@app.before_request
def func1():
print('我是func1')

  2).@app.after_request

  具体的用途是 : 在执行完视图函数之后,响应客户之前运行

@app.after_request
def func2(ret):
print(f'我是func2,我返回了{ret}')

  注意:这里运行after_request的时候,必须要在函数位置接收一个参数,要不然会报错

  3). @app.errorhandler(404)   #定义错误页面时,我们要写上错误页面的代码

  用途 : 当出现了404错误时,我们自定义返回一个httpresponse响应

@app.errorhandler(404)
def error(error_msg):
print(error_msg)
return f'你访问的页面不存在,发生了{error_msg}错误'

  注意: 这里我们的错误信息也要接收参数

2.flask中的CBV

from flask import views,Flask

app=Flask(__name__)

#CBV写法
class Login(views.MethodView):
def get(self):
return '我是get'
  #不写405,当前请求不被允许
def post(self):
return '我是post' #这里我们路由的方法用下面这个,CBV不支持之前那种
app.add_url_rule('/login',view_func=Login.as_view(name=login))

CBV补充:

在url中,通过as_view()方法实例化对象,然后对象通过dispatch方法,执行分发功能,dispatch()方法会根据request的method的不同调用相应的方法来处理request(如get() , post()等)

3. flask-session 三方组件, 小插件

flask-session  配置

app=Flask(__name__)

#以什么样的方式进行存储
app.config['SESSION_TYPE'] = 'redis' #存储到redis中的6379,db=2的redis中
app.config['SESSION_REDIS'] = Redis(host='127.0.0.1',port=6379,db=2) #secret_key='#$%%$^&*()' 存到redis中
app.config["SECRET_KEY"] = "#$%%$^&*()" #就是将app放到Session中,如果没有这句话,以上的修改操作都不会被执行
Session(app)

  在.py文件中

@app.route("/login")
def login():
session["user"] = "username"
return "OK" @app.route("/see")
def see():
return session.get("user","还没有session") if __name__ == '__main__':
app.run(debug=True)

Windows下的redis安装使用 :

  网址: https://github.com/MicrosoftArchive/redis/releases

  

  下载安装成功后,进入cmd 窗口,redis-cli 即可进入redis

  此时已经成功进入redis

切换redis  db  命令 :  select  db的id  例: select 3

4.WTforms  三方组件 , 小插件

from flask import Flask,request,render_template
from wtforms.fields import simple,core
from wtforms import Form
from wtforms import validators app = Flask(__name__) class Regform(Form):
username = simple.StringField(
label='用户名',
validators=[
validators.DataRequired(message='数据不能为空'),
validators.length(min=6, max=10, message='%(min)d数据长度格式不对%(max)d')
],
render_kw={'class': 'my_class'},
id='my_user'
)
password = simple.PasswordField(
label='密码',
validators=[
validators.DataRequired(message='数据不能为空'),
validators.length(min=6, max=10, message='%(min)d数据长度格式不对%(max)d')
],
render_kw={'class': 'my_pwd'},
id='my_pwd'
) repassword = simple.PasswordField(
label='确认密码',
validators=[
validators.EqualTo('password', message='密码不一致')
],
render_kw={'class': 'my_pwd'},
id='my_pwd'
)
email = simple.StringField(
label='电子邮箱',
validators=[
validators.DataRequired(message='数据不能为空'),
validators.Email(message='邮箱格式不正确,如125@qq.com')
],
render_kw={'class': 'my_email'},
id='my_email'
) hobby = core.SelectMultipleField(
label='爱好',
choices=[
(1, '小姐姐'),
(2, '大姐姐'),
(3, '不大不小姐姐')
],
# 默认值
default=[2],
# 指定发送到前端的值也是int类型
coerce=int
)
gender = core.SelectField(
label='性别',
choices=[
(1, '小姐姐'),
(2, '小哥哥')
],
default=[2],
coerce=int
)
submit = simple.SubmitField(
label='登录',
render_kw={'class': 'red'}
) @app.route("/reg",methods=["POST","get"])
def reg():
if request.method == "GET":
rf = RegForm()
return render_template("reg.html",rf=rf)
else:
rf_data = RegForm(request.form)
if rf_data.validate():
print(rf_data.data)
return f"登陆成功{rf_data.data.get('username')}"
else:
return render_template("reg.html",rf=rf_data)
if __name__ == '__main__':
app.run(debug=True)

flask 第三章 特殊装饰器 CBV Flask-Session WTForms的更多相关文章

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

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

  2. 简学Python第四章__装饰器、迭代器、列表生成式

    Python第四章__装饰器.迭代器 欢迎加入Linux_Python学习群  群号:478616847 目录: 列表生成式 生成器 迭代器 单层装饰器(无参) 多层装饰器(有参) 冒泡算法 代码开发 ...

  3. Python 入门之 Python三大器 之 装饰器

    Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...

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

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

  5. Flask--特殊装饰器, CBV, 三方组件

    一. Flask中的特殊装饰器 before_request # before_request 是在视图函数执行之前执行的 @app.before_request def before(): prin ...

  6. 流畅的python第七章函数装饰器和闭包学习记录

    本章讨论的话题 python如何计算装饰器句法 python如何判断变量是不是局部的(通过函数内部是否给变量赋值过来判断是否是局部变量) 闭包存在的原因和工作原理(闭包是一种函数,它会保留定义函数时存 ...

  7. flask的路由配置,特殊装饰器

    1,flask中的路由 endpoint-url_for反向地址 endpoint默认是视图函数名endpoint="雪雪" methods 指定视图函数的请求方式,默认GET d ...

  8. Flask蓝图Blueprint和特殊装饰器

    Flask 中的 蓝图 Blueprint 不能被run的flask实例:相当于django中的app01 应用 蓝图作用:功能隔离 路由隔离 Blueprint就是 一个不能run的flask 蓝图 ...

  9. 流畅的python学习笔记第七章:装饰器

    装饰器就如名字一样,对某样事物进行装饰过后然后返回一个新的事物.就好比一个毛坯房,经过装修后,变成了精装房,但是房子还是同样的房子,但是模样变了. 我们首先来看一个函数.加入我要求出函数的运行时间.一 ...

随机推荐

  1. dell-7559安装deepin15.8

    这大概是我第三次尝试安装deepin了,上一次是显卡问题解决不了,这一次迷迷糊糊问题就解决了. 但是也是尝试了三五十次开机吧233333. 最终是EFI启动,grub引导deepin和win7. 我是 ...

  2. Java基础面试题总结

    目录 索引 Java基础知识篇 Java web基础知识总结 Java集合篇常见问题 Java基础知识篇 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较 ...

  3. shell实现rpm -e 一键卸载所有相关包以及依赖

    原理也比较简单, 刚好用到就稍微写了一下, 做个笔记 #!/bin/bash #************************************************************ ...

  4. open-falcon部署v0.2.1版本

    环境准备 安装redis yum install redis -y systemctl start redis 安装mysql rpm -ivh http://dev.mysql.com/get/my ...

  5. day10函数,函数的使用,函数的分类,函数的返回值

    函数 # ***** # 函数:完成 特定 功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表函数 # -- 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名 ...

  6. tcp的三次握手,四次挥手

    为了更好的记住知识点,所以将最近学习的知识点记录下来: 最开始A和B都处于closed(关闭连接状态) 1.tcp的第一次握手:客户端A  向服务器端B 发送请求连接报文段(包含SYN=1,初始序号s ...

  7. java中‘\'和'/'的区别

    斜杠“/”表示地址路径的下一级目录:反斜杠“\”表示转义字符,例如:要做制表,可以输入:\t:做换行:\n等.如果要输出反斜杠“\”也需要用转义字符:“\\”    在java中后台给前台传的时候如果 ...

  8. MemoryStream生成Excel

    public static MemoryStream ToExcel<T>(List<T> list, string filePath = null) { var memory ...

  9. HttpClient exception:ExceptionType:System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System.IO.IOException: Unable to read data from the transport connection: Operation ca

    error msg: System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System. ...

  10. Linux常用命令——文本编辑器Vim

    Linux常用命令--文本编辑器Vim Linux  Vim常用操作 插入命令 a 在光标所在字符后插入 A 在光标所在行尾插入 i 在光标所在字符前插入 I 在光标所在行首插入 o 在光标下插入新行 ...