Form 안에서 사용가능한 여러가지 함수? method라고 해야 하나???
명칭에 약하다 나중에 명칭공부를 해야겠지만 그냥
method라고 할란다
attribute들도 많다
cleaned_data, is_valid(), clean 등등
뭐가 뭔지 어떠한 기능을 하는지 모르고 그냥 가져다가 썼는데
장고 Document를 보면서 각가 어떤 기능을 가지는 알아보았다
* 코딩균의 개발 공부를 뇌에 정리하기 위한 포스팅이며 틀린 점이 있다면 거칠게 댓글에 피드백 부탁드립니다
시작
from django import forms
forms api를 임포트 해주고
class LoginForm(forms.Form):
username = forms.CharField(label="아이디", max_length=100)
password = forms.CharField(widget=forms.PasswordInput)
#forms.py 에 선언된 form class
사용자가 입력할 input 들을 만들어준다
사용자는 프론트 엔드의 html form을 통해 인코딩 된 data들을 보내고
각 인코딩 된 데이터들이 저기 선언된 필드에 착륙하는 시스템인 것 같다
form.is_valid()
form 안의 각 필드에 들어와 계신 데이터들이 모두 필드에 적합한 data들인지
시찰 한번 쭈욱 도신 다음에 다 오케이라면
1. True를 반환
2. cleaned_data 속성에 data들을 배치한다
view에서 is_valid()를 사용하여 정보들을 사용할 수 있도록 cleaned_data로 뽑아준다
class Login(View):
def get(self, request):
form = LoginForm()
ctx = {
'form':form,
}
return render(request, "users/login.html", ctx)
def post(self, request):
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get("username")
password = form.cleaned_data.get("password")
user = authenticate(request, username=username, password=password)
if user is not None:
login(user)
return redirect(reverse("core:main"))
ctx={
'form':form,
}
return render(request, "users/login.html", ctx)
위는 클래스 기반의 view이다
get의 형태로 request를 보낸다면
즉 우리가 처음 로그인 페이지에 들어갔다면
class view은 get 함수를 사용하여서 form을 만들어주고
그것을 context로 템플릿에 넘겨준다!
post의 형태로 request가 들어왔다면
즉 우리가 로그인 페이지에서 아뒤 비번을 입력하고 로그인 버튼을 눌렀다면
request.POST를 인자로 받은 폼을 만들어서
: binding data to the form 데이터를 폼에 바인딩 한다고 doc은 설명한다
-> 이때 아마 인코딩 된 정보들이 장고의 폼에 들어가는 것이 아닌가 싶다
이 놈의 폼이 올바른 정보를 담고 있는지 점검한 후에!
옳다구나! 올바른 정보들이 사용자로부터 브라우저가 인코딩하여서 필드 안에 잘 넣어놨구나!
라는 것을 깨닫는다면 cleaned_data라는 곳에 우리가 사용할 수 있게 스르륵 넣어준다
만약! is not valid하다면??
다시 원래 정보들이 입력되어 있는 폼이 있는 템플릿으로 돌아간다!!
form = Loginform(request.POST)
이 form이 ctx를 통해 template으로 넘어갔으니까
내가 쓴 정보 그대로 다시 알맞은 정보로 수정할 수 있는 것이다
form.cleaned_data
데이터들이 form에 바인딩되고
is_valid()가 작동되어서 validation검사를 쭈욱 마치고 나오면
딕셔너리 형식의 파이썬 타입으로 convert되는 데 그것이 바로 cleaned_data이다!
doc에 따르면 request.POST.get("") 이렇게 data에 접근하는 방식도 있으나 사실 이미 적합성 검사를 마친
cleaned_data를 쓰는 것이 더 적합하다
'Django 탐험기' 카테고리의 다른 글
[Django] Form : Http method - GET, POST란??? (0) | 2021.01.12 |
---|---|
[Django] 웹 개발 환경 세팅하기 (0) | 2021.01.11 |