Каков более эффективный способ передачи переменных из шаблона для просмотра в Django?

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

Я знаю о передаче переменных в URL и через форму. Проблема с первым заключается в том, что url-адресом можно манипулировать, а это не то, что я хочу. Есть ли способ предотвратить это?

прямо сейчас это то, что у меня есть в качестве пластыря:

<form action="/match/" method="post">
{% csrf_token %}

<input type="hidden" name="name1" value="{{ male_results }}">
<input type="hidden" name="userid1" value="{{ male_pic_userid }}">

<input type="hidden" name="name2" value="{{ female_results }}">
<input type="hidden" name="userid2" value="{{ female_pic_userid }}">

<input type="submit" value="Submit" />
</form> 

есть ли способ избежать использования этого? Спасибо!

2 ответов


есть в целом 3 способа удержать такую информацию:

сессии (мое предложение для вашей ситуации)

просто данные, которые вы хотите в request.session словарь, оно будет сохраняться для каждого пользователя, и вы можете легко получить доступ к нему:

# view1
request.session['name1'] = male_results
request.session['userid1'] = male_pic_userid

# view2 (or elsewhere in view1)
male_results = request.session.get('name1')
male_pic_userid = request.session.get('userid1')

преимущества

  • никаких изменений, необходимых для ваших шаблонов (за исключением удаления теперь ненужных форм).
  • Чистые URL-Адреса
  • упорствует даже через закрывать и повторное открытие окна браузера
  • вам не нужно беспокоиться о том, что пользователи изменяют или даже видят данные сеанса (это более безопасно)

недостатки

  • С POST, содержимое страницы диктуется URL и данные сеанса - URL-адреса больше не уникальны, и пользователи не могут делиться определенной страницей, которая зависит от информации о сеансе

параметры запроса

что-то вроде /match/?name1=foo1&userid1&name2=bar&userid2=2. Вы можно добавить их вручную (<a href='/match/?name1={{ male_results }}...) или путем изменения POST формы GET.

преимущества

  • эти URL-адреса могут быть общими и закладками; если это список с параметрами фильтрации, это, вероятно, желательно ("Вот список автомобилей, которые мне нравятся", размещенный на Facebook, etc.)

недостатки

  • как вы уже отметили, они могут быть свободно изменены
  • добавить эти для каждого URL-адреса это огромная боль

POST form (ваш текущий подход)

преимущества

  • немного более скрытый (ничего не видно пользователю без какого-либо расширения браузера)
  • немного сложнее манипулировать (хотя не полагайтесь на эту безопасность через неизвестность)
  • Чище URL-Адреса

Disdvantages

  • приводит к" эта страница истекла " сообщения в Интернете Explorer, Если вы используете кнопку "Назад" Вашего браузера ...
  • ... и" вы уверены, что хотите повторно отправить эти данные " сообщения в большинстве браузеров, если пользователи пытаются перезагрузить любую из ваших страниц
  • вся эта информация о состоянии будет потеряна, если пользователь снова откроет страницу (например, нажав "return" в строке URL)
  • пользователи не могут делиться точной страницей, на которую они смотрят; содержание частично определяется не видимой пользователем информацией
  • добавлять POST данные для каждого навигационного действия-это огромный боль.

есть три способа получить данные с html-страницы в серверную часть сервера: URL (GET), форма (POST) и куки.

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

с точки зрения эффективности, для вашего заголовка сообщения, переменные URL (GET) немного более эффективны, так как данные формы проходят через небольшое количество кодирования, прежде чем он будет отправлен на сервер.

при нормальном использовании стандарт - использовать переменные URL (GET) при получении данных с сервера и переменные Form (POST), когда вы хотите управлять (редактировать/удалять) данные на сервере.