在 /rest-auth/registration/account-confirm-email 配置不正确
Posted
技术标签:
【中文标题】在 /rest-auth/registration/account-confirm-email 配置不正确【英文标题】:ImproperlyConfigured at /rest-auth/registration/account-confirm-email 【发布时间】:2015-06-25 20:23:10 【问题描述】:我使用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()'
关于如何解决这个问题的任何想法?
【问题讨论】:
错误解决了吗? @Weit 您可以尝试将整个模板目录的内容从 allauth 添加到您自己的模板目录中吗? 不,***.com/questions/39637865/… 我试着让它像这里一样 【参考方案1】:对于新的 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)
【讨论】:
兄弟,我有一个类似的不同问题。在我的情况下,用户成功通过验证,但在验证电子邮件已过期的情况下,我收到有关反向登录的错误。拜托,有没有一种方法可以像您一样覆盖确认电子邮件视图,以便它可以指向失败路线,例如“api/loginfailure/”,就像在下面的帖子中一样 ***.com/questions/60235183/…【参考方案2】:当您使用确认电子邮件时,您有两种方法可以做到这一点。
使用 API 指定的或创建您自己的。默认情况下,它使用 django-allauth,并且可以使用反向的 TemplateView。
如果您创建自己的,您可能必须覆盖 account_confirm_email,然后发布到 verify_mail。
在 urls.py 中,它被定义为反向,因此,根据您要执行的操作,您将首先创建自己的 account_confirm_email,获取所需的密钥并将其发布到验证电子邮件。 Here 有更多关于这个错误的信息。
【讨论】:
【参考方案3】:虽然里卡多的回答是正确的,但它并没有帮助我解决我的问题。这就是我需要为我的主人做的事情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 调用的任何路径开头。
当然,以上是使用内置视图处理确认。
【讨论】:
【参考方案4】:我在阅读教程时也遇到了问题Here is the link ,它显示问题为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",],]
【讨论】:
以上是关于在 /rest-auth/registration/account-confirm-email 配置不正确的主要内容,如果未能解决你的问题,请参考以下文章
NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记