#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’.