Как отличить HTTP-запрос, отправленный от формы HTML, и HTTP-запрос, отправленный от клиента в django? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть модель в django, как показано ниже:

class Student(Model):
    nationality = CharField(max_length=200)

У меня есть форма, как показано ниже:

class StudentForm(ModelForm):

    class Meta:
        model = Student
        fields = ('nationality', )

мой шаблон выглядит так:

<form method="GET" novalidate id="my_form">
      {{ student_form.as_p }}
</form>
<button type="submit" form="my_form" name="my_form">Submit</button>

У меня есть представление, как показано ниже:

def home(request):
    if request.POST:
        return HttpResponse('This should never happen')
    else:
        if request.GET.get('nationality'):
            student_form = StudentForm(request.GET)
            if student_form.is_valid():
                return HttpResponse('get from form submission')
        else:
            student_form = StudentForm()
            print('get from client request')
            return render(request, my_template, {'student_form': student_form}) 

Проблема с этим методом заключается в том, что если sb отправит форму без заполнения поля национальности, результатом будет «получить из запроса клиента», то естьневерно, потому что ошибка проверки должна произойти, потому что запрос от отправки формы, а не прямой клиент получить запрос.Что я могу сделать, так это добавить скрытое поле в форму, как показано ниже:

<form method="GET" novalidate id="my_form">
      {{ student_form.as_p }}
      <input type="hidden" id="hidden" name="hidden" value="hidden">
</form>
<button type="submit" form="my_form" name="my_form">Submit</button>

и изменить свое представление, как показано ниже:

def home(request):
    if request.POST:
        return HttpResponse('This should never happen')
    else:
        if request.GET.get('hidden'):
            student_form = StudentForm(request.GET)
            if student_form.is_valid():
                return HttpResponse('get from form submission')
        else:
            student_form = StudentForm()
            print('get from client request')
            return render(request, my_template, {'student_form': student_form})

Однако должен быть другой метод длясделай это.В HTTP должно быть что-то, что говорит нам о том, что запрос является новым запросом от клиента или отправлен из формы.Я ищу это.

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