При использовании форм django на странице трясогузки, как обрабатывать request.method == 'POST'? - PullRequest
0 голосов
/ 12 мая 2018

Я не могу обработать запрос, когда пользователь отправляет форму.

Я отображаю свою форму в методе get_context () в классе HomePage:

def get_context(self, request):
    context = super(HomePage, self).get_context(request)

    from .forms import RosaleaContactForm
    if request.method == 'POST':
        form = RosaleaContactForm(request.POST)
        if form.is_valid():
            subject = request.POST['subject']
            name = request.POST['from_name']
            message = request.POST['message']
            to_email = request.POST['from_email']
            from_phone = request.POST['from_phone']

            send_mail(
                subject,
                name,
                message,
                from_email,
                [to_email],
                fail_silently=False,
            )

            form = form
    else:
        form = RosaleaContactForm()

    context['form'] = form
    return context

Форма отображается на странице, я использую хрустящие формы и re_captcha, но не могу обработать запрос при отправке формы.

  1. Нужно ли новое представление для обработки запроса?
  2. Использую ли я метод подачи?
  3. Отправить форму с AJAX?

Если я хочу, чтобы форма находилась на отдельной странице, я использую метод serve, и все это работает, но обслуживание заменяет все, и я не могу использовать шаблон домашней страницы.

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Из ответа газовика: Работает.

def serve(self, request):
        from flavours.forms import FlavourSuggestionForm

        if request.method == 'POST':
            form = FlavourSuggestionForm(request.POST)
            if form.is_valid():
                flavour = form.save()
                return render(request, 'flavours/thankyou.html', {
                    'page': self,
                    'flavour': flavour,
                })
        else:
            form = FlavourSuggestionForm()

        return render(request, 'flavours/suggest.html', {
            'page': self,
            'form': form,
        })
0 голосов
/ 13 мая 2018

Вы должны переопределить метод serve страницы. Это наиболее близкий эквивалент в Wagtail функциям представления Django, так как он позволяет вам возвращать любой HTTP-ответ, который вам нравится, в зависимости от результата обработки вашей формы - либо рендеринг шаблона (проще всего с помощью помощника Django django.shortcuts.render), либо что-то еще, такое как перенаправление прочь.

См. wagtail-form-example для рабочего примера реализации формы Django в качестве страницы Wagtail.

...