Django模板邮件“dict”对象没有“get\u host”属性

2024-05-08 21:22:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在用户使用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'

非常感谢您的帮助。你知道吗


Tags: djangoinpyselfgetrequestlibpackages
2条回答

ActivationEmailrequest作为其初始值设定项的第一个位置参数。您正在传递context作为第一个位置参数,这将导致ActivationEmail失效。你知道吗

确保在创建时将request实例以及context传递给ActivationEmail。你知道吗

email.ActivationEmail(self.request, context).send(to)

您错误地实例化了ActivationEmailrequest参数应该是HttpRequest对象,而不是dict。你知道吗

相关问题 更多 >