笔记参考Django菜鸟教程
Day06 Django表单
HTML表单是网站交互性的经典方式。
本次内容学习Django如何对用户提交的表单数据进行处理。
1. HTTP请求
HTTP协议以“请求-回复”的方式工作
2. GET方法
在模板目录templates中添加search_form.html表单:
我们在之前的项目中创建一个search.py文件,用于接收用户的请求:
# -*-coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render_to_response
#表单
def search_form(request):
returnrender_to_respoonse(‘search_form.html’)
#接受请求数据
def search(request):
request.enconding=’utf-8’
if ‘q’ inrequest.GET:
message=’你搜索的内容为:’+request.GET[‘q’]
else:
message=你提交了空表单’
return HttpResponse(message)
修改urls.py如下:
from django.conf urls import url
from .import view,testdb,search
urlpatterns=[
url(r’^hello$’,view.hello),
url(r’^testdb$’,testdb.testdb),
url(r’^search-form$’,search.search-form),
url(r’^search$’, search.search),
]
访问地址 http://127.0.0.1:8000/search-form 并搜索,结果如下所示
3.post方法
上面我们使用的是GET方法。视图显示和请求处理分成两个函数处理。
提交数据的时候更常用的是POST方法。
接下来我们使用该方法,并用一个URL和处理函数,同时显示视图和处理请求。
我们在tmplate中创建post.html,代码如下
{{ rlt }}
接下来我们在HelloWorld目录下新建search2.py文件并使用search_post函数处理POST请求。代码如下:
# -*-coding: utf-8 -*-
fromdjango.shortcuts import render
fromdjango.views.decorators import csrf
# 接收POST请求数据
defsearch_post(request):
ctx ={}
if request.POST:
ctx['rlt'] = request.POST['q']
return render(request,"post.html", ctx)
接下来修改urls.py如下
fromdjango.conf.urls import url
from .import view,testdb,search,search2
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
url(r'^search-form$', search.search_form),
url(r'^search$', search.search),
url(r'^search-post$', search2.search_post),
]
然后访问http://127.0.0.1:8000/search-post显示如下结果:
4.Request对象
每个view函数的第一个参数是HttpRequest对象,就像下边这个hello( ) 函数:
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
HttpRequest对象包含当前请求URL的一些信息:
path:请求页面的全路径,不包含域名,例如。“/hello/”
method:请求中使用的HTTP方法的字符串表示。
GET:包含所有HTTP GET参数的类字典对象。
POST:包含所有HTTPPOST参数的类字典对象。
REQUEST:POST和GET属性的集合,一般不使用。
COOKIES:包含所有cookies的标准Python字典对象。
FIELS:包含所有上传文件的类字典对象。
META:包含所有可用HTTP头部信息的字典。
user:是一个django.contrib.auth.models.User对象,代表当前登录的用户。
session:唯一可读写的属性,代表当前会话的字典对象。
raw_post_data:原始HTTPPOST数据,未解析过。
Request对象也有一些有用的方法:
_getitem_(key):返回GET/POST的键值,先取POST后取GET,如果键不存在抛出 KeyError。
has_key() :检查request.GETor request.POST中是否包含参数指定的Key。
get_full_path():返回包含查询字符串的请求路径。
is_secure():如果请求是安全的,返回True,就是说,发出的是HTTPS请求。
4.QueryDict对象
在HttpRequest对象中,GET和POST属性是django.http.QueryDict类的实例。
QueryDict类似字典的自定义类,用来处理单键对应多值的情况。
QueryDict实现所有标准的词典方法。还包括一些特有的方法:参照
http://www.runoob.com/django/django-form.html