설명
우선 회원가입 시 입력받는 데이터를 추가하고 싶을 경우 User 테이블을 상속받는 다른 하나의 테이블을 만들어야 합니다.
저는 Profile이라는 테이블을 만들어서 진행했습니다.
코드
models.py
1
2
3
4
5
6
7
8
9
10
class Profile(models.Model):
sex_choice = (
('남', '남'),
('여', '여'),
)
user = models.OneToOneField(settings.AUTH_USER_MODEL)
name = models.CharField(max_length=10)
sex = models.CharField(max_length=2, choices=sex_choice)
phone_number = models.CharField(max_length=20)
img = models.ImageField(upload_to="profile_pic")
- ImageField를 사용하기 위해서 다음을 참조하세요.
upload_to="profile_pic"
은 저장되는 이미지 파일의 경로를 설정해주는 것입니다.
/media/profile_pic/XXXx.jpg 다음과 같은 경로로 이미지는 저장됩니다.
views.py
1
2
3
4
5
6
7
8
9
10
11
def signup(request):
if request.method == 'POST':
form = SignupForm(request.POST, request.FILES)
if form.is_valid():
user = form.save()
return redirect(settings.LOGIN_URL) # default : "/accounts/login/"
else:
form = SignupForm()
return render(request, 'accounts/signup_form.html', {
'form' : form,
})
accounts/signup_form.html
1
2
3
4
5
6
7
<form action="" method="post" enctype="multipart/form-data">
# csrf_token
<table>
</table>
<input type="submit"/>
</form>
주의사항
- views.py에서 request.POST 뿐만아니라 request.FILES를 인자로 받아야 Media 파일을 입력 받을 수 있습니다.
- form.html에서도 form 태그의 enctype 속성이 multipart/form-data로 설정되어 있지 않다면 파일이 아닌 파일 이름만 입력되게 됩니다.