一.特殊装饰器(中间件)

  1.before_request

  在请求进入视图函数之前

    @app.before_request
def look():

  2. after_request

  在结束视图函数之后,响应返回客户端之前

    @app.after_request
def af1(res)
from flask import Flask, request, session, redirect

app = Flask(__name__)
app.secret_key = "#$%^&*(" @app.before_request # 在请求 之前
def look():
print("be1")
if request.path == "/login":
return None
if session.get("username"):
return None
else:
return redirect("/login")
# print(request.method)
# return "我是before 我不让你走" @app.before_request # 在请求 之前
def be2():
print("be2") @app.before_request # 在请求 之前
def be3():
print("be3") @app.route("/")
def index():
print("index page")
return "index page" @app.route("/login")
def login():
print("正在登陆......")
session["username"] = "username"
return "login" @app.after_request
def af1(vf_ret):
# vf_ret.response[]=b'2000000 OK!'
print("af1")
return vf_ret @app.after_request
def af2(vf_ret):
# vf_ret.response[]=b'2000000 OK!'
print("af2")
return vf_ret @app.after_request
def af3(vf_ret):
# vf_ret.response[]=b'2000000 OK!'
print("af3")
return vf_ret
if __name__ == '__main__':
app.run(debug=True)

打印的结果为:

请求顺序:
正常 : be1 - be2 - be3 - vf - af3 - af2 - af1
异常 : be1 - af3 - af2 - af1

  3. errorhandler( )

  重定义错误信息

    @app.errorhandler()
def error404(errormessage):

实例:

from flask import Flask, request, session, redirect

app = Flask(__name__)

@app.route("/login")
def login():
print("正在登陆......")
return "login" @app.errorhandler(404) # 重定义404的错误
def error404(error_message):
print(error_message)
return f"你确定你要查看{request.path}这个页面吗?它已经走丢了,你快去找吧 "
# return redirect("http://baidu.com") if __name__ == '__main__':
app.run(debug=True)

二. Flask 中的 CBV

  基本格式为:

from flask import Flask, request,views

app = Flask(__name__)

class Login(views.MethodView):
# methods=["POST","GET"]
# decorators = []
def get(self):
return "login" def post(self):
return "post_login" app.add_url_rule("/login",view_func=Login.as_view(name="login")) # endpoint = None 默认视图函数名as_view(name="login") name="login" if __name__ == '__main__':
app.run(debug=True)

三.  windows 下 redis的使用

  1.下载安装

③启动服务端: redis-server

 启动客户端: redis-cli

  2.redis 模块的使用

  ①模块下载

  ②简单使用

from redis import Redis

re = Redis(host="127.0.0.1",port=,db=)

            #  db 的范围在  1~15 类似于15 个库
            # 切换时 用 select 1 re.set("kkk","") print(re.get("kkk"))

四.   三方组件  之   Flask-session

# .不想将Session的信息存放在Cookie
# .将Session存放在Redis
# .Cookie中保存Session的ID

  1.组件下载

  2.简单使用

  ①直接进行初始化

from flask import Flask, request, session
from flask_session import Session
from redis import Redis # from setting import Set app = Flask(__name__)
#初始化
app.config["SESSION_TYPE"] = "redis"
app.config["SESSION_REDIS"] = Redis(host="127.0.0.1",port=,db=) Session(app) @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) # app.wsgi_app

  ② 设置setting.py  初始化  进行导入

  1.在setting.py中

from redis import Redis
class Set(object):
SESSION_TYPE = "redis"
SESSION_REDIS = Redis()

  2.使用时导入

五.  三方组件  之   WTForms

  ①下载

  ②简单使用

  在  .py 文件中

from flask import Flask,request,render_template

app = Flask(__name__)

from wtforms.fields import simple,core
from wtforms import Form
from wtforms import validators class RegForm(Form):
username = simple.StringField(
label="用户名",
validators=[
validators.DataRequired(message="数据不能为空"),
validators.Length(min=,max=,message="%(min)d数据长度问题%(max)d")
],
render_kw={"class":"my_class"},
id="my_username"
) password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="数据不能为空"),
validators.Length(min=, max=, message="%(min)d数据长度问题%(max)d")
],
render_kw={"class": "my_class"},
id="my_pwd"
) repassword = simple.PasswordField(
label="确认密码",
validators=[
validators.EqualTo("password",message="密码不一致")
]
) email = simple.StringField(
label="电邮",
validators=[
validators.Email(message="邮箱格式有问题例如1@1.1")
]
) hobby = core.SelectMultipleField( # 多选
label="爱好",
choices=[
(,"小姐姐"),
(,"老阿姨"),
(,"小萝莉"),
(,"御姐"),
],
default=[,],
coerce = int
) gender = core.SelectField( # 单选
label="性别",
choices=[
(, "小姐姐"),
(, "小哥哥"),
],
default=,
coerce=int
) sub = simple.SubmitField(      # 可直接写在 .html 中,更方便
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)

  在 .html  文件中

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post" novalidate>
{% for field in rf %}
<p>{{ field.label }}{{ field }}{{ field.errors. }}</p>
{% endfor %}
</form>
</body>
</html>

flask --- 03 .特殊装饰器, CBV , redis ,三方组件的更多相关文章

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

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

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

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

  3. python flask route中装饰器的使用

    问题:route中的装饰器为什么感觉和平时使用的不太一样,装饰器带参数和不太参数有什么区别?被修饰的函数带参数和不带参数有什么区别? 测试1:装饰器不带参数,被修饰的函数也不带参数. def log( ...

  4. flask session,蓝图,装饰器,路由和对象配置

    1.Flask 中的路由   *endpoint - url_for 反向地址  *endpoint 默认是视图函数名  *methods 指定视图函数的请求方式,默认GET  defaults={& ...

  5. Flask系列06--(中间件)Flask的特殊装饰器 before_request,after_request, errorhandler

    一.使用 Flask中的特殊装饰器(中间件)方法常用的有三个 @app.before_request # 在请求进入视图函数之前 @app.after_request # 在请求结束视图函数之后 响应 ...

  6. flask(1.1)装饰器装饰多个视图函数出现的问题

    目录 1.装饰器装饰多个视图函数出现的问题 2.使用装饰器修复技术解决该问题 1.装饰器装饰多个视图函数出现的问题 代码实例: from flask import Flask, request, re ...

  7. flask框架-decorator装饰器

    调用包: from functools import wraps 装饰器其实就是一个函数:参数是一个函数,返回值是一个函数 1.装饰器使用是通过@符号,在函数的上面 2.装饰器中定义的函数,要使用*a ...

  8. Cookie与Session、CBV添加装饰器

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  9. flask模板语言,装饰器,路由及配置

    1.模板语言jinja2 Flask中默认的模板语言是Jinja2 1.0 模板传参 from flask import Flask,render_template app = Flask(__nam ...

随机推荐

  1. python学习中的bug

    1.在pycharm的terminal中的python工程目录下update pip失败,但是在cmd中为什么就可以.’

  2. unicode 与 utf-8 编码概念及区别

    unicode 是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案.每个字符都对应一个编号,编号的范围是0-0x10FFFF来.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为 ...

  3. Tomcat部署工程需注意的三点

    Tomcat部署工程需注意: 1.如果该服务器是第一安装Tomcat,则各位大人应将该Tomcat的解压文件夹 backup 一份,已被不时之用.2.部署时应当注意修改Tomcat安装目录中conf文 ...

  4. mysql 锁查询

    1.查看正在被锁定的的表 show OPEN TABLES where In_use > 0; in_use:多少个线程在使用 name_locked:是否被锁 2.查询哪些线程正在运行. 这个 ...

  5. linux--python虚拟环境篇

    python的虚拟环境 首先我们得知道为什么要要用虚拟环境? 在使用python开发过程中,各种业务需求多了,导致工程任务多了,难免会碰到不同的工程依赖不同版本库的问题,;或者是在开发的时候不想让物理 ...

  6. asp.net mvc easyui tree

    1.html页面代码: <div class="easyui-panel" style="padding:5px" id="powerTree& ...

  7. 1、vue 笔记之 组件

    1.组件个人理解:  <组件>是页面的一部分,将界面切分成部分,每部分称为 <组件>   2.组件化思想:          //2.1.定义一个全局的组件,组件支持‘驼峰命名 ...

  8. docker容器的操作

    容器操作 1.查看本地容器 docker ps -a # 查看所有容器 docker ps # 查看所有正在运行的容器 2.容器的创建与启动 方法一:两步完成(强烈推荐方法)(1)创建 docker ...

  9. mongodb删除重复数据

    注:mongodb当前版本是3.4.3   插入六条数据:   查询存在重复的数据:   查询并循环删除重复数据:   删除语句解析: db.userInfo.aggregate([     {   ...

  10. java之Spring集成CXF简单调用

    简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 X ...