フラスコのデフォルトポリシーは前端と後端、配達郵便、PUT ...などフラスコ+ WTFデータ形式へのフロントエンドを分離されていません。
今傾向がフラスコの特定の改変は、次いで、前端と後端を分離し、前方及び後方端部は、ページ要求は、転送データが使用されなければならない要求フォーマットJSONの後端部の前端部に、分離が、唯一のデフォルトflask_wtfフォーム形式をサポートしてなりますその変更は、JSONをサポートします
コードは以下の通りであります:
1 #。コーディング8 = UTF- 2 。3 からフラスコインポート要求 。4 から WTForms インポートをForm1 。5 から OnlineClassroom.app.err.JsonValidateErr インポートJsonValidateErr 。6 。7 。8 #要求データ・ベース検証を 9 クラスRequestBaseForm(Form1に): 10 #解決要求パラメータ 。11 DEF __init__ (自己): 12がされ #次の操作がJSON場合、着信要求は、他のパラメータフォームリクエストである場合、処置されるTODO 13は、 IF 「ファイルアプリケーション/ JSON 」 中(request.headers.get " Content-Typeの" ): 14件の データ= request.get_json(サイレント= TRUE) 15 引数= request.args.to_dict() 16 スーパー(RequestBaseForm、自己)。__init__(データ=データ、** 引数) 17 他: 18 #アプリケーション/ x-www-form-urlencodedで又はマルチパート/フォームデータ 19件の データ= request.form.to_dict() 20個の 引数= request.args.to_dict() 21 スーパー(RequestBaseForm、自己)。__初期化__(データ=データ、**は引数) 22 23 #パラメータの検証エラーのスロー 24 DEFのvalidate_for_api(セルフ): 25 !有効= スーパー(RequestBaseForm、セルフ).validate() 26 IF ない有効:! 27 #TODOはここでやっリターン、コード、MSG、データエラーの戻り??? 28 昇給 JsonValidateErr(" フィールドは、必要IS?" ) 29 30 リターン・セルフ
親によって)(フォームwtfformsコール親クラス・パラメータの解析方法__init__は、親クラスのプロパティの投与後、リクエストヘッダのコンテンツタイプに応じてデータを解析する、前記カスタムメソッドvalidate_for_apiの検証認証メソッド呼び出しの親クラス正確があるかどうかを判断します
フォームのモデルを形成します:
1 #コーディング= UTF-8 2 3 から .JsonBaseValidateのインポートRequestBaseForm 4 から wtforms インポートStringField、フォーム 5 から wtforms.validatorsはインポートDataRequired、長さ 6 7 クラスTESTFORM(RequestBaseForm): 8 名= StringField(" ユーザ名"、バリデータを= [ DataRequired()、長さ(MIN = 2、最大= 20)])
次のように簡単なテストは、ルーティング・コードは:
1 @ user.route(" /インデックス"、メソッド= [ " GET "、" POST " ]) 2 DEF XX(): 3 REQ = TESTFORM() 4 タイプ= request.headers.get(" コンテンツタイプ" ) 5 もしreq.validate_for_api(): 6 リターン " requset username.data {} >>要求コンテキスト型{} " .format(req.username.data、タイプ) 7 リターン " リクエスト検証failds ... "
これはJSONリクエストで、そのオプションのヘッダーのcontent-typeでapplocation / JSONに忘れてはいけません
これは、フォーム・データおよびform-urlencodedであります