jc.jang

20강 회원가입 시에 프로필 정보 받기 본문

Django/Django - 인증편

20강 회원가입 시에 프로필 정보 받기

jangstory 2019. 9. 9. 22:59

주제

  • 회원가입 시에 프로필 정보 받기

노트

  • 회원가입 시 프로필은 만드는데, 프로필 정보도 받도록 수정해보자.
  • accounts/forms.py에서 정의한 SignupForm을 재정의한 적이 있다.
  • form은 기본적으로 하나의 모델에만 적용이 가능하다. 따라서 bio, website_url 정보를 받아오고 user save할 때 profile을 저장하자.

 

  • accounts/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.core.validators import validate_email
from .models import User, Profile


class SignupForm(UserCreationForm):
    bio = forms.CharField(required=False)
    website_url = forms.URLField(required=False)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['username'].validators = [validate_email]
        self.fields['username'].help_text = '이메일 형식을 입력하세요.'
        self.fields['username'].label = 'Email'

    def save(self):
        user = super().save(commit=False)
        user.email = user.username
        user.save()
        
        bio = self.cleaned_data.get('bio', None)
        website_url = self.cleaned_data.get('website_url', None)

        Profile.objects.create(user=user, bio=bio, website_url=website_url)

        return user

    class Meta(UserCreationForm.Meta):
        model = User
        fileds = UserCreationForm.Meta.fields + ('bio', 'website_url')
  • 예전에, 회원가입과 동시에 profile 만들기를 하면서 model signal에서 프로필을 생성한 적이 있다.
  • 지금은 profile과 User를 동시에 생성해야하므로 on_post_save_for_user에서 프로필을 생성하는 코드는 삭제해야한다.
  • bio, website_url 필드를 정의한다.
  • save를 재정의하고 입력받은 데이터로 Profile을 생성한다.

요약

  • form을 이용해 회원가입과 동시에 프로필 정보를 받을 수 있다.

날짜

  • 오후 11시, 20190909

 

Comments