Django 学习实践(四)

Django 表单

HTML表单是网站交互性的经典方式。

1 HTTP 请求

HTTP协议以"请求-回复"的方式工作。客户发送请求时,可以在请求中附加数据。服务器通过解析请求,就可以获得客户传来的数据,并根据URL来提供特定的服务。

1.1 GET 方法

我们在之前的HelloWorld项目中(里面的一个)创建一个 search.py 文件,用于接收用户的请求:

# -*- coding: utf-8 -*-

from django.http import HttpResponse
from django.shortcuts import render

#表单
def search_form(request):
	return render(request,'search_form.html')

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

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

<html>
 <head>
		<meta charset="utf-8" />
	    <title>Search-w3cschool.cn</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.urls import path
from . import views,testdb,search,search2

urlpatterns = [
	path('hello/',views.hello,name='hello'),
	path('testdb/',testdb.testdb,name='testdb'),
	path('search/',search.search),
	path('search_form/',search.search_form),   
]

启动项目,访问地址:http://localhost:8000/search-form/并搜索,结果如下所示:
在这里插入图片描述
在这里插入图片描述

1.2 POST 方法

上面我们使用了GET方法。视图显示和请求处理分成两个函数处理。
提交数据时更常用POST方法。我们下面使用该方法,并用一个URL和处理函数,同时显示视图和处理请求。
我们在tmplate 创建 post.html:

<html>
	<head>
		<meta charset="utf-8" />
		<title>Search-w3cschool.cn</title>
	</head>
	<body>
		<form action="/search_post/" method="post">
			{% csrf_token %}
			<input type="text" name="q">
			<input type="submit" value="Search">
		</form>
		<p>{{ rlt }}</p>
	</body>
</html>

在模板的末尾,我们增加一个rlt记号,为表格处理结果预留位置。
表格后面还有一个{% csrf_token %}的标签。csrf全称是Cross Site Request Forgery。这是Django提供的防止伪装提交请求的功能。POST方法提交的表格,必须有此标签。
在HelloWorld目录下新建 search2.py 文件并使用 search_post 函数来处理 POST 请求:

# -*- coding: utf-8 -*-

from django.shortcuts import render
from django.template.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_form.html",ctx)

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

from django.urls import path
from . import views,testdb,search,search2

urlpatterns = [
	path('hello/',views.hello,name='hello'),
	path('testdb/',testdb.testdb,name='testdb'),
	path('search/',search.search),
	path('search_form/',search.search_form),
	path('search_post/',search2.search_post),


]

启动项目,访问地址:http://localhost:8000/search-post/并搜索,结果如下所示:
在这里插入图片描述
在这里插入图片描述

2 Request 对象、QueryDict对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值