我使用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()'
有关如何解决这个问题的想法吗?
答案 0 :(得分:5)
使用确认电子邮件时,您有两种方法可以执行此操作。
使用API指定或创建您的API。默认情况下,它使用django-allauth,并且可以使用反向的TemplateView。
如果您创建自己的,则可能必须覆盖account_confirm_email,然后发布到verification_mail。
在urls.py中,它被定义为反向,因此,根据您要执行的操作,您将首先创建自己的account_confirm_email,获取所需的密钥并将其发布到verify-email。 Here有关于此错误的更多信息。
答案 1 :(得分: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调用的任何路径开头。
当然,以上是使用处理确认的内置视图。
答案 2 :(得分:1)
对于新的Django版本,re_path网址解析器方法可与此(?P. +)网址正则表达式一起正常使用。
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)
答案 3 :(得分:0)
我在阅读教程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",],}]