目次
バックエンド WTF エンコーディング
フォームページ
メッセージをユーザーに通知するページが必要な場合は、Flash メッセージを使用できます。コードも非常に単純です:
ホームページ ウェブフロントエンド htmlチュートリアル Flask 学習メモ - Bootstrap フレームワークでの Web フォーム WTF の使用_html/css_WEB-ITnose

Flask 学習メモ - Bootstrap フレームワークでの Web フォーム WTF の使用_html/css_WEB-ITnose

Jun 24, 2016 am 11:25 AM

フォームの処理は一般に面倒で退屈です。フォームを簡単に使用したい場合は、WTF を Bootstrap に統合して、スタイルの問題を自動的に解決します。 . この記事はこれらを説明するためのものです。

まず第一に、WTF を使用するときは、プログラムで SECRET_KEY を設定する必要があることに注意してください。そうしないと、「csrf を使用するには Secret_key を提供する必要があります」エラーが発生します。

app.config['SECRET_KEY'] = 'xxxx'
ログイン後にコピー

Flask-Bootstrap については前の記事で説明したので繰り返しません。

バックエンド WTF エンコーディング

まず例を見てみましょう:

from flask.ext.wtf import Formfrom wtforms import StringField, SubmitField, SelectFieldfrom wtforms.validators import DataRequiredclass BookForm(Form):    name = StringField('姓名', validators=[DataRequired()])    phone = StringField('电话', validators=[DataRequired()])    photoset = SelectField('套系', choices=[('SET1', '1'), ('SET2', '2')])    submit = SubmitField("预定")    @app.route('/book/', methods=['GET', 'POST'])def book_photo():    name = None    phone = None    photoset = None    booker = BookForm()    if booker.validate_on_submit():        name = booker.name.data        phone = booker.phone.data        photoset = booker.photoset.data    return render_template('book_photo.html', form=booker, name=name, phone=phone, photoset=photoset)
ログイン後にコピー

BookForm は、2 つのテキスト ボックスとドロップダウン選択ボックスを含む、私たち自身が定義した Form オブジェクトです。

class BookForm(Form):    name = StringField('姓名', validators=[DataRequired()])    phone = StringField('电话', validators=[DataRequired()])    photoset = SelectField('套系', choices=[('SET1', '1'), ('SET2', '2')])    submit = SubmitField("预定")
ログイン後にコピー

validators は入力チェック用のコントローラーであり、ここで使用するのは文字長や入力タイプなどのコントローラーも多数ありますが、これらは使用しないでください。そうしないとエラーが報告されますので、この場所はしばらく使用しません(笑)。

book_photo() は /book/ の処理関数であり、テキスト ボックスをデフォルトで空に初期化し、render_template 関数でページとフォーム オブジェクトを指定します。

if booker.validate_on_submit():        name = booker.name.data        phone = booker.phone.data        photoset = booker.photoset.data
ログイン後にコピー

この処理はフォーム送信後にパラメータ値を受け取る処理ロジックであると同時に、

return render_template('book_photo.html', form=booker, name=name, phone=phone, photoset=photoset)
ログイン後にコピー

を使用して名前、電話番号、写真セットの値を book_photo.html ページに返します。

ページのコードを見てみましょう

フォームページ

{% extends "base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block page_content %}    <div class="page-header">        数据:        <p>        {% if name %}            {{ name }}        {% endif %}        <br />        {% if phone %}            {{ phone }}        {% endif %}        <br />        {% if photoset %}            {{ photoset }}        {% endif %}        </p>    </div>    {{ wtf.quick_form(form) }}{% endblock %}
ログイン後にコピー

bootstrap/wtf.html の基本テンプレートを使用しているため、非常に簡単です。これは bootstrap とうまく組み合わせられています。

重要なポイントは次のとおりです:

{{ wtf.quick_form(form) }}
ログイン後にコピー

wtf.quick_form 関数を使用してフォームを自動的に生成しました。これは非常に優れていますね。

    <div class="page-header">        数据:        <p>        {% if name %}            {{ name }}        {% endif %}        <br />        {% if phone %}            {{ phone }}        {% endif %}        <br />        {% if photoset %}            {{ photoset }}        {% endif %}        </p>    </div>
ログイン後にコピー

このセクションはフォーム送信後の送信データの表示についてなので、フォームと送信後のデータを 1 ページに表示できます。

結果を表示

かなり良いでしょう?

高度なリダイレクト セッション

フォームを送信した後の最後のリクエストは POST なので、ページを更新するとフォームが再送信されます。この問題はセッションをリダイレクトすることで解決できます (このトリックは「Post/」と呼ばれます)。リダイレクト/取得モード」)、リダイレクト セッションを通じてカスタマイズされたジャンプなどのより柔軟な制御を実現できます。

セッションをリダイレクトするには、セッションメカニズムを使用する必要があります。コードは次のとおりです:

from flask import Flask, render_template, send_from_directory, session, redirect, url_for@app.route('/book/', methods=['GET', 'POST'])def book_photo():    name = None    phone = None    photoset = None    booker = BookForm()    if booker.validate_on_submit():        session['name'] = booker.name.data        session['phone'] = booker.phone.data        session['photoset'] = booker.photoset.data        return redirect(url_for('book_photo'))    return render_template('book_photo.html', form=booker, name=session.get('name'), phone=session.get('phone'), photoset=session.get('photoset'))
ログイン後にコピー

Advanced-Flash メッセージ

メッセージをユーザーに通知するページが必要な場合は、Flash メッセージを使用できます。コードも非常に単純です:

from flask import Flask, render_template, send_from_directory, session, redirect, url_for, flash@app.route('/book/', methods=['GET', 'POST'])def book_photo():    name = None    phone = None    photoset = None    booker = BookForm()    if booker.validate_on_submit():        old_name = session.get('name')        if old_name is not None and old_name != booker.name.data:            flash('您的提交发生变化')        session['name'] = booker.name.data        session['phone'] = booker.phone.data        session['photoset'] = booker.photoset.data        return redirect(url_for('book_photo'))    return render_template('book_photo.html', form=booker, name=session.get('name'), phone=session.get('phone'), photoset=session.get('photoset'))
ログイン後にコピー

フィールド値の変更、プロンプト情報の設定

        if old_name is not None and old_name != booker.name.data:            flash('您的提交发生变化')
ログイン後にコピー

ページ上での処理も必要です:

{% extends "base.html" %}{% import "bootstrap/wtf.html" as wtf %}{% block page_content %}    <div class="page-header">        数据:        <p>        {% if name %}            {{ name }}        {% endif %}        <br />        {% if phone %}            {{ phone }}        {% endif %}        <br />        {% if photoset %}            {{ photoset }}        {% endif %}        </p>    </div>    {% for message in get_flashed_messages() %}    
{{ message }} {% endfor %}
{{ wtf.quick_form(form) }}{% endblock %}
ログイン後にコピー

for/endfor を通じて制御され、ブートストラップ スタイルも使用されます

{% for message in get_flashed_messages() %}<div class="alert alert-warning">    <button type="button" class="close" data-dismiss="alert">&times;</button>    {{ message }}{% endfor %}
ログイン後にコピー

効果は次のとおりです:

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

&lt; Progress&gt;の目的は何ですか 要素? &lt; Progress&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:34 PM

この記事では、HTML&lt; Progress&gt;について説明します。要素、その目的、スタイリング、および&lt; meter&gt;との違い要素。主な焦点は、&lt; Progress&gt;を使用することです。タスクの完了と&lt; Meter&gt; statiの場合

HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? HTML5のクロスブラウザー互換性のベストプラクティスは何ですか? Mar 17, 2025 pm 12:20 PM

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

&lt; datalist&gt;の目的は何ですか 要素? &lt; datalist&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:33 PM

この記事では、HTML&lt; Datalist&GT;について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? HTML5フォーム検証属性を使用してユーザー入力を検証するにはどうすればよいですか? Mar 17, 2025 pm 12:27 PM

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

&lt; meter&gt;の目的は何ですか 要素? &lt; meter&gt;の目的は何ですか 要素? Mar 21, 2025 pm 12:35 PM

この記事では、html&lt; meter&gt;について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化&lt; Meter&gt; &lt; Progress&gt;およびex

ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? ビューポートメタタグとは何ですか?レスポンシブデザインにとってなぜそれが重要なのですか? Mar 20, 2025 pm 05:56 PM

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

&lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? &lt; iframe&gt;の目的は何ですか タグ?使用する際のセキュリティ上の考慮事項は何ですか? Mar 20, 2025 pm 06:05 PM

この記事では、&lt; iframe&gt;外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。

HTMLは初心者のために簡単に学ぶことができますか? HTMLは初心者のために簡単に学ぶことができますか? Apr 07, 2025 am 12:11 AM

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用​​できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

See all articles