Django学习笔记2:处理表单
1.HTTP请求
HTTP协议以"请求-回复"的方式工作。
客户发送请求时,可以在请求中附加数据。服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务。
(1)GET方法
在项目中HelloWorld/HelloWorld下创建一个 search.py 文件,用于接收用户的请求
1 from django.http import HttpResponse 2 from django.shortcuts import render_to_response 3 4 # 表单 5 def search_form(request): 6 return render_to_response('search_form.html') 7 8 # 接收请求数据 9 def search(request): 10 request.encoding='utf-8' 11 if 'q' in request.GET: 12 message = '你搜索的内容为:' + request.GET['q'] 13 else: 14 message = '你提交了空表单' 15 return HttpResponse(message)
在模板目录 templates 中添加 search_form.html 表单
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>runoob.com</title> 6 </head> 7 <body> 8 <form action="/search" method="get"> 9 <input type="text" name="q"> 10 <input type="submit" value="搜索"> 11 </form> 12 </body> 13 </html>
urls.py 规则修改为如下形式
1 from django.conf.urls import url 2 from . import view, search, search2 3 4 # 匹配模式 统一资源定位 5 urlpatterns = [ 6 # url(r'^$', view.hello) 7 url(r'^hello$', view.hello), 8 url(r'^search-form$', search.search_form), 9 url(r'^search$', search.search), 10 url(r'^search-post$', search2.search_post) 11 ] 12 # 正则表达式 ^$表示匹配一行的首和尾
访问地址 http://127.0.0.1:8000/search-form 或是http://localhost:8000/search-form并搜索
注:传不上图片啊
(2)POST方法
上面使用了GET方法。视图显示和请求处理分成两个函数处理。
提交数据时更常用POST方法。下面使用该方法,并用一个URL和处理函数,同时显示视图和处理请求。
在tmplate 创建 post.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>runoob.com</title> 6 </head> 7 <body> 8 <form action="/search-post" method="post"> 9 {% csrf_token %} 10 <input type="text" name="q"> 11 <input type="submit" value="Submit"> 12 </form> 13 14 <p>{{ rlt }}</p> 15 </body> 16 </html>
在模板的末尾,增加一个 rlt 记号,为表格处理结果预留位置。
表格后面还有一个{% csrf_token %}的标签。
csrf 全称是 Cross Site Request Forgery。
这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。
在HelloWorld目录下新建 search2.py 文件并使用 search_post 函数来处理 POST 请求
1 from django.shortcuts import render 2 from django.views.decorators import csrf 3 4 # 接收POST请求数据 5 def search_post(request): 6 ctx = {} 7 if request.POST: 8 ctx['rlt'] = request.POST['q'] 9 return render(request, "post.html", ctx)
urls.py 规则修改为如下形式
1 from django.conf.urls import url 2 from . import view, search, search2 3 4 # 匹配模式 统一资源定位 5 urlpatterns = [ 6 # url(r'^$', view.hello) 7 url(r'^hello$', view.hello), 8 url(r'^search-form$', search.search_form), 9 url(r'^search$', search.search), 10 url(r'^search-post$', search2.search_post) 11 ] 12 # 正则表达式 ^$表示匹配一行的首和尾
访问 http://localhost:8000/search-post 显示结果
注:此次图片无法上传
2. Requset对象
更多与HttpRequest对象的信息参看 http://www.runoob.com/django/django-form.html