Лучшее руководство по Джанго формы в 2024 году. В этом руководстве вы можете изучить запрос HTTP,Объект запроса,
HTML формы являются классический способ интерактивный веб-сайт. В этой главе объясняется, как обращаться с данными Django форм, представленных пользователем.
HTTP протокол "Запрос - ответ" способ. Когда клиент отправляет запрос, вы можете запросить дополнительные данные. Запрос разрешения сервера, вы можете получить данные от клиента, а также для предоставления конкретных услуг на основе URL.
Мы создали файл search.py до начала реализации проекта, для получения запроса пользователя:
# -*- coding: utf-8 -*- from django.http import HttpResponse from django.shortcuts import render_to_response # 表单 def search_form(request): return render_to_response('search_form') # 接收请求数据 def search(request): request.encoding='utf-8' if 'q' in request.GET: message = '你搜索的内容为: ' + request.GET['q'].encode('utf-8') else: message = '你提交了空表单' return HttpResponse(message)
Добавить search_form шаблон формы в каталоге шаблона:
<html> <head> <meta charset="utf-8" /> <title>Search - w3cschool.cc</title> </head> <body> <form action="/search/" method="get"> <input type="text" name="q"> <input type="submit" value="Search"> </form> </body> </html>
urls.py правило изменяется следующим образом:
from django.conf.urls import * from HelloWorld.view import hello from HelloWorld.testdb import testdb from HelloWorld import search urlpatterns = patterns("", ('^hello/$', hello), ('^testdb/$', testdb), (r'^search-form/$', search.search_form), (r'^search/$', search.search), )
Адрес доступа: HTTP: //192.168.45.3: 8000 / Поиск-формы / и поиска, результаты выглядят следующим образом:
Выше мы использовали метод GET. Просмотр дисплея и функции обработки запроса на два лечения.
Чаще POST метод для отправки данных. Мы используем следующий этот метод, с URL и обработчики, показан также вид и обработать запрос.
Мы создали post в tmplate:
<html> <head> <meta charset="utf-8" /> <title>Search - w3cschool.cc</title> </head> <body> <form action="/search-post/" method="post"> {% csrf_token %} <input type="text" name="q"> <input type="submit" value="Submit"> </form> <p>{{ rlt }}</p> </body> </html>
В конце шаблона, мы добавили RLT метку-заполнитель для результатов таблицы.
Существует также таблица {%}% csrf_token тег позже. CSRF расшифровывается как Cross Site Request Forgery. Это обеспечивается Джанго предотвратить подделку подавать заявки. Метод POST для отправки формы, вы должны иметь этикетку.
Новый search2.py файл в каталоге HelloWorld и использовать функцию search_post для обработки POST запросов:
# -*- coding: utf-8 -*- from django.shortcuts import render from django.core.context_processors import csrf # 接收POST请求数据 def search_post(request): ctx ={} ctx.update(csrf(request)) if request.POST: ctx['rlt'] = request.POST['q'] return render(request, "post", ctx)
urls.py правило изменяется следующим образом:
from django.conf.urls import * from HelloWorld.view import hello from HelloWorld.testdb import testdb from HelloWorld import search from HelloWorld import search2 urlpatterns = patterns("", ('^hello/$', hello), ('^testdb/$', testdb), (r'^search-form/$', search.search_form), (r'^search/$', search.search), (r'^search-post/$', search2.search_post), )
http://192.168.45.3:8000/search-post/~~number=plural Доступ Результаты следующим образом:
После завершения приведенных выше примеров, наша структура каталогов:
HelloWorld |-- HelloWorld | |-- __init__.py | |-- __init__.pyc | |-- models.pyc | |-- search.py | |-- search.pyc | |-- search2.py | |-- search2.pyc | |-- settings.py | |-- settings.pyc | |-- testdb.py | |-- testdb.pyc | |-- urls.py | |-- urls.pyc | |-- view.py | |-- view.pyc | |-- wsgi.py | `-- wsgi.pyc |-- TestModel | |-- __init__.py | |-- __init__.pyc | |-- admin.py | |-- models.py | |-- models.pyc | |-- tests.py | `-- views.py |-- manage.py `-- templates |-- base |-- hello |-- post `-- search_form 3 directories, 29 files
Каждая функция зрения первый аргумент является объектом HttpRequest, чуть ниже функции приветствия ():
from django.http import HttpResponse def hello(request): return HttpResponse("Hello world")
HttpRequest объект содержит некоторую информацию о текущем URL запроса:
свойство | описание |
путь | Полный путь к запрашиваемой странице, не включая доменное имя - например, "/ привет /". |
метод | Метод Строка HTTP используется в представлении запроса. Она представляет все заглавные буквы. Например: если request.method == 'GET': |
GET | Он содержит все HTTP GET параметры словаря-подобный объект. См QueryDict документацию. |
POST | Он содержит все параметры HTTP POST словарь-подобный объект. См QueryDict документацию. Запрос POST Ситуация Сервер получает пустой также возможно. Другими словами, форма форма для отправки запроса с помощью метода HTTP POST, но не может сформировать данные. Таким образом, данное утверждение не может быть использована, если request.POST, чтобы определить, следует ли использовать метод HTTP POST, вы должны использовать, если request.method == "POST" (см этот атрибут таблицы методов). Примечание: POST не содержит информацию файлов загрузки. См свойствах файлов. |
ЗАПРОС | Для удобства, это свойство представляет собой набор POST и GET атрибут, но есть особенность, проверка POST первое свойство, а затем посмотреть GET атрибут. Справочник РНР $ _REQUEST. Например, если вы GET = { "имя": "John"} и POST = { "возраст": '34'}, то запрос [ "название"] значение "джон", [ "возраст"] значение запроса является "34." Настоятельно рекомендуется использовать GET и POST, так как эти два атрибута более явным, написано проще код, чтобы понять. |
ПЕЧЕНЬЕ | Все куки содержат стандартный Python объект словаря. Ключи и значения являются строками. Обратитесь к Главе 12, есть более подробное объяснение о печенье. |
ФАЙЛЫ | Словарь-подобный объект, содержащий все загруженные файлы. . ФАЙЛЫ Каждая клавиша <тип = имя входного "Файл" = "" /> Значение атрибута имя тега ПОДАЕТ каждое значение также стандартный словарь Python объект, который содержит следующие три клавиши:
Примечание: Только метод запроса POST, и запрос страницы <форма> имеет ENCTYPE = "многокомпонентные / form-данные" атрибут только файлы имеют данные. В противном случае, файлов пустой словарь. |
META | Содержит все доступные словарь HTTP-заголовки. Например:
META эти заголовки приставкой HTTP_ наиболее Key, например:
|
пользователь | Django.contrib.auth.models.User является объектом, который представляет пользователя, вошедшего в систему. Если доступ пользователь в настоящее время не вошли в систему, пользователь должен будет инициализировать экземпляр django.contrib.auth.models.AnonymousUser. Вы можете быть идентифицированы с помощью метода is_authenticated пользователя () пользователя регистрируется: if request.user.is_authenticated(): # Do something for logged-in users. else: # Do something for anonymous users. Джанго активируется только тогда, когда AuthenticationMiddleware Свойство доступно |
сессия | Только записываемый свойство, которое представляет текущую сессию объекта словаря. Джанго активируется только тогда, когда сеанс поддерживается свойство доступно. Обратитесь к Главе 12. |
raw_post_data | Исходные данные HTTP POST, а не разобрано. Будьте полезны при доочистке. |
Запрос объекта также имеет некоторые полезные методы:
способ | описание |
---|---|
__getitem __ (ключ) | Возвращает ключи GET / POST, сначала принять POST, после приема GET. Если ключ не существует броска KeyError. Это то, что мы можем использовать словарь синтаксис для доступа HttpRequest объект. Например, запрос [ "Foo"] эквивалентно первому request.POST [ "Foo"], то request.GET [ "Foo"] операции. |
has_key () | Проверьте request.GET или параметр request.POST указывает, следует ли включать ключ. |
get_full_path () | Возвращенный запрос путь содержит строку запроса. Например, "/ музыка / группы / the_beatles /? Печать = истина" |
is_secure () | Если запрос является безопасным, возвращает истину, то есть свет, излучаемый является HTTPS запросы. |
В HttpRequest объект, GET и POST атрибуты являются экземплярами класса django.http.QueryDict.
QueryDict подобный пользовательский словарь класс для обработки случай многозначного соответствующей одинарной связью.
QueryDict реализовать все стандартные методы словаря. Способ также включает в себя конкретные:
способ | описание |
---|---|
__getitem__ | Стандартный словарь процесс немного отличается, то есть, если соответствующее число значение ключа, __ GetItem __ () возвращает последнее значение. |
__setitem__ | Установка параметра определяет значение списка ключа (список Python). Примечание: Это можно назвать только (копия через копии () генерируется объект QueryDict) на изменяемый объект QueryDict. |
получить () | Если ключ, соответствующий множеству значения, получаем () возвращает последнее значение. |
обновление () | Параметры могут быть QueryDict, это может быть стандартный словарь. Различные стандартный метод словаря обновления и метод добавления словаря элементов, а не заменять их: >>> q = QueryDict('a=1') >>> q = q.copy() # to make it mutable >>> q.update({'a': '2'}) >>> q.getlist('a') ['1', '2'] >>> q['a'] # returns the last ['2'] |
(пункты) | Есть стандартные словарные статьи () метод немного отличается, метод использует однозначную логики __getitem __ (): >>> q = QueryDict('a=1&a=2&a=3') >>> q.items() [('a', '3')] |
(значения) | Стандартные значения словаря () метод немного отличается, метод использует однозначную логики __getitem __ (): |
Кроме того, QueryDict есть некоторые методы, в следующей таблице:
способ | описание |
---|---|
копия () | Возвращает копию объекта, внутреннюю реализацию в Python стандартной библиотеки copy.deepcopy (). Эта копия является изменяемым (сменная) - то есть, вы можете изменить значение копии. |
GetList (ключ) | Все параметры и возвращать значения соответствующего ключа, так как список Python вернулся. Если ключ не существует, то он возвращает пустой список. Это гарантированно возвращает список какой-то ru |
сетлист (ключ, list_) | Установите значение ключа list_ (в отличие от __setitem __ ()). |
appendlist (ключ, пункт) | Добавьте элемент к ключу и связанного с ним внутреннего списка. |
setlistdefault (ключ, список) | И SetDefault немного по-другому, она принимает список, а не одно значение в качестве аргумента. |
(списки) | А предметы () немного отличается, он будет возвращать все ключевые ценности, как список, например: >>> q = QueryDict('a=1&a=2&a=3') >>> q.lists() [('a', ['1', '2', '3'])] |
UrlEncode () | Возвращает строку, отформатированную для выполнения формат строки запроса (например, "а = 2 & Ъ = 3 & Ь = 5"). |