[開発ログ]3日目-django form,無効なinput


今日(正確には昨日)したこと
  • 図書山岳地帯配送ロジック
  • を実現
  • 会員加入表修正
  • 島山を区分する
    配送先が図書山岳地帯に変更されると、それに応じて配送料が更新されます.
    次の場合、運賃を再計算します.
  • 基本配送先は図書山間:決済進行ページに入ると、図書山間配送料が配送料に加算されます.
  • 基本配送先は図書山間ではなく、図書山間に変更された場合、または逆にサーバから図書山間配送料を受け取り、差し引いたり加算したりします.
  • 既存の住所パターンは郵便番号や図書がなく、最終的に増加することにした.したがって,1つ目の場合は,サーバ上でアドレスパターンをチェックし,図書を購入したかどうかを確認するだけでよい.
    ユーザーが自分のアドレスを変更した場合:
    問題は2番で、ユーザーが直接支払進行ページに住所を入力すると、zipcodeは以下の郵便番号APIの戻り値で受信されます.AJAXリクエストをサーバに送信し,サーバはzipcodeに基づき前回作成した郵便番号チェック関数で正しいか否かを判断し,配送料の増減額を応答に送信する.クライアントは、このレスポンスに基づいて運賃および合計価格フィールドを更新します.
    アドレスモードが変わったので...
    最終的には,アドレスモデルに郵便番号,図書が完全かどうかをチェックする関数が加わっているため,アドレスモデルを用いたすべてのページが影響を受ける.特に会員加入.
    ただし、アドレスmodelFormを使用するページが多いため、フォーム側にデータを入れてこそ大きな変更を防ぐことができます.
    djangoでは、formis_valid()関数を実行してフォームを検証し、フォームが有効である場合、is_valid()Trueを返し、cleaned_dataという名前のリストにフォームデータを格納します.cleaned_dataにデータを格納するために、フォーム内の各フィールドに対してclean_(필드명)関数を呼び出してデータを受信する.
    ユーザがアドレスを入力すると、hiddenステータスのzipcodeフィールドに値が入力される.しかしこの住所が図書山間かどうかを判定するには,サーバにアクセスし,AJAXを要求する必要がある.
    しかし、これは面倒だと思います.最後にフォームを提出するときは、zipcodeを使って図書が散らばっているかどうかを判定する関数を実行し、サーバーにcleaned_dataを保存することができます.
    def clean_is_jeju_mountain(self):
        zipcode = self.cleaned_data["zipcode"]
    
        return check_address_by_zipcode(int(zipcode))
    同様に、図書配布の有無フィールド(is_jeju_mountain)は、フォームの検証中に値を決定する.
    それは当然だ.
    こうして表を変えて会員登録を済ませ、ひたすら提出して、そのまま元のページに移動しました.
    交換したばかりのフォームは何か問題があると感じて、住所に関するフォームだけを修正して、会員に参加してみましたが、結果は同じでした.だから最後に会員全員の入社形式をチェックしました.ああ、電話番号のフィールドが空いています.
    会員登録の過程で、電話番号認証が完了してから入力するのを防止するため、入力をdisabledの状態に変更し、POSTメソッドでは入力を無効にしてサーバに提出できないとしています.
    一時的に資格認定を完了しても無効になることはありません.
    紆余曲折の末、会員加入表を修正した.
    TIL
  • django formは、is_valid()を実行するときにclean_(필드명)関数を実行し、cleaned_dataの値
  • を満たす.
  • html <form> POSTを介さずにdisabled状態で入力されたデータをサーバに送信