django 表单的提交

get和post的区别



GET 方法

在之前的项目中创建一个 search.py 文件,用于接收用户的请求:

/HelloWorld/HelloWorld/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.html ' ) # 接收请求数据 def search ( request ) : request . encoding = ' utf-8 ' if ' q ' in request . GET : message = ' 你搜索的内容为: ' + request . GET [ ' q ' ] else : message = ' 你提交了空表单 ' return HttpResponse ( message )

在模板目录 templates 中添加 search_form.html 表单:

/HelloWorld/templates/search_form.html 文件代码:

< ! DOCTYPE html > < html > < head > < meta charset = " utf-8 " > < title > 菜鸟教程(runoob.com) </ title > </ head > < body > < form action = " /search " method = " get " > < input type = " text " name = " q " > < input type = " submit " value = " 搜索 " > </ form > </ body > </ html >

urls.py 规则修改为如下形式:

/HelloWorld/HelloWorld/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 ) , ]



POST 方法

上面我们使用了GET方法。视图显示和请求处理分成两个函数处理。

提交数据时更常用POST方法。我们下面使用该方法,并用一个URL和处理函数,同时显示视图和处理请求。

我们在 templates 创建 post.html:

/HelloWorld/templates/post.html 文件代码:

< ! DOCTYPE html > < html > < head > < meta charset = " utf-8 " > < title > 菜鸟教程(runoob.com) </ 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。这是Django提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。

在HelloWorld目录下新建 search2.py 文件并使用 search_post 函数来处理 POST 请求:

/HelloWorld/HelloWorld/search2.py 文件代码:

# -*- coding: utf-8 -*- from django . shortcuts import render from django . views . decorators import csrf # 接收POST请求数据 def search_post ( request ) : ctx ={} if request . POST : ctx [ ' rlt ' ] = request . POST [ ' q ' ] return render ( request , " post.html " , ctx )

urls.py 规则修改为如下形式:

/HelloWorld/HelloWorld/urls.py 文件代码:

from django . 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 ) , ]

猜你喜欢

转载自blog.csdn.net/zhangyu4863/article/details/80189302