博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask基础知识点2
阅读量:6529 次
发布时间:2019-06-24

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

怒发冲冠,凭栏处、潇潇雨歇。抬望眼,仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。莫等闲,白了少年头,空悲切!

靖康耻,犹未雪。臣子恨,何时灭!驾长车,踏破贺兰山缺。壮志饥餐胡虏肉,笑谈渴饮匈奴血。待从头、收拾旧山河,朝天阙。

一、Flask的视图CBV

as_view中的name参数是在路由中endpoint参数不存在时代替endpoint来实现反向解析url的功能的,这个参数是必传的,在endpoint和name同时存在是name作用不生效!!!

两个视图类方法:

  • methods = ["GET","POST"] //视图类的方法
  • decorators = ["wrapper1","wrapper2"] //给类添加装饰器
from flask import Flask,url_for,viewsapp = Flask(__name__)class Index(views.MethodView):    methods = ["GET","POST"]   //视图类的方法    decorators = ["wrapper1","wrapper2"]   //给类添加装饰器    def get(self):        print(url_for("indexs"))        return "this is GET request"    def post(self):        return "this is POST request"app.add_url_rule("/index", view_func=Index.as_view(name = "indexs"))app.run()

二、Flask中的插件Flask-Session

  • 下载Flask-Session:
    pip3 install redis
    pip3 install Flask-Session
  • 导入:
    from flask import Flask, session
    from flask_session import Session
    from redis import Redis
  • 配置:
    app.config["SESSION_TYPE"] = "redis"
    app.config["SESSION_REDIS"] = Redis(host="127.0.0.1",port=6379,db=5)
  • 替换:
    Session(app)
  • 使用:
    设置:session["user"] = "aasdf"
    取值:session.get("user")

使用示例:

from flask import Flask, url_for, viewsfrom flask_session import Sessionfrom flask import sessionfrom redis import Redisapp = Flask(__name__)app.config["SESSION_TYPE"] = "redis"app.config["SESSION_REDIS"] = Redis(host="127.0.0.1", port=6379, db=5)app.secret_key = "wangjifei111"   //可有可无Session(app)class Index(views.MethodView):    def get(self):        session["name"] = "wangjifei"        return "this is GET request"    def post(self):        return "this is POST request"app.add_url_rule("/index", view_func=Index.as_view("indexs"))app.run()

三、Flask中的WTforms的使用(和Django的form非常类似,就不累述了)

  • 下载:

    pip3 install wtforms

  • 简单使用:

from flask import Flask, url_for, views, render_template, requestfrom flask_session import Sessionfrom flask import sessionfrom redis import Redisfrom wtforms.fields import simple, corefrom wtforms import Formfrom wtforms import validatorsapp = Flask(__name__)app.config["SESSION_TYPE"] = "redis"app.config["SESSION_REDIS"] = Redis(host="127.0.0.1", port=6379, db=5)Session(app)class LoginForm(Form):    username = simple.StringField(        label="用户名",        validators=[            validators.DataRequired(message="数据不能为空"),            validators.Length(min=5, max=16, message="大于5小于16")        ],        render_kw={"class": "form-control"}    )    password = simple.PasswordField(        label="密码",        validators=[            validators.DataRequired(message="数据不能为空"),            validators.Length(min=5, max=16, message="大于5小于16"),            validators.Regexp(regex="\d+", message="密码必须为数字")        ],        render_kw={"class": "form-control"}    )class Login(views.MethodView):    def get(self):        loginfm = LoginForm()        return render_template("login.html", login_html=loginfm)    def post(self):        loginfm = LoginForm(request.form)        if not loginfm.validate():            return render_template("login.html", login_html=loginfm)        session["user"] = "wangjifei"        return "登陆成功"app.add_url_rule("/login", endpoint="class_login", view_func=Login.as_view(name="login"))app.run()

login.html

    
login界面
{% for field in login_html %}
{
{ field.label }}:{
{ field }}
{
{ field.errors.0 }}
{% endfor %}
  • 略微复杂的使用:
from flask import Flask, url_for, views, render_template, requestfrom flask_session import Sessionfrom flask import sessionfrom redis import Redisfrom wtforms.fields import simple, corefrom wtforms import Formfrom wtforms import validatorsapp = Flask(__name__)app.config["SESSION_TYPE"] = "redis"app.config["SESSION_REDIS"] = Redis(host="127.0.0.1", port=6379, db=5)Session(app)class RegForm(Form):    username = simple.StringField(        label="用户名",        validators=[            validators.DataRequired(message="数据不能为空"),            validators.Length(min=5, max=16, message="大于5小于16")        ],        render_kw={"class": "form-control"}    )    password = simple.PasswordField(        label="密码",        validators=[            validators.DataRequired(message="数据不能为空"),            validators.Length(min=5, max=16, message="大于5小于16"),            validators.Regexp(regex="\d+", message="密码必须为数字")        ],        render_kw={"class": "form-control"}    )    repassword = simple.PasswordField(        label="密码",        validators=[            validators.DataRequired(message="数据不能为空"),            validators.EqualTo("password", message="两次密码不一致")        ],        render_kw={"class": "form-control"}    )    gender = core.RadioField(        label="性别",        choices=(            (1, "女"),            (2, "男"),            (3, "未知")        ),        coerce=int,        default=3,    )    hobby = core.SelectMultipleField(        label="嗜好",        choices=[(1, "健身"),(2,"喝酒"),(3,"旅游")],        coerce=int,        default=1,        render_kw={"class": "form-control"}    )@app.route("/register", methods=["GET", "POST"])def reg():    if request.method == "GET":        regfm = RegForm()        return render_template("reg.html", reg_html=regfm)    else:        regfm = RegForm(request.form)        if not regfm.validate():            return render_template("reg.html", reg_html=regfm)        print(regfm.data.get("hobby"),              regfm.data.get("gender")              )        return "注册成功"app.run()

reg.html

    
Title
{% for field in reg_html %}
{
{ field.label }}:{
{ field }}
{
{ field.errors.0 }}
{% endfor %}

转载地址:http://hjxbo.baihongyu.com/

你可能感兴趣的文章
4:自适应高度ViewPager
查看>>
PHP中exec()函数执行系统命令失败
查看>>
WeexBox 给你最好的图片加载方式
查看>>
单一职责原则
查看>>
CSS中filter属性的使用
查看>>
Mysql读写分离与主从数据库设置方案
查看>>
phpstorm + xdebug 调试教程 -- 总纲
查看>>
Python实用技法第3篇:找到最大或最小的N个元素
查看>>
vue-avatar-tailor,vue头像裁剪组件
查看>>
我们知道CDN护航了双11十年,却不知道背后有那么多故事……
查看>>
python大佬养成计划--面向对象
查看>>
go run main.go undefined? golang main包那点事
查看>>
一个破碎的人,窃机浪漫飞行后自由坠毁
查看>>
前端进阶(13) - 搭建自己的前端脚手架
查看>>
数据挖掘(二):认识数据
查看>>
从零开始写一个npm包,一键生成react组件(偷懒==提高效率)
查看>>
mybatis-plus 不覆盖service,controller, 生成模板使用swagger注解
查看>>
js bom location对象
查看>>
Golang中的路由
查看>>
Windows Containers 大冒险: 容器存储
查看>>