一、before_request装饰器和after_request装饰器

  我们现在有一个Flask程序其中有3个路由和视图函数

from flask import Flask

app = Flask(__name__)  # type:Flask

@app.route("/login")
def login():
return "Login" @app.route("/index")
def index():
return "Index" @app.route("/home")
def home():
return "home" app.run("0.0.0.0", 5000)

  如果我们需要让用户登录才可以看到index和home怎么办就需要认证下也就用到了session,查看session中有没有数据就可以了所以我们就要在请求index页面和home页面之前判定是否登陆了

  1.@app.before_request在请求进入视图函数之前执行

from flask import Flask
from flask import request
from flask import redirect
from flask import session app = Flask(__name__) # type:Flask
app.secret_key = "DragonFire" @app.before_request
def is_login():
if request.path == "/login":
return None if not session.get("user"):
return redirect("/login") @app.route("/login")
def login():
return "Login" @app.route("/index")
def index():
return "Index" @app.route("/home")
def home():
return "Login"

@app.before_request就是这样一个装饰器,他所装饰的函数,都会在请求进入视图函数之前执行

  2.after_request在响应返回客户端之前执行,结束视图函数之后

  

@app.after_request
def foot_log(environ):
if request.path != "/login":
print("有客人访问了",request.path)
return environ

二、Flask中的另一种添加设置访问路径的方法以及Flask中的CBV

app.add_url_rule("/路径名",view_func=类名.as_view(name="login"))

  

  1.Flask中的CBV

  比如我们设置一个登陆

from flask import views
class Login(views.MethodView):
methods = ["GET","POST"]
def get(self):
returen "这是get请求返回" def post(self):
print("这是post提交") app.add_url_rule("/login",view_func=Login.as_view(name="login"))

三、WTForms三方组件小插件

  我们先要安装WTForms组件,安装方法类似于Flask

  比如我们用WTForms返回一个登陆页面带验证的那种我们应该怎么写呢??

  1.新建一个py文件用来写我们要返回的登陆页面的内容

  app01.py文件内容

from wtforms import Form,validators
from flask import Flask app = Flask(__name__) class Loginform(Form):
username = simple.StringField(
label="用户名",
validators=[
validators.DataRequired(message="用户名不能为空"),
validators.length(max=10,message="用户名长度不能超过10")
]
)
password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="密码不能为空"),
validators.length(min=6,message="密码长度不能小于%(min)s"),
validators.length(max=10,message="密码长度不能大于%(max)s")
]
) button = simple.SubmitField(
label="登陆"
) class Login(views.MethodView):
methods = ["GET","POST"]
def get(self):
login_form = Loginform()
return render_template("login.html",loginform = login_form)
     #把login_form类丢给前端文件 def post(self):
login_form_data = Loginform(request.form)print(request.form.get("username"))
print(request.form.get("password"))return "登陆成功"
if __name__ == '__main__':
app.run(debug=True)

  2.我们的前端文件html

  login.html 文件中的内容

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<title>Bootstrap 101 Template</title> <!-- Bootstrap --> </head>
<body>
<form action="" method="post" novalidate>
<p>
{{ loginform.username.label }}
{{ loginform.username }}
{{ loginform.username.errors.0 }}
</p>
<p>
{{ loginform.password.label }}
{{ loginform.password }}
{{ loginform.password.errors.0 }}
</p>
{{ loginform.button }}
</form>
</body>
</html>

Flask中的before_request装饰器和after_request装饰器以及WTForms组件的更多相关文章

  1. Flask中的before_request after_request

    1.@app.before_request 在请求(request)之前做出响应 @app.before_request 也是一个装饰器,他所装饰的函数,都会在请求进入视图函数之前执行 2.@app. ...

  2. Flask中的before_request和after_request

    1.@app.before_request 在请求(request)之前做出响应 @app.before_request 也是一个装饰器,他所装饰的函数,都会在请求进入视图函数之前执行 2.@app. ...

  3. Flask中的route

    1. route的定义: 客户端发送请求给web服务器,web服务器再将请求发送给Flask程序实例 程序实例需要知道每个url请求所对应的运行代码是谁.所以程序中必须要创建一个 url 请求地址 到 ...

  4. Flask(2)- 装饰器的坑及解决办法、flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件、重定义错误页面)

    一.装饰器的坑以及解决方法 1.使用装饰器装饰两个视图函数,代码如下 from flask import Flask, redirect, render_template, request, sess ...

  5. Flask中before_request与after_request使用

    目录 1.前提,装饰器的弊端 2.before_request与after_request 2.1 before_request分析: 2.2 after_request分析: 3.before_re ...

  6. flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证

    flask路由中的endpoint 与自定义转化器 ''' endpoint主要用于 反向解析, 例如:login函数中配的路由是/login,其中endpoint='lg' 则在其他函数,可以用 u ...

  7. Flask如何给多个视图函数增加装饰器

    这几天在学习Flask, 遇到了些小问题,比如说怎么给多个视图函数加相同的装饰器 给单独一个视图函数加装饰器的话很简单,写一个装饰器,然后直接加在原装饰器下面即可,多个的话,会报这样一个错误: 这个异 ...

  8. python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

    一.生成器 1.什么是生成器? 在python中,一边循环一边计算的机制,称为生成器:generator. 2.生成器有什么优点? 1.节约内存.python在使用生成器时对延迟操作提供了支持.所谓延 ...

  9. python中“生成器”、“迭代器”、“闭包”、“装饰器”的深入理解

    python中"生成器"."迭代器"."闭包"."装饰器"的深入理解 一.生成器 1.生成器定义:在python中,一边 ...

随机推荐

  1. c# 解释器模式与sping.net表达式的结合应用(金融里经常需要用到公式,这个公式是抽象的需要自己解释)

    .代码 using Spring.Expressions; using System; using System.Collections.Generic; using System.Linq; usi ...

  2. SOCKET句柄泄露带来的内存灾难

    前些时候游戏莫名其妙出现大量内存泄露,我感到很诧异,当然一般情况下游戏的内存管理是极其严苛的,出现如此大量的内存泄露到底是怎么回事? 句柄滥用导致的内存泄露会多夸张呢,尤其SOCKET,在某些客户端系 ...

  3. 【转】简说GNU, GCC and MinGW (Lu Hongling)

    原地址:https://my.oschina.net/u/588967/blog/73478 GNU, GCC, MinGW是开源社区常常要遇到的概念. 网上一般的解释比较繁琐, 让人如坠云雾. 本文 ...

  4. ZOJ2208 To and Fro 2017-04-16 19:30 45人阅读 评论(0) 收藏

    To and Fro Time Limit: 2 Seconds      Memory Limit: 65536 KB Mo and Larry have devised a way of encr ...

  5. 51nod1057—N的阶乘—(大数阶乘)

    1057 N的阶乘  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入N求N的阶乘的准确值.   Input 输入N(1 <= N <=  ...

  6. hdu2364之BFS

    Escape Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  7. struts2+ckeditor配置图片上传

    又是一个漫漫长夜. 公司的编辑器坏了,用的是百度编辑器,上传图片的网址被框架给拦截了,我们本地怎么测试都没问题,放到服务器就这样了.和老李找了半天,疯了,没原因的. 笔者以前用过jsp+ckedito ...

  8. sql--CONVERT、FOR XML PATH解决实际问题

    需求:每个平台分类下的门店,每个门店的名称.图片路径.评分,每个门店下的四个产品的名称.图片路径.评分 思路: 一开始门店动态化好写,用Ajax就行了.但是每个门店下面的产品,每个去请求一次查询有点不 ...

  9. driver.get()和driver.navigate().to()到底有什么不同?-----Selenium快速入门(四)

    大家都知道,这两个方法都是跳转到指定的url地址,那么这两个方法有什么不同呢?遇到这种情况,第一反应就是查查官方的文档. 官方文档的说法是:Load a new web page in the cur ...

  10. c#设计模式之策略者模式(Strategy Pattern)

    场景出发 假设存在如下游戏场景: 1:角色可以装备木剑,铁剑,魔剑3种装备,分别对怪物造成20HP,50HP,100HP伤害(未佩戴装备则无法攻击); 2角色可以向怪物攻击,一次攻击后损失角色所佩戴装 ...