博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask 第三章 特殊装饰器 CBV Flask-Session WTForms
阅读量:6364 次
发布时间:2019-06-23

本文共 3701 字,大约阅读时间需要 12 分钟。

1.flask中的特殊装饰器

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

  1). @app.before_request

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

@app.before_requestdef func1():    print('我是func1')

 

  2).@app.after_request

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

@app.after_requestdef 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,Flaskapp=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))

 

 

 

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安装使用 :

  网址: 

   

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

       

  此时已经成功进入redis 

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

4.WTforms  三方组件 , 小插件

from flask import Flask,request,render_templatefrom wtforms.fields import simple,corefrom wtforms import Formfrom 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)

 

转载于:https://www.cnblogs.com/zty1304368100/p/10690162.html

你可能感兴趣的文章
5、根文件系统原理
查看>>
回档|过河
查看>>
perspective transform透视矩阵快速求法+矩形矫正
查看>>
go语言中在变量后加上接口是什么意思?
查看>>
day5-iptables
查看>>
版本配置
查看>>
python之进程
查看>>
wpf中嵌入winform控件的坑
查看>>
VMware Workstation and Hyper-V are not compatible. 解决方案
查看>>
POJ-3304Segments[计算几何]
查看>>
杭电2120--Ice_cream's world I(并查集)
查看>>
雅虎前段优化35条
查看>>
(转)接口100
查看>>
mysql 优化攻略.来自github
查看>>
ThinkPHP5 将session保存到 mysql
查看>>
设计模式:灵活编程(装饰模式)
查看>>
单据号生成
查看>>
Count and Say leetcode
查看>>
简单易用的APP制作软件,KM盒子V6.3版发布
查看>>
Appium移动自动化测试之问题总结
查看>>