Форма колбы отправляет все поля в URL-адресе

#python #flask #jinja2

Вопрос:

У меня есть поле поиска в моей навигационной панели следующим образом:

 lt;div class="navbar-nav mr-auto"gt;  lt;form class="navbar-form navbar-left" role="search" method="GET" gt;   {{ barsearchform.hidden_tag() }}  lt;div class="input-group"gt;  {{ barsearchform.query(class="form-control rounded",placeholder="Search articles") }}  {{ barsearchform.submit(class="btn btn-outline-primary") }}  lt;/divgt;  lt;/formgt;   

но при отправке все поля отображаются в строке URL , даже кнопка «Отправить», вот так

 http://localhost:5000/?csrf_token=IjlmMmU0NTg0MmE0N2E1NDBkOGRiOTZlMDk0MjYzNjRjZWI2Njc2YjUi.YZqHoQ.ka3sNHGTCWSQ_GvnOnwr4j86iHAamp;query=aaaaaaaaamp;submit=Search  

обработчик маршрута

 @articles.route("/search/")  def bar_search():  if request.method == "GET":  term = request.args.get('query')  ...  return render_template(...  

чего бы я хотел, так это http://localhost:5000/?query=aaaaaaaa

Ответ №1:

в методе GET все указывается в URL-адресе. У вас есть несколько вариантов

  • перепишите URL-адрес в пункте назначения
  • передайте материал, чтобы скрыть его в качестве заголовков (это может вызвать проблемы с CORS)
  • используйте метод POST и прячьте вещи в теле
  • вы можете разместить вещи, которые не хотите отправлять за пределы lt;formgt;

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

1. причина, по которой я хочу использовать GET, заключается в том, чтобы иметь возможность поделиться ссылкой для поиска, но мне кажется неправильным иметь в ней маркер csrf и даже кнопку отправки !. все поисковые запросы и видео, которые я видел, показывают только запрос в URL-адресе с использованием параметра from с get