12

我正在使用django-rest-auth进行用户注册和验证电子邮件。当用户注册时,我能够成功发送电子邮件。但是,在电子邮件验证中,我收到以下回溯错误:

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in view
  69.             return self.dispatch(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in dispatch
  87.         return handler(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in get
  155.         return self.render_to_response(context)
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in render_to_response
  130.             template=self.get_template_names(),
File "/Library/Python/2.7/site-packages/django/views/generic/base.py" in get_template_names
  142.                 "TemplateResponseMixin requires either a definition of "

Exception Type: ImproperlyConfigured at /rest-auth/registration/account-confirm-email/vjohhnrf6xpkmn1jxbzaopdn0g79tdyofumeeuyuehcuja8slyz7nzq1idyifcqk/
Exception Value: TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'

关于如何解决这个问题的任何想法?

4

4 回答 4

9

虽然里卡多的回答是正确的,但它并没有帮助我解决我的问题。这是我需要为我的主人做的urls.py

from allauth.account.views import confirm_email
.....
url(r'^accounts-rest/registration/account-confirm-email/(?P<key>.+)/$', confirm_email, name='account_confirm_email'),

确保 url 规范的开头以您用于 allauth REST 调用的任何路径开头。

当然,以上是使用内置视图处理确认。

于 2018-01-04T07:32:54.313 回答
6

当您使用确认电子邮件时,您有两种方法可以做到这一点。

使用 API 指定的或创建您的。默认情况下,它使用 django-allauth,并且可以使用反向的 TemplateView。

如果您创建自己的,您可能必须覆盖 account_confirm_email,然后发布到 verify_mail。

在 urls.py 中,它只是反向定义的,因此,根据您要执行的操作,您必须首先创建自己的 account_confirm_email,获取所需的密钥并将其发布到 verify-email。这里有关于这个错误的更多信息。

于 2015-04-19T07:43:54.927 回答
3

对于新的 Django 版本,re_path url 解析器方法可以与这个 (?P.+) url 正则表达式一起正常工作。

from django.urls import re_path

re_path('rest-auth/registration/account-confirm-email/(?P<key>.+)/', CustomConfirmEmailView.as_view(), name='account_confirm_email')

我还自定义了 allauth ConfirmEmailView get() 方法以便正确重定向

from allauth.account.views import ConfirmEmailView
from django.contrib.auth import get_user_model

class CustomConfirmEmailView(ConfirmEmailView):
    def get(self, *args, **kwargs):
        try:
            self.object = self.get_object()
        except Http404:
            self.object = None
        user = get_user_model().objects.get(email=self.object.email_address.email)
        redirect_url = reverse('user', args=(user.id,))
        return redirect(redirect_url)
于 2019-12-13T17:39:32.080 回答
0

我在阅读教程时也遇到了问题这是链接,它将问题显示为TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'
解决方案:

我更改了模板文件管理器的位置并更改了 setting.py 中的模板

   1. In the App_Name file,I add the New folder Named:templates                                  
   2. In the settings.py: TEMPLATES = [{'DIRS': [BASE_DIR+"/templates",],}]           
于 2017-09-12T08:04:01.287 回答