我试图在用户使用django模板邮件注册帐户后发送验证电子邮件。
这是创建用户后出现的错误:
AttributeError 'dict' object has no attribute 'get_host'
所以Django正在尝试调用get_host(),但无法?所以这是一个错误,因为它无法检索我的主机名? 有人能指出我遗漏了什么吗?你知道吗
class UserListView(generics.ListCreateAPIView):
serializer_class = UserSerializer
def perform_create(self, serializer):
user = serializer.save()
context = {'user': user}
to = user.email
email.ActivationEmail(context).send(to)
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'password', 'email')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
password = validated_data.pop('password')
user = super(UserSerializer, self).create(validated_data)
user.set_password(password)
user.save()
return user
class ActivationEmail(BaseEmailMessage):
template_name = 'email/activation.html'
def get_context_data(self):
context = super(ActivationEmail, self).get_context_data()
user = context.get('user')
context['uid'] = utils.encode_uid(user.pk)
context['token'] = default_token_generator.make_token(user)
context['url'] = 'verify/{uid}/{token}'.format(**context)
return context
回溯:
Environment:
Request Method: POST
Request URL: http://localhost:8000/users/
Django Version: 2.0
Python Version: 3.6.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'templated_mail',
'accounts',]
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'simple_history.middleware.HistoryRequestMiddleware']
Traceback:
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/generic/base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
483. response = self.handle_exception(exc)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception
443. self.raise_uncaught_exception(exc)
File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py" in dispatch
480. response = handler(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/generics.py" in post
244. return self.create(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/rest_framework/mixins.py" in create
21. self.perform_create(serializer)
File "/code/accounts/views.py" in perform_create
54. email.ActivationEmail(context).send(to)
File "/usr/local/lib/python3.6/site-packages/templated_mail/mail.py" in send
69. self.render()
File "/usr/local/lib/python3.6/site-packages/templated_mail/mail.py" in render
61. context = make_context(self.get_context_data(), request=self.request)
File "/code/accounts/email.py" in get_context_data
12. context = super(ActivationEmail, self).get_context_data()
File "/usr/local/lib/python3.6/site-packages/templated_mail/mail.py" in get_context_data
33. site = get_current_site(self.request)
File "/usr/local/lib/python3.6/site-packages/django/contrib/sites/shortcuts.py" in get_current_site
16. return RequestSite(request)
File "/usr/local/lib/python3.6/site-packages/django/contrib/sites/requests.py" in __init__
10. self.domain = self.name = request.get_host()
Exception Type: AttributeError at /users/
Exception Value: 'dict' object has no attribute 'get_host'
非常感谢您的帮助。你知道吗
ActivationEmail
将request
作为其初始值设定项的第一个位置参数。您正在传递context
作为第一个位置参数,这将导致ActivationEmail
失效。你知道吗确保在创建时将
request
实例以及context
传递给ActivationEmail
。你知道吗您错误地实例化了
ActivationEmail
。request
参数应该是HttpRequest
对象,而不是dict
。你知道吗相关问题 更多 >
编程相关推荐