最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

flask入門之表單的實(shí)現(xiàn)

 更新時(shí)間:2018年07月18日 09:47:55   作者:rottengeek  
這篇文章主要介紹了flask入門之表單的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

一、原生表單

form.html

{% extends 'common/base.html' %}
{% block title %}
  原生表單
{% endblock %}
{% block pagecontent %}
{#  <form action="{{ url_for('check') }}" method="post">#}
  <form action="{{ url_for('form') }}" method="post">
    <p>用戶名: <input type="text" name="username" placeholder="請(qǐng)輸入用戶名" maxlength="12"></p>
    <p>密碼: <input type="password" name="userpass" placeholder="請(qǐng)輸入密碼..."></p>
    <p><input type="submit" value="提交"></p>
  </form>
{% endblock %}

manage.py

@app.route('/form/')
def form():
  return render_template('form1.html')

#接收表單的數(shù)據(jù)
@app.route('/check/',methods=['POST'])
def check():
  print(request.form)
  return '提交過(guò)來(lái)了'

將倆個(gè)路由地址合并為同一個(gè)

@app.route('/form/',methods=['GET','POST'])
def form():
  if request.method == 'POST':
    print(request.form)
  return render_template('form1.html')

二、使用flask-wtf表單擴(kuò)展庫(kù)

作用: 是一個(gè)用于表單處理的擴(kuò)展庫(kù) 提供表單的校驗(yàn) csrf的功能

pip install flask-wtf

使用

(1) 字段類型

字段名稱 字段類型
StringField 普通文本字段
PasswordField 密碼框
SubmitField 提交按鈕
TextAreaField 多行文本域
HiddenField 隱藏域
DateField 日期
DateTimeField 日期時(shí)間
IntegerField 整形
FloatFIeld 浮點(diǎn)型
RadioField 單選字段
SelectField 下拉
FileField 文件上傳字段
BooleanField 布爾字段

(2) 驗(yàn)證器

驗(yàn)證器 說(shuō)明
DataRequired 必填
Length 長(zhǎng)度 min max
IPAddress IP地址
Email 郵箱
URL 地址
Regexp 正則匹配
EqualTo 驗(yàn)證倆個(gè)字段值的正確性
NumberRange 輸入值的范圍 min max

實(shí)例

在manage中

from flask import Flask,render_template,request
from flask_script import Manager
from flask_bootstrap import Bootstrap
#導(dǎo)入自定義表單類的基類
from flask_wtf import FlaskForm
#導(dǎo)入表單的字段
from wtforms import StringField,PasswordField,SubmitField
#導(dǎo)入驗(yàn)證器
from wtforms.validators import Length,DataRequired

app = Flask(__name__)
bootstrap = Bootstrap(app)
#加密種子 csrf需要使用
app.config['SECRET_KEY'] = 'abcdedff'
manager = Manager(app)

class Login(FlaskForm):
  username = StringField('用戶名',validators=[Length(min=6,max=12,message='用戶名的長(zhǎng)度為6~12為'),DataRequired(message='用戶名不能為空!!!')])
  userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='用戶名的長(zhǎng)度為6~12為'),DataRequired(message='密碼不能為空!!!')])
  submit = SubmitField('登錄')

@app.route('/')
def index():
  return render_template('index.html')

@app.route('/form/',methods=['GET','POST'])
def form():
  #將表單類實(shí)例化
  form = Login()
  if request.method == 'POST':
    #驗(yàn)證是否存在正確的csrftoken和 數(shù)據(jù)的正確性 如果都正確則為真
    if form.validate_on_submit():
      # print(request.form)
      print(form.username.data)
  return render_template('form2.html',form=form)
from flask import Flask,render_template,request
from flask_script import Manager
from flask_bootstrap import Bootstrap
#導(dǎo)入自定義表單類的基類
from flask_wtf import FlaskForm
#導(dǎo)入表單的字段
from wtforms import StringField,PasswordField,SubmitField
#導(dǎo)入驗(yàn)證器
from wtforms.validators import Length,DataRequired


app = Flask(__name__)
bootstrap = Bootstrap(app)
#加密種子 csrf需要使用
app.config['SECRET_KEY'] = 'abcdedff'
manager = Manager(app)

class Login(FlaskForm):
  username = StringField('用戶名',validators=[Length(min=6,max=12,message='用戶名的長(zhǎng)度為6~12為'),DataRequired(message='用戶名不能為空!!!')])
  userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='用戶名的長(zhǎng)度為6~12為'),DataRequired(message='密碼不能為空!!!')])
  submit = SubmitField('登錄')

@app.route('/')
def index():
  return render_template('index.html')

@app.route('/form/',methods=['GET','POST'])
def form():
  #將表單類實(shí)例化
  form = Login()
  if request.method == 'POST':
    #驗(yàn)證是否存在正確的csrftoken和 數(shù)據(jù)的正確性 如果都正確則為真
    if form.validate_on_submit():
      # print(request.form)
      print(form.username.data)
  return render_template('form2.html',form=form)

在模板中

{% extends 'common/base.html' %}
{% block title %}
  原生表單
{% endblock %}
{% block pagecontent %}
  <form action="{{ url_for('form') }}" method="post">
    <p>{{ form.csrf_token }}</p>
    <p>{{ form.username.label() }} {{ form.username(style='color:red;',class='userclass',placeholder='請(qǐng)輸入用戶名') }}
      {% if form.errors%}
      <span style="color:red;">{{ form.errors.username.0 }}</span>
      {% endif %}
    </p>
    <p>{{ form.userpass.label() }} {{ form.userpass() }}</p>
    <p>{{ form.submit() }}</p>
  </form>
{% endblock %}

使用 bootstrap渲染表單

{% import 'bootstrap/wtf.html' as wtf %}
{% block pagecontent %}
  <div class="row">
    <div class="col-md-8">圖片</div>
    <div class="col-md-4">{{ wtf.quick_form(form,action="",method="") }}
    </div>
  </div>
{% endblock %}

自定義表單驗(yàn)證器

class Login(FlaskForm):
  ...
  def validate_username(self,field):
    # print(field)
    if field.data == 'zhangsan':
    # if self.username.data == 'zhangsan':
      raise ValidationError('該用戶已存在')

注意:

validate_ 驗(yàn)證的字段名稱 為固定格式

所有字段和驗(yàn)證器方法的使用

class Login(FlaskForm):
  username = StringField('用戶名',validators=[Length(min=6,max=12,message='用戶名的長(zhǎng)度為6~12為'),DataRequired(message='用戶名不能為空!!!')])
  userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='用戶名的長(zhǎng)度為6~12為'),DataRequired(message='密碼不能為空!!!'),EqualTo('confirm',message='倆次密碼輸入不一致')])
  confirm = PasswordField('確認(rèn)密碼')
  info = TextAreaField('個(gè)人簡(jiǎn)介',validators=[Length(min=6,max=20,message='內(nèi)容為6-20個(gè)長(zhǎng)度'),DataRequired(message='內(nèi)容不能為空')],render_kw={"style":"resize:none;",'placeholder':"請(qǐng)輸入你此刻的感謝..."})
  hidde = HiddenField()
  birth = DateField('出生日期')
  birth = DateTimeField('出生日期')
  age = IntegerField('年齡',validators=[NumberRange(min=6,max=99,message='年齡為6~99歲')])
  money = FloatField()

  sex = RadioField(choices=[('w','女'),('m','男')])
  address = SelectField(choices=[('1001','北京'),('1002','上海'),('1003','天津')])

  file = FileField('文件上傳')

  argee = BooleanField('請(qǐng)仔細(xì)閱讀以上條款')

  ip = StringField('IPV4',validators=[IPAddress(message='請(qǐng)輸入正確的ip地址')])
  url = StringField('url地址',validators=[URL(message='輸入正確的url地址')])
  email = StringField('email',validators=[Email(message='請(qǐng)輸入正確的郵箱地址')])
  preg = StringField('手機(jī)號(hào)碼',validators=[Regexp('^[1][3-8][0-9]{9}$',flags=re.I,message='請(qǐng)輸入正確的手機(jī)號(hào)碼')])
  submit = SubmitField('登錄')

三、flash 消息的顯示

概述: 當(dāng)用戶請(qǐng)求 或者有消息的顯示 通過(guò)flash,get_flashed_messages 來(lái)進(jìn)行操作

導(dǎo)入

from flask import flash,get_flashed_messages

from flask import flash,get_flashed_messages

class Login(FlaskForm):
  username = StringField('用戶名',validators=[DataRequired(message='用戶名不能為空')])
  userpass = PasswordField('密碼',validators=[DataRequired(message='密碼不能為空')])
  submit = SubmitField('登錄')

@app.route('/form/',methods=['GET','POST'])
def form():
  form = Login()
  if form.validate_on_submit():
    if form.username.data == 'zhangsan' and form.userpass.data == '123456':
      flash('登錄成功')
      return redirect(url_for('index'))
    else:
      flash('當(dāng)前用戶不存在')
  return render_template('user/login.html',form=form)

使用

{% for message in get_flashed_messages() %}
  <div class="alert alert-danger" role="alert">{{ message }}</div>
{% endfor %}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

奉节县| 永胜县| 吉林省| 舟曲县| 闽清县| 克山县| 斗六市| 靖州| 孟连| 大姚县| 兴仁县| 临泽县| 同江市| 临澧县| 岳西县| 瑞金市| 济源市| 蒙阴县| 会宁县| 淮滨县| 潮州市| 出国| 金秀| 滨海县| 绥阳县| 江源县| 孟津县| 华宁县| 和平县| 扎兰屯市| 文昌市| 二连浩特市| 堆龙德庆县| 新干县| 沙河市| 黄梅县| 沂水县| 石门县| 金沙县| 莱西市| 石渠县|