forms.py
- USERNAME 필드를 email 필드로 재정의(USERNAME = email)
- fields 의 모든 템플릿 속성에 대해서 class=form_control 을 생성자 함수를 통해서 선언
class SignupForm(UserCreationForm):
email = forms.EmailField(label='아이디(이메일 형식)')
name = forms.CharField(max_length=10, label='이름')
password1 = forms.PasswordInput()
password2 = forms.PasswordInput()
alias = forms.CharField(max_length=50, label='닉네임')
gender = forms.CharField(label='성별', widget=forms.Select(choices=CHOICE_GENDER))
profile_img = forms.ImageField(label='프로필 이미지(선택)', widget=forms.ClearableFileInput(), required=False)
cover_img = forms.ImageField(label='커버 이미지(선택)', widget=forms.ClearableFileInput(), required=False)
introduce = forms.CharField(label='자기소개', widget=forms.Textarea)
class Meta:
model = User
fields = ['email', 'password1', 'password2', 'name', 'alias',
'gender', 'profile_img', 'cover_img', 'introduce']
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
# field 의 모든 템플릿 속성에 class=form-control 적용
for field_name, field in self.fields.items():
field.widget.attrs['class'] = 'form-control'
views.py
- 바인딩 되는 데이터는 정보가 URL 에 노출되어서는 안되므로 request.POST
- SignupForm() 에서 들어오게되는 인자는 POST, FILES 순서로 꼭 들어와야 함
- validation(is_valid): 각 form 에 맞는 데이터가 바인딩 되는지 확인
(예를 들면 email 필드인데 email 형식이 아닐 경우, validation 에 걸리게 됨)
- authenticate(): 아이디/비밀번호를 매칭시켜 DB 에 있는 정보와 일치하는지를 검사
def signup_view(request):
"""
UserCreationForm 을 사용
email, password1 을 form 에서 받아서 authenticate 한 이후 로그인 처리
"""
if request.method == 'POST':
form = SignupForm(request.POST, request.FILES)
if form.is_valid():
email = form.cleaned_data['email']
password1 = form.cleaned_data['password1']
form.save()
user = authenticate(request, email=email, password=password1)
login(request, user)
return redirect('product:category-list')
else:
form = SignupForm()
context = {
'form': form,
}
return render(request, 'members/signup.html', context)
'프로젝트 이야기 > 코드' 카테고리의 다른 글
장바구니 기능 구현하기 (0) | 2019.06.08 |
---|