我们如何在django和bootstrap中验证gmail帐户的注册页面上显示成功消息?

x0fgdtte  于 2023-01-03  发布在  Go
关注(0)|答案(2)|浏览(194)

我已经成功地在Django注册了一个账户,但是在显示验证电子邮件账户的成功消息时遇到了问题。我正在使用Django和Bootstrap进行我的项目,并且正在寻求如何显示和样式化这些消息的指导。当我试图返回这些消息时,我遇到了一个错误。您能提供帮助来正确地显示和处理这些消息吗?

accounts/views.py 

class SignUp(CreateView,SuccessMessageMixin):
    form_class = UserCreateForm
    template_name = 'accounts/signup.html'
        
    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():

            user = form.save(commit=False)
            user.is_active = False # Deactivate account till it is confirmed
            user.save()

            current_site = get_current_site(request)
            subject = 'Activate Your Believer Account'
            message = render_to_string('accounts/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject, message)
            success_registered_message = "You're register successfully"
            verify_message = "Please verify your account from gmail"
            return success_registered_message,verify_message

        return render(request, self.template_name, {'form': form})

templates/accounts/signup.html

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

如果需要更多细节,请在评论中告诉我。我会用这些信息更新我的问题。谢谢。

ovfsdjhp

ovfsdjhp1#

我不想在任何其他页面重定向,我只是想留在他们同一页(注册页),并希望显示成功注册后的消息。
您希望网站采用Post-Redirect-Get模式。您可以在此处了解一些背景知识:http://www.theserverside.com/news/1365146/Redirect-After-Post如果想登陆同一个视图/模板,可以重定向到同一个视图。
关于我对消息框架的建议。在此更新您的代码以使用该框架。

from django import http
from django.contrib import messages

class SignUp(CreateView):
    form_class = UserCreateForm
    template_name = 'accounts/signup.html'
        
    def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.template_name, {'form': form})

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():

            user = form.save(commit=False)
            user.is_active = False # Deactivate account till it is confirmed
            user.save()

            current_site = get_current_site(request)
            subject = 'Activate Your Believer Account'
            message = render_to_string('accounts/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)),
                'token': account_activation_token.make_token(user),
            })
            user.email_user(subject, message)
            messages.success(
                request,
                "You're register successfully. Please verify your account "
                "from gmail"
            )
            return http.HttpResponseRedirect('<your-url>')

        return render(request, self.template_name, {'form': form})

这应该与您添加到模板中的内容兼容。
此外,请确保您的设置包含以下内容:

  • “django.contrib.messages”位于已安装应用程序中。
  • 中间件包含“django.contrib.会话.中间件.会话中间件”和“django.contrib.消息.中间件.消息中间件”。
  • 默认的存储后端依赖于会话。这就是为什么必须启用SessionMiddleware,并且在MIDDLEWARE中出现在MessageMiddleware之前。
  • 在TEMPLATES设置中定义的DjangoTemplates后端的'context_processors'选项包含'django.contrib.messages.context_processors. messages'。
xqk2d5yq

xqk2d5yq2#

https://docs.djangoproject.com/en/3.1/ref/contrib/messages/#adding-messages-in-class-based-views

SuccessMessageMixin有一个属性success_message,在您的情况下应将其更新为:
success_message=“您已成功注册,请通过gmail验证您的帐户”

您还应该重定向到所需页面,或者根据需要呈现当前页面

相关问题