|
Table of contents
|
Данная глава временно взята из первой версии книги и подлежит корректировке. Вы можете помочь с этим! Перевод © Попов Руслан <radz • yandex • ru> Пришло время для исповеди: до этого момента мы умышленно игнорировали очень важный аспект разработки. До сих пор мы рассматривали общий случай создания HTML, но в этой главе мы пойдём другим путём и рассмотрим возможности Django для генерации других видов контента. До этого момента мы рассматривали посетителей нашего сайта как безликую, анонимную массу просматривающую наши аккуратно свёрстанные страницы. Конечно, на самом деле всё не так. За браузерами, которые работают с нашим сайтом, сидят реальные люди (по крайней мере, иногда). Это нельзя игнорировать. Интернет предназначен для объединения людей, а не машин. Если мы стараемся разрабатывать совершенно неотразимые сайты, в конечном счёте нам придётся учитывать мнение людей. К сожалению, не всё так просто. HTTP разработан так, чтобы не учитывать состояния. Таким образом, каждый запрос происходит как-бы в вакууме. Не существует взаимосвязи между одним запросом и другим. Соответственно, мы никак не сможем привязаться к какому-нибудь аспекту (IP адрес, тип браузера и так далее) для гарантированного определения запросов от одного конкретного пользователя. В этой главе вы научитесь как решать подобную задачу. Мы начнём с нижнего уровня (cookies) и продолжим изучение инструментов высокого уровня для поддержки сессий, аутентификации и авторизации пользователей. Разработчики браузеров давно поняли, что отсутствие поддержки состояний в протоколе HTTP вызвало большие трудности у веб разработчиков. И тогда были созданы cookie. Cookie — это небольшие кусочки информации, которые браузер сохраняет по просьбе веб сервера. При каждом обращении браузера к странице определённого сайта, он отсылает полученную ранее cookie. Давайте рассмотрим как это работает. Когда вы открываете свой браузер и переходите на http://google.com/, ваш браузер отправляет HTTP запрос на Google, который начинается так: GET / HTTP/1.1 Host: google.com ...
Ответ Google выглядит обычно так: HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671;
expires=Sun, 17-Jan-2038 19:14:07 GMT;
path=/; domain=.google.com
Server: GWS/2.1
...
Обратите внимание на заголовок Set-Cookie. Ваш браузер сохранит значение cookie (PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671) и будет отсылать его обратно, при каждом обращении к серверу Google. Таким образом, при следующем посещении Google, ваш браузер будет посылать такой запрос: GET / HTTP/1.1 Host: google.com Cookie: PREF=ID=5b14f22bdaf1e81c:TM=1167000671:LM=1167000671 ...
Google затем может использовать значение Cookie для определение того, что вы именно тот, кто обращался к сайту ранее. Значение, например, может быть ключом записи в базе данных, которая хранит информацию о пользователе. Google может (и будет) использовать её для отображения вашего имени на странице. Для сохранения состояний в Django большую часть времени вы пожелаете использовать высокоуровневые сессии и/или среду пользователя, которая будет рассмотрена в этой главе чуть позже. Однако, мы прервёмся и посмотрим как читать и писать cookie на низком уровне. Это поможет вам понять как работают инструменты, которые описаны далее. И это вам пригодится, если вам придётся напрямую работать с cookie для решения своих задач. Прочитать уже установленный cookie невероятно просто. Каждый объект запроса обладает объектом COOKIES, который выглядит как словарь. Вы можете использовать его для чтения значения любого cookie, которые браузер отправил в представление: def show_color(request):
if "favorite_color" in request.COOKIES:
return HttpResponse("Your favorite color is %s" % \
request.COOKIES["favorite_color"])
else:
return HttpResponse("You don't have a favorite color.")
Записать cookie гораздо сложнее. Вам потребуется использовать
метод def set_color(request):
if "favorite_color" in request.GET:
# Create an HttpResponse object...
response = HttpResponse("Your favorite color is now %s" % \
request.GET["favorite_color"])
# ... and set a cookie on the response
response.set_cookie("favorite_color",
request.GET["favorite_color"])
return response
else:
return HttpResponse("You didn't give a favorite color.")
Вы также можете передать ряд необязательных аргументов в
Таблица 12.1. Опции cookie
Вы могли отметить ряд потенциальных проблем методики работы с cookie. Взглянем на наиболее важные из них:
|
Found misprint?
Select it with the mouse and hit Enter
-
Processed:
33
1
199
25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 601
Русская группа
Ускорить процесс перевода!
ЯМ:41001223475816
|
| © 2008-2012 Ruslan Popov @ gmail.com | Powered by Django 1.2.5 |
Форкнуть репозиторий с книгой, внести правки, нажать на кнопку Pull Request.
А как через туда исправить ? о_0
А у вас есть возможность это исправить через GitHub :)
У вас тут заместо FIXME
FIMXE =)