1 분 소요

User management (1)

/ form 만들기 / form 라이브러리 crispy로 꾸미기

Register

  • 회원관리를할 account 앱을 생성해준다.
  • settings.py에 새로 만든 account app 을 등록해주고 main 앱 url 패스를 설정해준뒤에 account 앱에서 urls.py 와 views.py 의 로직을 짜준다.
  • 간단한 작업이지만 순서대로 해야 나중에 덜 고생한다 ㅜ 귀찮더라도 단계별로 확인해야함
    def register(request):
        return HttpResponse('Account url setup!')
    

forms.py

from django import forms
# Registration form
class CreateUserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username','email','password1','password2']
    def __init__(self, *args, **kwargs):
        super(CreateUserForm, self).__init__(*args, **kwargs)
        
        # Maek email field as required
        self.fields['email'].required= True

    # Email validation
    def clean_email(self):
        email = self.cleaned_data.get('email')
        if User.objects.filter(email=email).exists():
            raise forms.ValidationError('This email is invalid')

        # Len function updated
        if len(email) >= 350:
            raise forms.ValidationError('Your email is too long')
        return email
  • 장고는 다 알아서 준비되어있어서 그냥 갖다 쓰기만 하면된다.
  • 플라스크랑 비슷한 부분이 많은데 우선 forms를 통해 유효성 검사를 할 수 있다.
  • super() 로 CreateUserForm을 상속받아 초기화 시켜준다.
    • 참고 : https://supermemi.tistory.com/entry/Python-3-super%ED%81%B4%EB%9E%98%EC%8A%A4-selfinit-%EC%97%90-%EB%8C%80%ED%95%B4-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%9
  • 기존에 User 데이터에 동일한 이메일 주소가 있는지와 이메일 주소 길이 정도의 유효성 검사를 해준다.

views.py

def register(request):
    return render(request, 'account/registration/register.html')
  • templates/account 폴더를 만들어주고 추가로 registration 폴더를 만들어준다. (여기서 이메일 유효성 진행할 예정)

base.html and store.html

base.html
<li class="nav-item">
	<a class="btn btn-alert navbar-btn " type="button"  href="{% url 'register' %}"> Register </a>
</li>

store.html
<a href="{% url 'register' %}" class="btn btn-primary my-2"> Create an account </a>
  • 홈페이지에서 register 버튼과 url을 연결해준다.
    • urls.py 에서 name을 register 로 지어줬는데 이 부분이랑 연결된다고 이해하면 됨

form 넘겨주기 views.py

def register(request):
    form = CreateUserForm()
    if request.method == 'POST':
        form = CreateUserForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('store')
    context = {'form':form}
    return render(request, 'account/registration/register.html', context=context)
  • 단순히 로직 확인정도로만 짜준다.
  • 이전에 만든 CreateUserForm을 form 으로 넘겨준다.

crispy 라이브러리로 form 꾸미기

  • register.html 에서 현재 form은 엉망이다.
  • 하지만 부트스트랩처럼 라이브러리를 통해 쉽게 꾸며줄수 있다.

  • crispy를 이용하면 아래와 같이 보기 좋고 쉽고 빠르게 꾸밀 수 있다.
    • 참고 : https://django-crispy-forms.readthedocs.io/en/latest/install.html
    • 부트스트랩 이외에도 여러가지를 사용할 수 있다.

댓글남기기