(DJANGO) получение данных из html-формы с помощью GET/POST

Это часть курсовой работы CS50W Проект 1. Я попытался получить пользовательский ввод из формы с помощью метода get. Однако переменная search_query в файле views.py не содержит никакого ввода. Затем я заменил методы get на методы post, и все заработало. Почему так происходит?

layout.html(метод get)

<form action="{% url 'search' %}" method="GET">
<input type="search" name="search_query" placeholder="Search Encyclopedia">
</form>

views.py (метод get)

def search(request):
search_query = request.GET['search_query']
if search_query in util.list_entries():
    return redirect('entry_page', title=search_query)
for entry in util.list_entries():
    if search_query in entry:
        return redirect('search_results')

layout.html(post method)

<form action="{% url 'search' %}" method="POST">
{% csrf_token %}
<input type="search" name="search_query" placeholder="Search Encyclopedia">
</form>

views.py (метод post)

def search(request):
search_query = request.POST['search_query']
if search_query in util.list_entries():
    return redirect('entry_page', title=search_query)
for entry in util.list_entries():
    if search_query in entry:
        return redirect('search_results')

Я думаю, что это связано с различиями в природе http-запросов. В POST-запросах мы отправляем данные отдельно, а в GET-запросах мы должны поместить их в url. Вы, вероятно, ожидаете, что форма сделает это за вас, но она этого не делает! Это означает, что форма не будет помещать параметры в url в режиме GET.

Вернуться на верх