Как мы можем показать сообщение об успешном завершении на странице регистрации подтверждения учетной записи gmail в django и bootstrap?

#django #bootstrap-4 #django-views #django-templates

#джанго #начальная загрузка-4 #django-просмотры #django-шаблоны

Вопрос:

Здесь я могу успешно зарегистрировать учетную запись в 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 %}
 

если требуется более подробная информация, сообщите об этом в комментариях. Я дополню свой вопрос этой информацией. Спасибо.

Комментарии:

1. Привет, у Django есть фреймворк для сообщений, см. docs.djangoproject.com/en/3.1/ref/contrib/messages . Таким образом, эти сообщения могут быть отправлены в фреймворк. После успешного сообщения вы можете перенаправить на (или тот же) просмотр, который позволяет отображать сообщение, и пользователь видит ваш контент с помощью GET.

2. Я тоже пробовал это и прочитал эту документацию, но я мало что понял, поэтому я задал этот вопрос, не могли бы вы сказать мне, как я могу исправить свой код и сделать сообщения работоспособными в моем проекте?

Ответ №1:

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

У SuccessMessageMixin есть атрибут success_message, который в вашем случае должен быть обновлен до;

success_message = «Вы успешно зарегистрированы, пожалуйста, подтвердите свою учетную запись в gmail»

Вы также должны перенаправить на нужную страницу или отобразить текущую страницу, если это необходимо

Комментарии:

1. success_message = "You're registered successfully, Please verify your account from gmail" success_message = "You're registered successfully, Please verify your account from gmail" return render(request,self.template_name) я обновил свою учетную запись этим, но это не сработало.

2. я не хочу перенаправлять ни на какую другую страницу, я просто хочу остаться на той же странице (страница регистрации) и хочу показать сообщение после успешной регистрации.

Ответ №2:

я не хочу перенаправлять ни на какую другую страницу, я просто хочу остаться на той же странице (страница регистрации) и хочу показать сообщение после успешной регистрации.

То, что вы хотите от веб-сайтов, — это шаблон 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’ находится в INSTALLED_APPS.
  • ПРОМЕЖУТОЧНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ содержит ‘django.contrib.sessions.middleware.SessionMiddleware» и «django.contrib.messages.промежуточное программное обеспечение.MessageMiddleware».
  • Серверная часть хранилища по умолчанию зависит от сеансов. Вот почему SessionMiddleware должно быть включено и отображаться перед MessageMiddleware в промежуточном программном обеспечении.
  • Параметр ‘context_processors’ серверной части DjangoTemplates, определенный в настройках ваших ШАБЛОНОВ, содержит ‘django.contrib.messages.context_processors.messages’.