Formクラスの利用
Section 1. Formクラス
1. forms.Formクラス
3.form要素の作成
4.clean()関数オーバーライド
if username and password: # 아이디와 비밀번호를 모두 입력했을 경우
try:
user = User.objects.get(username=username) # 입력한 아이디와 일치하는 DB 인스턴스 추출
except User.DoesNotExist: # 입력한 아이디와 일치하는 정보가 없는 경우
self.add_error('username','') # username 요소 에러 출력문에 문자열 지정
return
if not check_password(password, user.password): # 입력한 비밀번호가 다른 경우
self.add_error('password','') # password 요소 에러 출력문에 문자열 지정
else:
self.user_id = user.id # 아이디와 비밀번호를 모두 입력하고 아이디가 존재하고 비밀번호가 일치할 때
# user의 id값을 form 클래스의 변수로 초기화
Section 2. View & Template
1.ビューの変更
if request.method == 'POST':
form = LoginForm(request.POST) # form 클래스를 생성해서 form 변수에 저장
if form.is_valid(): # form에 에러가 없다면
request.session['user'] = form.user_id # form 클래스에 있는 user_id 변수 값을 'user'에 지정
return redirect('/') # 홈 화면으로 request를 넘김
else:
form = LoginForm() # POST가 아닌 GET이므로 그냥 폼만 rendering
return render(request, 'login.html', {'form':form}) # form 자체를 데이터로 넘김
2.Templateの修正
3.エラーが発生した場合の結果表示Section 3. オペレーションプロセス
1.ログイン画面接続
①ユーザ登録画面要求
②URL分割→views.login(request)に移動
③POSTではなくGET方式です.
form = LoginForm()
④GETメソッドはフォーム要素のみを生成し、フォームオブジェクトに戻る(clean関数は実行しない)⑤テンプレート転送
return render(request, 'login.html', {'form': form})
2.ログイン要求①ユーザID/PW入力後登録要求
②URL分割→views.login(request)に移動
③POST方式、入力値フォーム
form = LoginForm(request.POST)
④clean関数を実行し、上書き処理ロジックを実行する def clean(self):
cleaned_data = super().clean()
username = cleaned_data.get('username')
password = cleaned_data.get('password')
if username and password:
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
self.add_error('username', '해당 아이디가 존재하지 않습니다.')
return
if not check_password(password, user.password):
self.add_error('password', '비밀번호가 틀렸습니다.')
else:
self.user_id = user.id
⑤処理ロジックを完了したフォームをオブジェクトビューに転送し、以下のコードを実行する form = LoginForm(request.POST)
if form.is_valid():
request.session['user'] = form.user_id
return redirect('/')
Reference
この問題について(Formクラスの利用), 我々は、より多くの情報をここで見つけました https://velog.io/@codren/Form-클래스-활용テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol