Django-allauth 란?
: 유저 기능을 구현하기 위한 패키지로 Django 프레임워크에 포함되지 않기 때문에 따로 설치를 해줘야 한다.
pip install django-allauth
Installation — django-allauth 0.43.0 documentation
Post-Installation In your Django root execute the command below to create your database tables: Now start your server, visit your admin pages (e.g. http://localhost:8000/admin/) and follow these steps: Add a Site for your domain, matching settings.SITE_ID
django-allauth.readthedocs.io
allauth URL: URL 패턴 정의
allauth의 URL은 여기 정리돼 있는데요, 처음에 allauth URL을 프로젝트에 추가할 때, 앞에 붙는 패턴을 정해줄 수 있습니다.
project/urls.py
urlpatterns = [
...
path('accounts/', include('allauth.urls')),
...
]
이렇게 정의해 주면 모든 url 앞에 accounts/가 붙고 (예: localhost:8000/accounts/login/),
project/urls.py
urlpatterns = [
...
path('', include('allauth.urls')),
...
]
이렇게 정의해 주면 모든 url 앞에 아무것도 안 붙습니다 (예: localhost:8000/login/).
allauth 주요 로직: 세팅(Configuration)
allauth의 주요 로직은 세팅(configuration)을 통해 바꿀 수 있습니다. 여기서 자주 사용되는 세팅을 찾으실 수 있습니다. 리디렉션 URL, 폼에서 사용되는 필드, 링크를 클릭했을 때의 동작 등 여러 가지를 바꿀 수 있는데요. settings.py에 간단한 코드를 써주는 거만으로도 로직을 원하는 대로 바꿀 수 있다는 게 allauth의 큰 장점입니다.
allauth 폼: 커스텀 폼
기본 유저 인증 관련 페이지들에서는 다양한 폼이 사용됩니다. 로그인 폼, 회원가입 폼, 비밀번호 변경 폼 등 다양한 폼이 있는데요.
회원가입을 제외한 나머지 페이지는 거의 항상 똑같은 필드를 가지고 있기 때문에 폼을 바꿔줄 필요가 없습니다. 예를 들어 로그인은 항상 로그인 필드와 비밀번호 필드가 있고, 비밀번호 변경은 현재 비밀번호, 새 비밀번호, 새 비밀번호 확인 필드가 있습니다.
하지만 회원가입은 서비스에 따라 필요한 정보가 다 다르기 때문에 폼을 커스터마이즈해야 하는 경우가 많습니다. 유저네임 필드 여부, 비밀번호 필드 여부 같은 흔한 설정은 configuration을 통해 할 수 있지만, 커스텀 정보를 입력받으려면 커스텀 폼을 사용해야 합니다.
forms.py 파일에 추가 필드에 대한 폼을 만들고, signup(self, request, user) 메서드를 정의해 주면 됩니다.
app/forms.py
class SignupForm(forms.ModelForm):
class Meta:
model = User
fields = ['extra_field1', 'extra_field2', ...]
def signup(self, request, user):
user.extra_field1 = self.cleaned_data['extra_field1']
user.extra_field2 = self.cleaned_data['extra_field2']
...
user.save()
(참고로 ModelForm 대신 일반 Form을 써도 됩니다.)
그리고 ACCOUNT_SIGNUP_FORM_CLASS를 설정해 주면 됩니다.
project/settings.py
ACCOUNT_SIGNUP_FORM_CLASS = 'app.forms.SignupForm'
디자인: 템플릿 오버라이딩
아마 allauth가 제공하는 기본 템플릿을 그대로 사용하고 싶지는 않으실 겁니다. 템플릿을 오버 라이딩하려면 allauth가 제공하는 템플릿과 똑같은 이름을 가진 파일을 account 폴더 안에 넣어주면 되는데요. 자세한 내용은 링크를 참고하세요.
뷰 오버 라이딩?
뷰는 어떤 웹 페이지의 주요 로직을 담당하는 부분입니다. allauth에서 기본적으로 제공하는 뷰를 오버 라이딩하면, 로직을 원하는 대로 바꿔줄 수 있지만, 그 과정은 굉장히 복잡하고 대부분의 로직은 configuration을 통해 바꿀 수 있기 때문에 뷰는 잘 오버 라이딩하지 않습니다. 유일한 예외는 비밀번호 변경 로직을 다루는 PasswordChangeView인데, 비밀번호 변경 후 리디렉트 되는 URL을 configuration으로 설정할 수 없기 때문에 뷰를 오버 라이딩해 줬습니다.
app/views.py
class CustomPasswordChangeView(PasswordChangeView):
def get_success_url(self):
return reverse('index')
위 코드는 리디렉트 URL을 'index', 즉 홈페이지로 설정합니다. 그리고 오버 라이딩한 뷰를 사용하기 위해서 URL 패턴을 바꿔주면 됩니다.
project/urls.py
urlpatterns = [
...
path('password/change/', CustomPasswordChangeView.as_view(), name='account_password_change'),
path('', include('allauth.urls')),
]
'Study > Django' 카테고리의 다른 글
[ Django ] allauth 템플릿 오버라이딩 정리하기 (0) | 2022.01.09 |
---|---|
[ Django ] Input 태그의 속성 (0) | 2021.12.26 |
[Django] 장고 유저 기능 구현하기 #12 ( Form에 디자인 입히기) (0) | 2021.12.26 |
[Django] allauth URL 및 세팅 (0) | 2021.12.22 |
[Django] 장고 유저 기능 구현하기 #11 ( 비밀번호 관리 기능) (0) | 2021.12.22 |