Wagtail 방법이라기보단 Django에서 allauth를 사용하는 방법이다. 어차피 Wagtail도 Django 기반이니 상관 없을 것 같다.
1. forms.py
from django.forms import ModelForm
class CustomUserUpdateForm(ModelForm):
class Meta:
model = CustomUser
fields = ['first_name', 'last_name', 'display_name', 'date_of_birth', 'address1', 'address2', 'zip_code', 'city', 'country', 'mobile_phone', 'additional_information', 'photo',]
widgets = {'date_of_birth': forms.DateInput(attrs={'type':'date'})}
User 정보의 update를 위해서 Django ModelForm을 사용한다.
2. views.py
from django.views.generic.edit import UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import CustomUser
from .forms import CustomUserUpdateForm
class CustomUserUpdateView(UpdateView):
model = CustomUser
form_class = CustomUserUpdateForm
class CustomUserDeleteView(DeleteView):
model = CustomUser
success_url = reverse_lazy('account_signup')
Django에서 제공하는 Update, DeleteView를 사용한다.
파이썬의 클래스들은 import 시에 바로 호출이 된다. 따라서 reverse 는 fbv에서 사용이 된다. reverse_lazy는 주로 cbv에서 success_url을 사용할 경우 사용이 된다.
<form method="post">
{% csrf_token %}
<p>{% trans "Are you sure you want to delete the account" %} {{ object.email }}?</p>
<button type="submit" class="btn btn-danger">{% trans "Delete" %}</button>
</form>
AUTHENTICATION_BACKENDS = (
...
# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
...
)