亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、原生表單

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="請輸入用戶名" maxlength="12"></p>
    <p>密碼: <input type="password" name="userpass" placeholder="請輸入密碼..."></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 '提交過來了'

將倆個路由地址合并為同一個

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

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

作用: 是一個用于表單處理的擴(kuò)展庫 提供表單的校驗 csrf的功能

pip install flask-wtf

使用

(1) 字段類型

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

(2) 驗證器

驗證器 說明
DataRequired 必填
Length 長度 min max
IPAddress IP地址
Email 郵箱
URL 地址
Regexp 正則匹配
EqualTo 驗證倆個字段值的正確性
NumberRange 輸入值的范圍 min max

實例

在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)入驗證器
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='用戶名的長度為6~12為'),DataRequired(message='用戶名不能為空!!!')])
  userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='用戶名的長度為6~12為'),DataRequired(message='密碼不能為空!!!')])
  submit = SubmitField('登錄')

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

@app.route('/form/',methods=['GET','POST'])
def form():
  #將表單類實例化
  form = Login()
  if request.method == 'POST':
    #驗證是否存在正確的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)入驗證器
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='用戶名的長度為6~12為'),DataRequired(message='用戶名不能為空!!!')])
  userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='用戶名的長度為6~12為'),DataRequired(message='密碼不能為空!!!')])
  submit = SubmitField('登錄')

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

@app.route('/form/',methods=['GET','POST'])
def form():
  #將表單類實例化
  form = Login()
  if request.method == 'POST':
    #驗證是否存在正確的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='請輸入用戶名') }}
      {% 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 %}

自定義表單驗證器

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

注意:

validate_ 驗證的字段名稱 為固定格式

所有字段和驗證器方法的使用

class Login(FlaskForm):
  username = StringField('用戶名',validators=[Length(min=6,max=12,message='用戶名的長度為6~12為'),DataRequired(message='用戶名不能為空!!!')])
  userpass = PasswordField('密碼',validators=[Length(min=6,max=12,message='用戶名的長度為6~12為'),DataRequired(message='密碼不能為空!!!'),EqualTo('confirm',message='倆次密碼輸入不一致')])
  confirm = PasswordField('確認(rèn)密碼')
  info = TextAreaField('個人簡介',validators=[Length(min=6,max=20,message='內(nèi)容為6-20個長度'),DataRequired(message='內(nèi)容不能為空')],render_kw={"style":"resize:none;",'placeholder':"請輸入你此刻的感謝..."})
  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('請仔細(xì)閱讀以上條款')

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

三、flash 消息的顯示

概述: 當(dāng)用戶請求 或者有消息的顯示 通過flash,get_flashed_messages 來進(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 %}

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

相關(guān)文章

  • 利用Python如何實現(xiàn)一個小說網(wǎng)站雛形

    利用Python如何實現(xiàn)一個小說網(wǎng)站雛形

    這篇文章主要給大家介紹了關(guān)于利用Python如何實現(xiàn)一個小說網(wǎng)站雛形的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Pandas中把dataframe轉(zhuǎn)成array的方法

    Pandas中把dataframe轉(zhuǎn)成array的方法

    下面小編就為大家分享一篇Pandas中把dataframe轉(zhuǎn)成array的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python通過加號運算符操作列表的方法

    python通過加號運算符操作列表的方法

    這篇文章主要介紹了python通過加號運算符操作列表的方法,實例分析了Python使用加號運算符實現(xiàn)列表追加的方法,需要的朋友可以參考下
    2015-07-07
  • 解決PyCharm無法使用lxml庫的問題(圖解)

    解決PyCharm無法使用lxml庫的問題(圖解)

    這篇文章主要介紹了解決PyCharm無法使用lxml庫的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Anaconda3+tensorflow2.0.0+PyCharm安裝與環(huán)境搭建(圖文)

    Anaconda3+tensorflow2.0.0+PyCharm安裝與環(huán)境搭建(圖文)

    這篇文章主要介紹了Anaconda3+tensorflow2.0.0+PyCharm安裝與環(huán)境搭建(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python opencv實現(xiàn)任意角度的透視變換實例代碼

    python opencv實現(xiàn)任意角度的透視變換實例代碼

    這篇文章主要介紹了python opencv實現(xiàn)任意角度的透視變換實例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • tensorflow實現(xiàn)從.ckpt文件中讀取任意變量

    tensorflow實現(xiàn)從.ckpt文件中讀取任意變量

    這篇文章主要介紹了tensorflow實現(xiàn)從.ckpt文件中讀取任意變量,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python request設(shè)置HTTPS代理代碼解析

    Python request設(shè)置HTTPS代理代碼解析

    這篇文章主要介紹了Python request設(shè)置HTTPS代理代碼解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python中re模塊的元字符使用小結(jié)

    Python中re模塊的元字符使用小結(jié)

    元字符是正則表達(dá)式中具有特殊意義的專用字符,本文主要介紹了Python中re模塊的元字符使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 修改python plot折線圖的坐標(biāo)軸刻度方法

    修改python plot折線圖的坐標(biāo)軸刻度方法

    今天小編就為大家分享一篇修改python plot折線圖的坐標(biāo)軸刻度方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12

最新評論