[TIL #18] 장고 팀프로젝트

안떽왕·2023년 4월 11일
0

Today I Learned

목록 보기
18/76

장고 개인과제에 이은 팀프로젝트가 시작되었습니다. 저희 조는 역할군을 나누어 협업하기로 했고 저는 회원가입, 로그인, 로그아웃 기능을 구현하게 되었습니다. 기능의 구현을 위해 먼저 erd, 모델, 폼의 설계를 맡으신 분의 자료가 들어오고 본격적인 작업이 시작됐습니다.

회원가입

먼저 회원가입의 기능 구현 이전에 모델과 폼을 인계 받았는데 폼을 활용해 사이트를 구성하다보니 모델이 필요가 없어져 회의 끝에 모델은 사용하지 않기로 결정했습니다. 회원가입 페이지에서 받을 요소는 이름, 암호, 암호확인, 자기소개 입니다.

# forms.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class UserForm(UserCreationForm):
    bio = forms.CharField()

    class Meta:
        model = User
        fields = ['username', 'password1', 'password2', 'bio']

UserForm클래스는 UserCreationForm을 상속받게 만들어 모델없이 객체를 생성하는데 이상이 없게 만들고 기본적으로 들어가있지 않는 요소인 bio요소를 따로 만들어 주었습니다.

# views.py

def signup(request):
    form = UserForm()
    if request.method == 'GET':
        return render(request, 'user/signup.html', { 'form' : form })
    elif request.method == "POST":
        form = UserForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/user/login')
        else:
            form = UserForm()
            return render(request, 'user/signup.html', {'form' : form})

회원가입 함수인 signup함수입니다. forms.py에서 UserForm을 받아오고 GET메서드를 받으면 해당 html을 form양식에 맞춰 리턴해주고 POST를 받으면 입력받은 정보를 UserForm에 넘긴 다음 is_valid함수를 사용합니다.

is_valid 함수는 form에 입력된 값들이 유효한지를 판단해 True 혹은 False를 반환합니다. True가 나왔다면 해당 값이 유효한 것이기 때문에 해당 form을 데이터베이스에 저장하고 로그인 페이지로 이동하게 만들었습니다.

False가 나왔다면 유효한 값이 아니기 때문에 다시 form에 비어있는 UserForm을 할당해주고 해당 html을 다시 리턴해줍니다.

느낀 점

회원가입과 동시에 로그인이 된 후 로그인이 된 상태의 페이지를 띄우고 싶었는데 제 코드를 기다리는 팀원이 많아 기능에는 이상이 없는 저 코드를 먼저 건네주게 되었습니다.

if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password1')
            user = authenticate(request, username=username, password=password)
            login(request, user)
            return redirect('/user/login')

위의 코드에서 수정한 작업물인데 login함수에 필요한 인자는 request와 입력정보를 가진 인자로 나오는데 어째서 인자로 하나만 올 수 있다고 나오는지 의문이군요..

팀원분들의 도움으로 돌파구를 찾았습니다 밑에 login함수가 있는데 해당 함수와 이름이 동일해 생기는 오류 같다는 의견이 나왔습니다. 내일 바로 테스트해보고 결과 올리겠습니다.

profile
이제 막 개발 배우는 코린이

0개의 댓글