#django #django-views #django-allauth
#django #django-просмотры #django-allauth
Вопрос:
Я пытаюсь настроить allauth
, и это было, мягко говоря, непросто.
Моя страница регистрации работает (хотя username
поле отказывается отображаться в форме) и при отправке перенаправляет пользователя на пустую страницу с надписью Check your email to confirm account
В электронном письме говорится
To confirm this is correct, go to http://localhost:8000/users/verify-email/Ng:1h2xx7:z9x0t0wmvAhicak5twI_QtVWNYo
Когда я нажимаю на ссылку, страница пуста (хотя по-прежнему оформлена в моем стиле base.html
, содержимого нет.)
Я предполагаю, что оно должно перенаправлять на страницу входа в систему и показывать баннер Account confirmed, you may now log in.
Может кто-нибудь, пожалуйста, указать мне, почему это происходит?
Есть ли views.py класс для страницы после подтверждения электронной почты, о котором я должен знать?
urls.py
from django.contrib.auth import views as auth_views
from users import views as user_views
from allauth.account.views import confirm_email
urlpatterns = [
path('register', user_views.MySignupView.as_view(template_name='users/register.html'), name='register'),
path('login', user_views.MyLoginView.as_view(template_name='users/login.html'), name='login'),
path('verify-email/<str:key>',
confirm_email,
name='account_confirm_email'),
views.py
from allauth.account.views import SignupView, LoginView
class MySignupView(SignupView):
template_name = 'users/register.html'
class MyLoginView(LoginView):
template_name = 'users/login.html'
forms.py
class UserRegisterForm(forms.Form):
email = forms.EmailField()
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
def signup(self, request, user):
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
settings.py
ACCOUNT_SIGNUP_FORM_CLASS = 'users.forms.UserRegisterForm'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS=7
ACCOUNT_LOGIN_ATTEMPTS_LIMIT = 5
ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT = 86400 # 1 day in seconds
Комментарии:
1. Проверьте, есть ли у вас
templates/account/email_confirm.html
где-нибудь в папке вашего проекта2. Нет, у меня не было этой папки, теперь я добавил ее, и она показывает полностью пустую страницу. На данный момент я скопировал свой код со своей
login
страницы, но это ответ? Просто оформите эту страницу, чтобы поблагодарить за подтверждение вашей электронной почты, а затем укажите ссылку, чтобы направить их на страницу входа? И как я могу проверить, что электронное письмо действительно подтверждается?3. Этот шаблон должен называться: github.com/pennersr/django-allauth/blob/master/allauth/… Вы можете попробовать скопировать это и посмотреть, поможет ли это. В любом случае что-то, похоже, вызывается, потому что вы не получаете ошибку template not found
4. Да, я просто не могу понять, что вызывается … странно, когда я вставляю этот шаблон в
email_confirm.html
, снова появляется пустая страница5. Проверьте сгенерированный html, возможно, это даст вам ключ к пониманию того, что происходит. Также я рекомендую вам установить github.com/django-debug-toolbar/django-debug-toolbar
Ответ №1:
Оказывается, я использовал {% block body %}
вместо {% block content %}
, поэтому страница была оформлена, но пуста.