Подтверждение электронной почты Django 2 Allauth перенаправляет на пустую страницу

#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 %} , поэтому страница была оформлена, но пуста.