English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
myapp/forms.py
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 #-*- coding: utf-8 -*- from django import forms class LoginForm(forms.Form): user = forms.CharField(max_length =) 100) password = forms.CharField(widget = forms.PasswordInput())
上記から分かるように、フィールドタイプは「widget」のパラメータを使用してHTMLにレンダリングできます;私たちの例では、パスワードを隠して表示しないようにします。私たちの例では、パスワードを表示せずに隠したいです。日付入力はDateInput、チェックボックス入力はチェックボックスなどです。
ビューでフォームを使用します
HTTPリクエストにはGETとPOSTの2種類があります。Djangoでは、ビューのリクエストオブジェクトにパラメータとして渡される属性「方法」があります。この属性にはリクエストのタイプが設定され、POSTで渡されるすべてのデータはrequest.POST辞書を通じてアクセスできます。
myappで作成します/views.py でログインビューを作成します −
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 #-*- coding: utf-8 -*- from myapp.forms import LoginForm def login(request): username = "not logged in" if request.method == "POST": #Get the posted form MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] else: MyLoginForm = Loginform() return render(request, 'loggedin.html', {"username" : username})
このビューは「loggedin.html」を表示してログインフォームの結果を表示します。テストするために、まずはログインフォームのテンプレートが必要です。それを「login.html」と名付けましょう:
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 <html> <body> <form name = "form" action = "{% url "myapp.views.login" %}" method = "POST" >{% csrf_token %} <div style = "max-width:470px;"> <center> <input type = "text" style = "margin-left:20%;" placeholder = "Identifiant" name = "username" /> </center> </div> <br> <div style = "max-width:470px;"> <center> <input type = "password" style = "margin-left:20%;" placeholder = "password" name = "password" /> </center> </div> <br> <div style = "max-width:470px;"> <center> <button style = "border:0px; background-color:#4285F4; margin-top:8%; height:35px; width:80%;margin-left:19;" type = "submit" value = "Login" > <strong>Login</strong> </button> </center> </div> </form> </body> </html>
テンプレートはログインフォームを表示し、上記のログイン結果を投稿します。おそらく、テンプレートがCSRF攻撃を防ぐためのタグであることに気づくかもしれません。
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 {% csrf_token %}
ログインテンプレートが手に入ったら、ログイン後の表示にテーブルを処理してloggedin.html テンプレートを表示する必要があります。
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 <html> <body> You are: <strong>{{username}}</strong> </body> </html>
今、私たちはURLsに対して始める必要があります: myapp/urls.py
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 from django.conf.urls import patterns, url from django.views.generic import TemplateView urlpatterns = patterns('myapp.views', url(r'^connection/', TemplateView.as_view(template_name = 'login.html')), url(r'^login/', 'login', name = 'login'))
アクセスする際に「/myapp/connection"、login.html テンプレートが以下のように表示されます −
上記のテーブルが提出された後、フォーマットは有効です。私たちの例では、必ず2つのフィールドを入力して、以下の結果が得られます −
ユーザー名がpoloで、パスワードを忘れた場合、以下のメッセージが表示されます −
私たちの独自のフォーム検証を使用して
上記の例では、フォームを検証しています −
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 MyLoginForm.is_valid()
私たちはDjangoの自前のフォーム検証エンジンを使用しており、インスタンスではこのフィールドが必須であることを確認しています。今、ユーザーがDreamreal項としてデータベースに存在するか確認するために試みてみましょう。この点で、myapp/forms.py は −
# ファイル名 : example.py # 著作権 : 2020 By w3codebox # Author by : ja.oldtoolbag.com # Date : 2020-08-08 #-*- coding: utf-8 -*- from django import forms from myapp.models import Dreamreal class LoginForm(forms.Form): user = forms.CharField(max_length =) 100) password = forms.CharField(widget = forms.PasswordInput()) def clean_message(self): username = self.cleaned_data.get("username") dbuser = Dreamreal.objects.filter(name = username) if not dbuser: raise forms.ValidationError("ユーザーが私たちのデータベースに存在しません!") return username
「is_valid」メソッドを呼び出した後、正しい出力を得ることができます。ユーザーが私たちのデータベースにある場合のみです。フォームフィールドをクエリする場合は、フォームクラスのフィールドに対応する名前を持つ「clean_」で始まるメソッドを追加するだけで十分です。forms.ValidationError エラーを発生させることは非常に重要です。