ホームページ  >  記事  >  バックエンド開発  >  PythonでのFlaskアプリケーション(フォーム処理)

PythonでのFlaskアプリケーション(フォーム処理)

不言
不言転載
2018-11-15 14:42:013425ブラウズ

この記事の内容はPythonでのflaskアプリケーション(フォーム処理)に関するものですが、ある程度参考になる内容ですので、困っている方は参考にしていただければ幸いです。

1. Flask-WTF を使用する理由

リクエスト オブジェクトは、クライアントから送信されたすべてのリクエスト情報を公開します。特に、request.form は、POST リクエストによって送信されたフォーム データにアクセスできます。
Flask のリクエスト オブジェクトによって提供されるサポートは、Web フォームを処理するのに十分ですが、単調で反復的になる可能性のあるタスクがまだ多くあります。
フォーム HTML コードの生成と送信されたフォーム データの検証が 2 つの良い例です。

利点:

Flask-WTF 拡張機能により、Web フォームの処理がより快適になります。この拡張機能は、フレームワークに依存しない WTForms パッケージをラップする Flask 統合です。

2. フォーム処理とは何ですか?

Web ページでは、ユーザーと対話するためにいくつかのフォームが常に表示される必要があります。
flask は、flask がフォーム データの管理と操作を容易にするために、WTForm フォーム ライブラリを設計しました。

WTForm の最も重要な概念は次のとおりです:

1) Form クラス、開発者定義のフォームは、Form クラスまたはそのサブクラスから継承する必要があります。
Form クラスの主な機能は、それに含まれる Field クラスを通じてフォーム内のデータにすばやくアクセスできるようにすることです。

2). さまざまなフィールド クラス、つまりフィールド。一般に、各 Field クラスは入力 HTML タグに対応します。
たとえば、BooleanField など、WTForm に付属する一部の Field クラスは に対応し、
SubmitField は に対応します。等

3). バリデータークラス。このクラスは、ユーザーが入力したデータの有効性を検証するために使用されます。
たとえば、Length バリデーターは入力データの長さを検証するために使用でき、
FileAllowed はアップロードされたファイルのタイプを検証します。

さらに、csfr (クロスサイト リクエスト フォージェリ) 攻撃を防ぐために、flask では、flask-wtf を使用する前に、アプリがデフォルトで Secret_key を設定する必要があります。これを構成する最も簡単な方法は、app.config['SECRET_KEY'] = 'xxxx' を使用することです。

3. 共通フィールド クラス

PasswordField パスワード フィールド、入力を小さな黒い点に自動的に変換します。

DateField テキスト フィールド、形式要件は datetime です。日付は同じです

IntergerField テキスト フィールド、形式要件は整数です

DecimalField テキスト フィールド、形式要件は 10 進数と同じです。Decimal

FloatField テキスト フィールド、値は浮動小数点数です

BooleanField チェックボックス、値は True または Falseです

RadioField ラジオ ボタン ボックスのセット

SelectField ドロップダウン リストです。 Choices パラメータはドロップダウン オプションを決定しますが、HTML の

MultipleSelectField 複数のオプション値を含むドロップダウン リスト

Validator 検証関数

Validator は、フィールドを検証関数にバインドする検証関数です。その後、flask はフォームでデータを受信する前にデータを検証し、検証が成功するとデータを受信します。検証関数 Validator は次のとおりです。特定のバリデータには異なるパラメータが必要な場合があります。ここでは一般的に使用されるパラメータのみを示します。詳細な使用法については、wtforms/validators.py ファイルのソース コードを参照して、各バリデータ クラスに必要なパラメータを確認してください。 :

*基本的にすべてのバリデーターにはメッセージ パラメーターがあり、入力データがバリデーターの要件を満たさない場合にどのような情報が表示されるかを示します。

Email 電子メール アドレスの有効性を確認します。必要な通常のパターンは ^ です。 @(12 )$

EqualTo 2 つのフィールドを比較しますこの値は、通常、パスワードを 2 回入力するなどのシナリオで使用されます。パラメータ fieldname を記述することもできますが、これは同じ形式の別のフィールドのフィールド名を指す文字列変数であることに注意してください

IPAddress Verify IPv4アドレス、パラメータ デフォルトは ipv4=True、ipv6=False。 ipv6 を検証したい場合は、これら 2 つのパラメータを逆に設定できます。

長さ 入力文字列の長さを確認します。設定する長さの下限と上限を示すために、min と max の 2 つのパラメータを使用できます。パラメータのタイプは INT ではなく文字列であることに注意してください。 !

NumberRange 入力数値が範囲内にあるかどうかを確認するには、数値の上限と下限を示す 2 つのパラメーター min と max を使用できます。パラメーターのタイプは文字列ではなく、文字列であることに注意してください。 INT!! 次に、このバリデーターのメッセージ パラメーターに %(min)s と %( max)s の 2 つの書式設定部分を設定して、この範囲が何であるかをフロントエンドに伝えることができます。他のバリデーターにも同様のトリックがあるので、ソースコードを参照してください。

オプション 入力値がない場合、同じフィールド内の他の検証関数をスキップします。

必須 必須フィールド

Regexp 正規表現を使用して値を確認します。パラメータ regex='regexパターン' ###

URL URL を確認するには、必要な通常のパターンは ^[a-z] ://(?P3 )(?P:[0-9] )?( ?P/.*)?$

AnyOf 値がオプションの値のリストに含まれていることを確認してください。パラメータは値(オプションの値のリスト)です。特に、SelectField と組み合わせて使用​​する場合、SelectField の選択肢の項目の値を数値にできない理由がわかりません。 。そうしないと、AnyOf の value パラメーターに該当する数値があったとしても、現在のオプションが正当なオプションであると認識できません。 NoneOf にも同じトリックがあるのではないかと思います。

NoneOf 値がオプションの値のリストにないことを確認してください

#forms.py文件:用来设定规则
from flask_wtf import FlaskForm
from flask_wtf.file import FileRequired, FileAllowed
from wtforms import StringField, PasswordField, SubmitField, FileField
from wtforms.validators import DataRequired, Length


class LoginForm(FlaskForm):
    name = StringField(
        label="用户名/邮箱/手机号",
        validators=[
            # DataRequired("请输入用户名"),
            Length(3, 20, message="长度不符"),
        ]
    )
    passwd = PasswordField(
        label="密码",
        validators=[
            # DataRequired("请输入密码"),
            Length(3, 20),
        ], )

    file = FileField(
        label="简历",
        validators=[
            FileRequired(),
            FileAllowed(['pdf', 'txt'], 'pdf 能被接收')
        ]
    )
#templates/demo/login.html
nbsp;html>


    <meta>
    <title>Title</title>


    {{ form.hidden_tag() }}     {{ form.name.label }} {{ form.name }}     {{ form.passwd.label }} {{ form.passwd }}     {{ form.file }}     
#主程序
import random
from flask import Flask, redirect, render_template
from forms import LoginForm
from flask_bootstrap import  Bootstrap

app = Flask(__name__)
bootstrap = Bootstrap(app)
app.config['SECRET_KEY'] =  random._urandom(24)

@app.route('/success/')
def success():
    return  "success"

@app.route('/login/', methods=('GET', 'POST'))
def submit():
    # 实例化表单对象;
    form = LoginForm()
    if form.validate_on_submit():
        print(form.data)
        return redirect('/success/')
    return render_template('demo/login.html', form=form)
app.run()

PythonでのFlaskアプリケーション(フォーム処理)

以上がPythonでのFlaskアプリケーション(フォーム処理)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。