Зачем проверять, является ли запрос POST в Django views.py ?

#django #django-views

#django #django-просмотры

Вопрос:

Я новичок в Django, поэтому во время обучения я кое-что нашел.

Некоторые люди выполняют проверку запроса, например:

 def register(request):
    if request.method =='POST':
        # Register user
        redirect()
    else:
        return render(request,'accounts/register.html')
  

Поэтому я счел это ненужным, потому что действие и метод уже указаны в моей HTML-форме.

 <form action="{% url 'register' %}" method="POST">
  

Итак, для меня это не имеет смысла, поскольку мы отправляем post только запрос на регистрацию.

Я ошибаюсь?

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

1. В вашей html-форме мог быть реализован не только метод post. Итак, вам нужно проверить в view, был ли это именно post или нет — вы никогда сейчас.

2. Вы используете POST для отправки. Но вы также используете это представление для отображения формы в первую очередь.

3. @kosist безусловно, если существует более одной формы, вам нужно проверить, но если у меня есть только одна форма, и в данном случае запрос был сделан только в ней, я прав, не так ли?

4. @DanielRoseman Уууууу, я совсем забыл об этом, большое вам спасибо, я понимаю, почему они делают это сейчас. Я думаю, что будет лучше создать новое представление и передавать входные данные формы, а не заставлять register () обрабатывать две вещи

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

Ответ №1:

Здесь вы используете view как для запросов GET, так и для запросов POST. Более подробное объяснение приведено в приведенном ниже коде:

 def register(request):
    if request.method =='POST':  # comes here when you are making a post request via submitting the form
        # Register user
        redirect()
    else:  # if you are making a get request, then code goes to this block
        return render(request,'accounts/register.html')  # this is for rendering the html page when you hit the url
  

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

1. Спасибо, это здорово

Ответ №2:

Запросы Post выполняются для отправки любого пользовательского ввода на серверную часть сервера. Чтобы просто сформулировать ваш запрос, это базовый поток веб-программы:

  1. Всякий раз, когда пользователь посещает сайт, вводя URL (https://example.com ), затем GET запрос отправляется на сервер как GET / [status_code] . Итак, даже если шаблон в запрошенном URL содержит форму ‘POST’, сначала должен быть сделан GET запрос.
  2. Теперь, если пользователь заполняет форму и отправляет данные с помощью POST метода, сервер получает запрос как POST / [status_code] .

Следовательно, для обработки обоих типов запросов вам необходимо проверить выполняемый метод запроса. Я думаю, что я ответил на ваш запрос.

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

1. Спасибо за этот подробный рабочий процесс, это действительно помогло мне