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

  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. js---根据指定的顺序进行排序

    有一个数据列表,我需要根据根据ID依次来取里面的第9,3,8,4项,具体的实现方法. var arr = [ {id:1,title:'我是第一个'}, {id:2,title:'我是第二个'}, { ...

  2. Python学习之旅(二十三)

    Python基础知识(22):进程和线程(Ⅰ) 1.多进程 (1)fork Python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程 fork可以在Mac ...

  3. c++课设

    #include <stdio.h>#include <time.h>#include <math.h>#define C 60000;struct Student ...

  4. 数组copy

    数组copy(推荐用法) System.arraycopy的用法 int[] src = {1,3,5,7,9,11,13,15,17}; int[] dest = {2,4,6,8,10,12,14 ...

  5. php导出超大csv导出方法,读取超大文件或者接受超大数组,防止内存溢出

    基本思路就是,知道总数之后分割成2万一个数组进行查询,最后独立写入csv,避免数据过大导致溢出 速度还不错,在php7下,机器I5 8G内存,128G,SSD,52W多条,大概也就30秒,出来整个文件 ...

  6. 2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践 后门的基本概念及基础问题回答 常用后门工具 netcat Win获得Linux Shell Linux获得Win Sh ...

  7. js 限制输入框只能输入数字的问题

    常规情况下,input设置为 type=‘number’  可以避免汉字,字符,字母,空格的输入,但是不能避免小减号 以及小键盘的减号-,加号+的输入, 可以考虑 监控 输入框的oninput事件,方 ...

  8. SQL Server (MSSQLSERVER) 服务由于下列服务特定错误而终止: %%17051

    问题出现:今天在给客户调试项目的时候,发现无法连接SQL server数据库 解决过程:1.在cmd命令窗口输入services.msc,打开服务窗口,找到SQL Server (MSSQLSERVE ...

  9. Vuex之理解Getters的用法

    一.什么是getters在介绍state中我们了解到,在Store仓库里,state就是用来存放数据,若是对数据进行处理输出,比如数据要过滤,一般我们可以写到computed中.但是如果很多组件都使用 ...

  10. C++的初始化成员列表

    class CExample { public: int a; float b; //构造函数初始化列表 CExample(): a(),b(8.8) {} //构造函数内部赋值 CExample() ...