威尼斯人线上娱乐

Flask中的表单达成页面注册,从多少个实例学习

18 4月 , 2019  

  本案例通过落到实处2个注册页面包车型大巴编排,来带你明白FLASK-WTF的运用.

从三个实例学习—-FLASK-WTF,实例—-flask-wtf

  本案例通过落到实处一个登记页面包车型大巴编辑,来带你理解FLASK-WTF的运用.

  

  首要效用为表单基础的功用–手提式有线电话机号码不可能不为1三个人数,且通过数据库查找无法有已经登记的了,密码须要输入一次且务必一致,且具备内容不能够为空的晋升等内容.那么今后就初阶把!

  

  一.创立表单类.

    首先利用flask-wtf你不可能不确认保证您的条件中已经安装wtf,假设你是python三的环境,大家得以经过 pip三 install Flask-WTF 来开始展览安装.

 

    安装好了现在大家来进展导入:    

      from flask_wtf import Form
      from wtforms import StringField, SubmitField, PasswordField, ValidationError
      from wtforms.validators import DataRequired, EqualTo, Length
      from models import USER

    

    让大家一步步来精通!!

    

    第三行代码我们从 falsk-wtf 中程导弹入了 Form 类,未来大家成立的具备表单类都要三番五次自这一个类.

    第2行代码大家从 wtforms 
中程导弹入了 StringField,Submit菲尔德,PasswordField,ValidationError ,那么这么些事物是用来干什么的吧?作者深信只要某个过1些HTML的人应该都认识HTML表单中<input>成分的type=”text”,type=”submit”,type=”password”那类属性吧.原理是同一的.

    第三行代码大家又从 wtforms.validators 中程导弹入了 DataRequired,EqualTo,Length ,其中 DataRequired用来表明表单数据无法为空, EqualTo 常用来比较四个代码是或不是非凡, Length 用来限制字符长度.

    第陆行代码是导入数据库模型的USEPAJERO类,用来查询数据库中是还是不是早就注册了手提式有线电话机号.如若已经登记了,再用第三行代码的 ValidationError 来抛出警告.

    

    实例如下:      

    class Regist(Form):
        phone = StringField("请输入手机号", validators=[DataRequired(), Length(min=11, max=11, message="手机号码是11位数")])
        name = StringField("请输入用户名", validators=[DataRequired()])
        password = PasswordField("请输入密码", validators=[DataRequired()])
        password1 = PasswordField("请重复密码", validators=[DataRequired(), EqualTo("password", "密码必须一样")])
        submit = SubmitField("立即提交")

        def validate_phone(self, field):
            if USER.query.filter_by(phone=field.data).first():
                raise ValidationError("傻子,你的手机号码被注册了!!")

     如此三个注册表单类就成立成功了!!

  

 2.视图函数中编辑逻辑

    小编先直接把代码列出来:     

      # 注册界面
      @app.route("/regist/", methods=["GET", "POST"])
      def regist():
          form = Regist()
          if form.validate_on_submit():
              telephone = form.phone.data
              username = form.name.data
              password = form.password.data
              if form.validate_phone():
                  user = USER(phone=telephone, name=username, password=password)
                  db.session.add(user)
                  db.session.commit()
                  return redirect(url_for("login"))
          else:
              return render_template("regist.html", form=form)

       

      大家先用  form=Regist() 实例化叁个表单类的靶子,后边紧跟着一个尺度语句, validate_on_submit 意思是推断表单内的数码是或不是为空,最大尺寸是或不是….等先前安装的限定标准以及判别表单内容是还是不是付出过了.假设是,那么就代表我们提交了表单数据,并且展开末端的操作,如若不是.就意味着大家只是展开了那些注册页面,用 return render_template(“regist.html”,
form=form)  渲染模板,并且把实例化的对象form作为参数字传送递到模板中.

      

      大家跟着继续提交表单后的代码掌握 telephone = form.phone.data    username = form.name.data   password =
form.password.data  那3行代码是得到用户填写的手提式有线话机号,用户名,密码那几个数据.

      

      获取之后,我们在进行判别.调用注册表单类的validate_phone()函数,如若忘记内容能够再看看上边.假若为true,就表示着那些手提式有线电话机号未有被登记,继续实行末端的把用户填写的数量存进数据库的操作.

        user = USER(phone=telephone, name=username, password=password)

      

      那段代码的情致是USE安德拉用户表中有phone,name,password的属性.大家把收获的用户数据telephone,username,password赋值给它,在通过 db.session.add(user)
db.session.commit() 那两行代码提交到数据库中.

      

      数据库中是用到了flask-sqlalchemy,那里不做具体讲明,未来有机遇再讲.笔者把代码贴出来:         

lass USER(db.Model):
    __tablename__="user"
                 id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    phone=db.Column(db.String(11),nullable=False)
    name=db.Column(db.String(50),nullable=False)
    password=db.Column(db.String(100),nullable=False)        

   

 三.在模板中使用

      其三步也是最终一步.如果你的连串应用了flask-bootstrap的话,能够通过:         

        {% import "bootstrap/wtf.html" as wtf %}

        <form action="" method="post">
              {% block page_content %}
                    {{ wtf.quick_form(form) }}
              {% endblock %}
          </form>

      

      wtf.quick_form(form)直接扭转表单,是还是不是很有利?当然未有样式,假若您要丰盛样式的话能够如此:        

          <form method="POST">
            {{ form.hidden_tag() }}
            {{ form.name.label }} {{ form.name(id='my-text-field') }}
            {{ form.submit() }}
            </form>

      

      好了,到那边就甘休了.假设你把那么些全弄懂了,你还是能平昔阅读它的普通话文档. 

                                                              待续……….

本案例通过兑现五个挂号页面包车型客车编排,来带您理解FLASK-WTF的接纳.
主要效率为表单基础的职能–手…

使用flask-migrate

动用Flask-WTF处理表单

恢宏Flask-WTF承继了WTFforms,使用它能够在flask中更有利于的利用WTForms。Flask-WTF将表单数据解析、CSLANDF爱抚、文件上传等作用与Flask集成。

  

almebic是一个数据库版本管理的工具,在对三个数据表实行增多列,删除列的时候一定于进行了数据库版本的更改。flask-migrate是对almbic进行的包裹,方便在flask中选取alembic管理数据库。

先用pipenv安装flask-wtf及其依赖:

激活pipenv环境

威尼斯人线上娱乐 1

看下环境中设置了什么样

威尼斯人线上娱乐 2

pipenv install flask-wtf,安装flask-wtf

威尼斯人线上娱乐 3

装完了后:

威尼斯人线上娱乐 4

flask-wtf默以为每一种表单启用CSOdysseyF保养,它为我们自动生成和验证CSHummerH二F令牌。私下认可情形下,fflask-wtf使用程序秘钥来对CSLANDF令牌进行签订契约,所以大家要求为顺序设置秘钥:

app.secret_key = ‘secret string’

  主要成效为表单基础的职能–手提式有线电话机号码无法不为十二人数,且经过数据库查找无法有曾经登记的了,密码供给输入两遍且务必1致,且有着故事情节无法为空的提拔等内容.那么今后就起首把!

采取flask-migrate首先要在create_app的时候将它注册到app上。

定义WTForms表单来

利用WTForms创制表单时,表单由python类表示,那几个类承接从STForms导入的Form类。3个表单由若干个输入字段组成,那些字段分别用表单类的类属性来表示(字段即田野同志,能够省略明了为表单内的输入框、开关等部件),上面定义了一个LoginForm类,最终会生成像在此以前定义的HTML表单:

from wtforms import Form, StringField, PasswordField, BooleanField, SubmitFieldfrom wfforms.validators import DataRequired, Lengthclass LoginForm:    username = StringField('Username', validators=[DataRequired    password = PasswordField('Password', validators=[DataRequired(), Length(8,128)])    remember = BooleanField('Remember me')    submit = SubmitField('Log in')

每个字段属性通超过实际例化WTForms提供的字段类来表示。字段属性的名号将作为对应HTML<input>成分的name属性及id属性值。

字段属性名称大小写敏感,不能够以下划线或validate开头。

此地的LoginForm表单类中定义了多个字段:文本字段StringField、密码字段Pawword-Field、勾选框字段BooleanField和交由开关字段SubmitField。字段类从wtforms包导入,有个别字段最后生成的HTML代码一样,不过WTForms会在表单提交后基于表单类中字段的品种对数码进行拍卖,转换来对应的python类型,以便在python脚本中对数据开始展览处理。

常用的WTForms字段如下表:

威尼斯人线上娱乐 5

经过实例化字段类时传入的参数,大家得以对字段实行安装,字段类构造方法接受的常用参数如下表:

威尼斯人线上娱乐 6

在WTForms中,验证器(validator)是一多重用于评释字段数据的类,我们在实例化字段类时利用validators关键字来钦定附加的验证器列表。验证器从wtforms.validators模块中程导弹入,常用的验证器,如下表:

威尼斯人线上娱乐 7

威尼斯人线上娱乐 8

在实例化验证类时,message参数用来传播自定义错误音讯,纵然有设置则选择内置的英文错误新闻

validators参数接收二个可调用对象组成的列表。内置的验证器通过兑现了__call__()方法的类表示,所以大家须求在验证器后增多括号。

在name和password字段里,大家都以用了DataRequired验证器,用来评释输入的数据是还是不是管用。别的,password字段里还加多了一个Length验证器,用来证实输入的数目长度是还是不是在加以的范围内。验证器的第2个参数壹般为不当提醒消息,大家能够使用message关键字传递参数,通过传播自定义错误消息来覆盖内置音信,比如:

name = StringField(‘Your Name’,
validators=[DataRequired(message=u’名字不能够为空’)])

当使用Flask-WTF定义表单时,我们依旧采纳WTForms提供的字段类和验证器,创设的主意也完全同样,只可是表单类要承接Flask-WTF提供的FlaskForm类。FlaskForm类承袭自Form类,举行了有的安装,并附加了写协理方法,以便与Flask集成。

我们创造八个forms.py文件(form/forms.py),用来存款和储蓄各样表单类。

上面例子是继承FlaskForm类的LoginForm表单:

from flask_wtf import FlaskFormfrom wtforms import StringField, PasswordField, BooleanField, SubmitFieldfrom wtforms.validators import DataRequired, Lengthclass LoginForm(FlaskForm):    username = StringField('Username', validators=[DataRequired    password = PasswordField('Password', validators=[DataRequired(), Length(8, 128)])    remember = BooleanField('Remember me')    submit = SubmitField('Log in')

配置键WTF_CSRF_ENABLED用来安装是不是张开CS宝马X三F爱慕,默以为True。Flask-WTF会自动在实例化表单时增加三个富含CS中华VF令牌值的隐藏字段,字段名叫csrf_token。

  

from flask_migrate import Migrate

输出HTML代码

以大家运用WTForms创造的LoginForm为例,实例化表单类,然后将实例属性转变到字符串或直接调用就可以收获表单字段对应的HTML代码(必要在虚拟环境激活上下文):

>>> form = LoginForm()

>>> form.username()

Flask中的表单达成页面注册,从多少个实例学习。u'<input name=”username” required type=”text” value=””>’

>>> form.submit()

u'<input name=”submit” type=”submit” value=”Log in”>’

>>> form.password()

u'<input name=”password” required type=”password” value=””>’

>>> form.remember()

u'<input name=”remember” type=”checkbox” value=”y”>’

字段的<label>成分的HTML代码则足以由此”form.字段名.label”的样式获得:

>>> form.username.label()

u'<label for=”username”>Username</label>’

>>> form.submit.label()

u'<label for=”submit”>Log in</label>’

在虚拟环境下,须求激活程序上下文(app_context)和请求上下文(request_context),能力实例化运营方面包车型地铁次第,激活上下文能够由此以下方法:

壹、 pipenv shell 激活虚拟环境

贰、到appForm.py所在目录:D:\flask\FLASK_PRACTICE

三、运维python进入python命令行格局

四、激活程序上下文:

>>> from appForm import app

>>> from flask import current_app

>>> app_ctx=app.app_context()

>>> app_ctx.push()

>>> current_app.name

‘appForm’

5、激活请求上下文:

>>> from appForm import app

>>> from flask import request

>>> app_re=app.test_request_context

>>> app_re.push()

>>> request.method

‘GET’

六、把LoginForm()类定义运转一下

>>> from flask_wtf import FlaskForm

>>> from wtforms import StringField, PasswordField,
BooleanField, SubmitField

>>> from wtforms.validators import DataRequired, Length

>>>

>>> class LoginForm(FlaskForm):

… username = StringField(‘Username’, validators=[DataRequired

… password = PasswordField(‘Password’, validators=[DataRequired(),
Length

… remember = BooleanField(‘Remember me’)

… submit = SubmitField

从此就足以实例化那几个类,做任何的政工了

  一.成立表单类.

def create_app(config):
    app = Flask(__name__)
    app.config.from_object(configs.get(config))
    db.init_app(app)
    Migrate(app, db)
    register_blueprints(app)
    return app

增添额外的性情

在创制HTML表单时,大家日常会供给选取HTML<input>成分的别样质量来对字段进行设置。比如class属性设置相应的CSS类为字段增加样式;增添placeholder属性设置占位文本。默许情状下WForms输出的字段HTML代码只会包罗id和name属性,属性值均为表单类中对应的字段属性名称。要是要增加额外的属性,日常有二种艺术。

使用render_kw属性

譬如说下边为username字段使用render_kw设置了placeholder HTML属性:

username = StringField(‘Username’ render_kw={‘placeholder’: ‘Your
Username’})

本条字段被调用后输出的HTML代码是:

<input type=”text” id=”username” name=”username” placeholder=”Your
Username”>

调用字段时传出

在调用字段属性时,通过增多括号利用主要字参数的样式也得以流传字段额外的HTML属性:

>>> form.username()

u'<input name=”username” required type=”text” value=””>’

>>> form.username(style=’width:200px;’,class_=’bar’)

u'<input name=”username” required style=”width:200px;” type=”text”
value=””>’

class是pyhton的保留字,我们运用class_来代表class,渲染后的<input>会博得正确的classl属性,在模板中调用时则足以一贯运用class。

通过上面的点子也得以修改id和name属性,但表单被交给后,WTForms须要通过name属性来赢得相应的多少,所以不能够改改name属性值。

    首先选择flask-wtf你不可能不确认保证您的环境中壹度安装wtf,假若你是python三的条件,我们得以经过 pip3 install Flask-WTF 来进展安装.

布署后达成运转

在模板中渲染表单

为了可以在模板中渲染表单,我们须要把表单类实例传入模板。首先在视图函数里实例化表单类LoginForm,然后再render_template()函数中动用重要脑子参数form将表单实例传入模板,例如:form/app.py

#传入表单类实例from forms import LoginForm@app.route('/basic')def basic():    form=LoginForm()    return render_template('login.html',form=form)

在模板中,须求调用表单类的特性就可以获取字段对应的HTML代码,假诺急需传入参数,也得以增加括号,如form/templates/basic.html:在模板中渲染表单

<form method="post">    {{ form.csrf_token }}<!-- 渲染CSRF令牌隐藏字段 -->    {{ form.username.label }}{{ form.username }}<br>    {{ form.password.label }}{{ form.password }}<br>    {{ form.remember }}{{ form.remember.label }}<br>    {{ form.submit }}<br></form>

在上头的代码中,除了渲染种种字段的竹签和字段自身,还调用了form.csrf_token属性渲染Flask-WTF为表单类活动创制的CSLX570F令牌字段。form.csrf_token字段包涵了自动生成的CSXC60F令牌值,在付给表单后会自动被认证,为了保险表单通过验证,大家必须在表单中手动渲染这么些字段。

Flask_WTF为表单类实例提供了一个form.hidden_tag()方法,这些方法会依次渲染表单中存有的隐藏字段。因为csrf_token字段也是隐藏字段,全体当以此法子被调用时也会渲染csrf_token字段。

渲染后收获的骨子里HTML代码如下:

<form method="post">    <input id="csrf_token" name="csrf_token" type="hidden" value="ImE1M2QxNDEyNDA2YTE5NGI3NmU1NGY1M2U2ZDkxNjQ2NDc5NTI3ZjYi.XH0xaQ.RvNFnjwMfAiUyiv58pU2xJkQ42g"><!-- 渲染CSRF令牌隐藏字段 -->    <label for="username">Username</label><input id="username" name="username" required type="text" value=""><br>    <label for="password">Password</label><input id="password" name="password" required type="password" value=""><br>    <input id="remember" name="remember" type="checkbox" value="y"><label for="remember">Remember me</label><br>    <input id="submit" name="submit" type="submit" value="Log in"><br></form>

运营该程序,访问127.0.0.1:五千/basic能够见到渲染后的表单,页面中的表单和我们在上边运用HTML编写的表单同样。

威尼斯人线上娱乐 9

 

flask db

    安装好了后头我们来开始展览导入:    

先是次选用要求实行开端化

      from flask_wtf import Form
      from wtforms import StringField, SubmitField, PasswordField, ValidationError
      from wtforms.validators import DataRequired, EqualTo, Length
      from models import USER

flask db init

    

运行:

    让我们一步步来明白!!

威尼斯人线上娱乐,flask db migrate -m ‘init database’

    

这么些命令会在version目录下生成一个数据库晋级脚本,-m后是此番交付的相关音讯,检查无误后得以运营

    第一行代码大家从 falsk-wtf 中程导弹入了 Form 类,将来大家创立的具备表单类都要一而再自这些类.

flask db upgrade

    第二行代码大家从 wtforms 
中程导弹入了 StringField,SubmitField,PasswordField,ValidationError ,那么那几个东西是用来干什么的吧?作者深信不疑只要某个过1些HTML的人应有都认得HTML表单中<input>成分的type=”text”,type=”submit”,type=”password”那类属性吧.原理是同一的.

将荣升写入数据库

    第一行代码大家又从 wtforms.validators 中程导弹入了 DataRequired,EqualTo,Length ,在那之中 DataRequired用来证实表单数据不可能为空, EqualTo 常用来相比较三个代码是否特出, Length 用来界定字符长度.

使用flask-wtf

    第5行代码是导入数据库模型的USEBMWX三类,用来查询数据库中是或不是现已注册了手提式有线电话机号.要是已经登记了,再用第3行代码的 ValidationError 来抛出警告.

wtforms是python实现的3个库,它能在python和HTML
form之间创立壹种光彩夺目关系,类似O索罗德M,方便创造表单和在模板中渲染表单。flask-wtf则是对wtforms的包裹,方便在flask中采纳wtforms,并在wtforms的根基上加多了crsf
token的变迁和验证机制。使用flask-wtf,供给定义的表单中承袭flask-wtf提供的FlaskForm基类,并为每个表单输入贰个扬言字段。

    

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField,
BooleanField
from wtforms.validators import Length, Email, EqualTo, Required

    实例如下:      

class RegisterForm(FlaskForm):
    username = StringField(‘用户名’, validators=[Required(), Length(3,
24)])
    email = StringField(‘邮箱’, validators=[Required(), Email()])
    password = PasswordField(‘密码’, validators=[Required(), Length(6,
24)])
    repeat_password = PasswordField(‘重复密码’,
validators=[Required(), EqualTo(‘password’)])
    submit = SubmitField(‘提交’)

    class Regist(Form):
        phone = StringField("请输入手机号", validators=[DataRequired(), Length(min=11, max=11, message="手机号码是11位数")])
        name = StringField("请输入用户名", validators=[DataRequired()])
        password = PasswordField("请输入密码", validators=[DataRequired()])
        password1 = PasswordField("请重复密码", validators=[DataRequired(), EqualTo("password", "密码必须一样")])
        submit = SubmitField("立即提交")

        def validate_phone(self, field):
            if USER.query.filter_by(phone=field.data).first():
                raise ValidationError("傻子,你的手机号码被注册了!!")

class LoginForm(FlaskForm):
    email = StringField(‘邮箱’, validators=[Required(), Email()])
    password = PasswordField(‘密码’, validators=[Required(), Length(6,
24)])
    remember_me = BooleanField(‘记住我’)
    submit = SubmitField(‘提交’)

     如此二个注册表单类就确立成功了!!

要在Form类为各类输入框声惠氏(WYETH)个相应的Field,Field一般提供四个参数,第三个是输入框html中的label,第三个壹般是validators(验证器)。validators是多少个列表,能够放入多少个验证器,表单提交时,wtforms会选取列表里的验证器对交付的数量进行验证,验证失利的数量,wtforms会将停业音讯写入Field下的errors列表下。

  

在注册路由的python文件上将相应的form传递到模板中

 二.视图函数中编辑逻辑

from **.forms import LoginForm, RegisterForm

    本人先直接把代码列出来:     

@front.route(‘/login’)
def login():
    form = LoginForm()
    return render_template(‘login.html’, form=form)

      # 注册界面
      @app.route("/regist/", methods=["GET", "POST"])
      def regist():
          form = Regist()
          if form.validate_on_submit():
              telephone = form.phone.data
              username = form.name.data
              password = form.password.data
              if form.validate_phone():
                  user = USER(phone=telephone, name=username, password=password)
                  db.session.add(user)
                  db.session.commit()
                  return redirect(url_for("login"))
          else:
              return render_template("regist.html", form=form)

下一场在login.html中举行表单的渲染。

       

{% extends “base.html” %}

      我们先用  form=Regist() 实例化二个表单类的对象,前边紧跟着三个条件语句, validate_on_submit 意思是推断表单内的数量是还是不是为空,最大尺寸是或不是….等先前设置的限量条件以及决断表单内容是或不是付诸过了.假设是,那么就表示我们付出了表单数据,并且开始展览末端的操作,假若不是.就代表大家只是展开了这一个注册页面,用 return
render_template(“regist.html”, form=form) 
渲染模板,并且把实例化的目的form作为参数字传送递到模板中.

{% block title %}
Login
{% endblock %}

      

{% block body %}
  <h2>登录</h2>
  <!– 要在 form 里钦赐 POST 方法和点击提交后供给请求的 url –>
  <form method=”POST” action=”{{ url_for(‘front.login’) }}”>
    <!– flask-wtf 帮大家在表单类中增添了
csrf_token,大家如若轻易的渲染就足以了, 渲染后会在 hmtl
页素不相识成多个隐藏域,里面是 csrf_token 值 –>
    {{ form.csrf_token }}

      大家跟着继续提交表单后的代码精通 telephone = form.phone.data    username = form.name.data   password =
form.password.data  那3行代码是收获用户填写的手提式有线电话机号,用户名,密码那些数据.

    <!– 使用 Bootstrap 的表单样式渲染每一种表单项 –>
    <div class=”form-group”>
      <!– 首先渲染 田野先生 label –>
      <!– 接着渲染 田野(field),StringField 渲染后会生成一个 <input>
标签,田野同志 里面可以流传 html 的价签属性,这一个属性会渲染到变化的 html
标签中 –>
      {{ form.email.label }} {{ form.email(class=’form-control’) }}
    </div>

      

    <div class=”form-group”>
      {{ form.password.label }} {{ form.password(class=’form-control’)
}}
    </div>

      获取之后,大家在进展剖断.调用注册表单类的validate_phone()函数,假如忘记内容能够再看看下边.若是为true,就表示着这几个手提式有线话机号未有被登记,继续开展末端的把用户填写的数据存进数据库的操作.

    <!– BooleanField 的渲染某个分外,使用了 Bootstrap 的 checkbox
类–>
    <div class=”checkbox”>
      <label>
        {{ form.remember_me() }}
<!– 注意那里获得的是 label 的 text
属性,也正是我们在表单中定义的”记住作者”这么些字符串–>
{{ form.remember_me.label.text }}
      </label>
    </div>
    <!– 渲染提交按键,传入 Bootstrap 的开关类–>
    {{ form.submit(class=”btn btn-primary”) }}
  </form>
{% endblock %}

        user = USER(phone=telephone, name=username, password=password)

由于在同一个网址中的表单结构和剧情是形似的,因而得以应用macro对重复的动作举行包装,使用的是jinjia2的语法。

      

{% macro macro_name(arg1, arg2, …)%}
….
{% endmacro %}

      那段代码的情趣是USE福特Explorer用户表中有phone,name,password的属性.大家把获得的用户数量telephone,username,password赋值给它,在经过 db.session.add(user)
db.session.commit() 这两行代码提交到数据库中.

macro平常存放在macro.html中,使用该文件的有些macro时,使用Import导入就能够

      

{% from “macro.html” import macro_name %}

      数据库中是用到了flask-sqlalchemy,那里不加强际疏解,未来有空子再讲.我把代码贴出来:         

行使{{}}格式语法实行调用

lass USER(db.Model):
    __tablename__="user"
                 id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    phone=db.Column(db.String(11),nullable=False)
    name=db.Column(db.String(50),nullable=False)
    password=db.Column(db.String(100),nullable=False)        

{{ macro_name(arg1, arg2 )}}

   

下边是三个render_form的宏用于渲染表单

 三.在模板中选拔

<!– 须求传入3个参数:要渲染的 form 和点击提交请求的 url –>
{% macro render_form(form, url) %}
<form method=”POST” action=”{{ url }}”>
  <!– 将 csrf_token 渲染在表单初叶的地点 –>
  {{ form.csrf_token }}
  <!– 迭代每个表单 田野 –>
  {% for field in form %}
    <!– 如果是 csrf_token 就不再渲染了 –>
    {% if field.type == ‘CSRFTokenField’ %}
    {{ ” }}
    <!– SubmitField 单独特殊处理 –>
    {% elif field.type == ‘SubmitField’ %}
    {{ form.submit(class=’btn btn-primary’, type=’submit’) }}
    <!– BooleanField 单独特殊处理 –>
    {% elif field.type == ‘BooleanField’ %}
    <div class=”checkbox”>
      <label>{{ field() }} {{ field.label.text }}</label>
    </div>
    {% else %}
    <div class=”form-group”>
      {{ field.label }} {{ field(class=’form-control’) }}
    </div>
    {% endif %}
  {% endfor %}
</form>
{% endmacro %}

      其三步也是终极一步.假诺你的品种利用了flask-bootstrap的话,能够经过:         

将login.html使用render_form渲染:

        {% import "bootstrap/wtf.html" as wtf %}

        <form action="" method="post">
              {% block page_content %}
                    {{ wtf.quick_form(form) }}
              {% endblock %}
          </form>

{% extends “base.html” %}
{% from “macros.html” import render_form %}

      

{% block title %}Login{% endblock %}

      wtf.quick_form(form)直接生成表单,是还是不是很有益?当然未有样式,若是你要加上样式的话能够那样:        

{% block body %}
<div class=”form”>
  <h2>登录</h2>
  {{ render_form(form, url_for(‘front.login’)) }}
</div>
{% endblock %}

          <form method="POST">
            {{ form.hidden_tag() }}
            {{ form.name.label }} {{ form.name(id='my-text-field') }}
            {{ form.submit() }}
            </form>

然后在RegisterForm下完结基于表单提交的多寡创制用户

      

from simpledu.models import db, User

      好了,到那边就甘休了.假若你把那几个全弄懂了,你还足以平昔阅读它的华语文档. 

class RegisterForm(FlaskForm):
    …

                                                              待续……….

    def create_user(self):
        user = User()
        user.username = self.username.data
        user.email = self.email.data
        user.password=self.password.data
        db.session.add(user)
        db.session.commit()
        return user

在front.py中落到实处挂号成效的路由处理函数:

from flask import flash
from flask import redirect,url_for

@front.route(‘/register’, methods=[‘GET’, ‘POST’])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        form.create_user()
        flash(‘注册成功,请登6!’, ‘success’)
        return redirect(url_for(‘.login’))
    return render_template(‘register.html’, form=form)

validate_on_submit是flask-wtf提供的FlaskForm中封装的3个艺术,重临值是2个布尔值。借使表单提交了还要大家在相应的form中评释的表单数据验证器对用户提交的表单数据证实通过,那么该办法重返True,否则重回False。

地点的代码中,表单提交并且数据申明成功后,条用我们以前完成的办法创立用户。有时候,网址必要对用户的有的操作给出成功、退步、警告等壹多种反馈,大家调用了flash函数,该函数的效益是向模板页面发送一音讯,它承受多少个参数,信息的始末和分类,最终重定向到登入页面。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

正文永恒更新链接地址

威尼斯人线上娱乐 10


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图