Как показать сообщение динамически в приложении Django? - PullRequest
0 голосов
/ 02 октября 2019

Я создал веб-приложение, используя django, где в одном из разделов я запрашиваю отзывы пользователей, и, нажав кнопку «Отправить», я отправляю пользователю электронное письмо с благодарностью за отзыв.

Но каждый раз, когда я нажимаю на кнопку "Отправить", страница обновляется, электронная почта успешно доставляется Но я хочу, чтобы, когда пользователь нажимал кнопку "Отправить", я хотел показать сообщение "Спасибо" прямо там, вместо обратной связи. и форму обратной связи для удаления

Вот мой раздел index.html

<form action="" method="POST">    
    {% csrf_token %}
    <div>{{ form.message }}</div>
    <div>{{ form.email }}</div>
    <p class="formerrors" >{{ form.email.errors.as_text }}</p>
    <hr>
    <input id="submitbutton" type="submit" name="submit" value="Submit">
</form>

вот мой индекс определения представления (запрос):

if request.method == 'POST':
    form = FeedbackForm(request.POST)
    if form.is_valid():
        subject = "You got a message"
        message = form.cleaned_data['message']
        email = form.cleaned_data['email']
        actual_message = "You got a message from {} \n\n {} \n\nGo to work\nWith regards".format(email,message)
        recipients = ['example@mail.com']
        sender = 'example@mail.com'
        send_mail(subject, actual_message, sender ,recipients,fail_silently=False)

        return HttpResponseRedirect('')
else:
    form = FeedbackForm()
return render(request,'my_webapp/index.html',{'form':form})

Я могу сделать это, написав функцию JS onClick, но есть ли лучший способ сделать это? Кроме того, встроенные сообщения django обновляют страницу, я думаю, и всегда находятся в верхней части страницы. Я, конечно, не хочу, чтобы моя страница обновлялась, и хочу, чтобы вместо формы появлялось сообщение.

Ответы [ 3 ]

1 голос
/ 02 октября 2019

Вы должны отправить свою форму, используя AJAX . Что касается ответной части, вы можете отправить сообщение с вашего сервера при успешной проверке, и в вашей функции complete для AJAX измените свойство формы display на none, чтобы удалить его. Затем создайте элемент для вашего ответного сообщения, используя javascript.

0 голосов
/ 03 октября 2019

На самом деле вам не нужно использовать AJAX для достижения этой цели. Вы можете использовать django messages framework для создания сообщений, когда пользователь отправил свою форму.

Примерно так:

from django.contrib import messages

...
if request.method == 'POST':
    form = FeedbackForm(request.POST)
    if form.is_valid():
        ...
        messages.success("Thank you")

        # After submitted, redirect user to current page, the form will be reset
        return HttpResponseRedirect(request.path_info)
else:
    form = FeedbackForm()
return render(request,'my_webapp/index.html',{'form':form})

затем в вашем шаблоне:

{% if messages %}
    {% for message in messages %}
        <p class="text-danger">{{ message }}</p>
    {% endfor %}
{% endif %}

<form action="" method="POST">    
    {% csrf_token %}
    <div>{{ form.message }}</div>
    <div>{{ form.email }}</div>
    <p class="formerrors" >{{ form.email.errors.as_text }}</p>
    <hr>
    <input id="submitbutton" type="submit" name="submit" value="Submit">
</form>

Если вам нужно сообщение в тостере, укажите этот ответ

0 голосов
/ 02 октября 2019

Вы можете отправить свою форму с помощью Ajax в представление django и заменить ее запиской с благодарностью при успешном обратном вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...