<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 導航 - [索引](# "總目錄") - [下一頁](# "模板繼承") | - [上一頁](# "視圖裝飾器") | - [Flask 0.10.1 文檔](#) ? - [Flask 代碼模式](#) ? # 使用 WTForms 進行表單驗證 如果您不得不跟瀏覽器提交的表單數據打交道,視圖函數里的代碼將會很快變得難以閱讀。有不少的代碼庫被開發用來簡化這個過程的操作。其中一個就是 [WTForms](http://wtforms.simplecodes.com/) [http://wtforms.simplecodes.com/] ,這也是我們今天主要討論的。如果您發現您自己陷入處理很多表單的境地,那您也許應該嘗試一下他。 要使用 WTForms ,您需要先將您的表單定義為類。我建議您將應用分割為多個模塊([*大型應用*](#)) ,這樣的話您僅需為表單添加一個獨立的模塊。 挖掘 WTForms 的最大潛力 [Flask-WTF](http://packages.python.org/Flask-WTF/) [http://packages.python.org/Flask-WTF/] 擴展在這個模式的基礎上擴展并添加了一些隨手即得的精巧的幫助函數,這些函數將會使在 Flask 里使用表單更加有趣,您可以通過[PyPI](http://pypi.python.org/pypi/Flask-WTF) [http://pypi.python.org/pypi/Flask-WTF] 獲取它。 ### 表單 以下是一個典型的注冊頁面的例子: ~~~ from wtforms import Form, BooleanField, TextField, PasswordField, validators class RegistrationForm(Form): username = TextField('Username', [validators.Length(min=4, max=25)]) email = TextField('Email Address', [validators.Length(min=6, max=35)]) password = PasswordField('New Password', [ validators.Required(), validators.EqualTo('confirm', message='Passwords must match') ]) confirm = PasswordField('Repeat Password') accept_tos = BooleanField('I accept the TOS', [validators.Required()]) ~~~ ### 在視圖里 在視圖函數中,表單的使用是像下面這個樣子的: ~~~ @app.route('/register', methods=['GET', 'POST']) def register(): form = RegistrationForm(request.form) if request.method == 'POST' and form.validate(): user = User(form.username.data, form.email.data, form.password.data) db_session.add(user) flash('Thanks for registering') return redirect(url_for('login')) return render_template('register.html', form=form) ~~~ 注意到我們視圖中使用了 SQLAlchemy (參考 [*在 Flask 中使用 SQLAlchemy*](#) )。但是這并非必要的,請按照您的需要修正代碼。 備忘表: 1. 如果數據是以 POST 方式提交的,那么基于請求的 form屬性的值創建表單。反過來,如果是使用 GET 提交的,就從args 屬性創建。 1. 驗證表單數據,調用 validate() 方法。如果數據驗證通過,此方法將會返回 True ,否則返回 False 。 1. 訪問表單的單個值,使用 form.<NAME>.data 。 ### 在模板中使用表單 在模板這邊,如果您將表單傳遞給模板,您可以很容易地渲染他們。參看如下代碼,您就會發現這有多么簡單了。WTForms 已經為我們完成了一半的表單生成工作。更棒的是,我們可以編寫一個宏來渲染表單的字段,讓這個字段包含一個標簽,如果存在驗證錯誤,則列出列表來。 以下是一個使用這種宏的 _formhelpers.html 模板的例子: ~~~ {% macro render_field(field) %} <dt>{{ field.label }} <dd>{{ field(**kwargs)|safe }} {% if field.errors %} <ul class=errors> {% for error in field.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} </dd> {% endmacro %} ~~~ 這些宏接受一對鍵值對,WTForms 的字段函數接收這個宏然后為我們渲染他們。鍵值對參數將會被轉化為 HTML 屬性,所以在這個例子里,您可以調用render_field(form.username,class="username") 來將一個類添加到這個輸入框元素中。請注意 WTForms 返回標準 Python unicode 字符串,所以我們使用 |safe 告訴 Jinjan2 這些數據已經是經過 HTML 過濾處理的了。 以下是 register.html 模板,它對應于上面我們使用過的函數,同時也利用了 _formhelpers.html 模板: ~~~ {% from "_formhelpers.html" import render_field %} <form method=post action="/register"> <dl> {{ render_field(form.username) }} {{ render_field(form.email) }} {{ render_field(form.password) }} {{ render_field(form.confirm) }} {{ render_field(form.accept_tos) }} </dl> <p><input type=submit value=Register> </form> ~~~ 關于 WTForms 的更多信息,請訪問 [WTForms 網站](http://wtforms.simplecodes.com/) [http://wtforms.simplecodes.com/] 。 ? 版權所有 2013, Armin Ronacher.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看