フラスコ変更flask_wtf検証、それはJSONデータをサポートしていることを確認します

フラスコのデフォルトポリシーは前端と後端、配達郵便、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であります

 

 

 

おすすめ

転載: www.cnblogs.com/zengxm/p/12406499.html