超文本协议中总共四种数据交互方式:PUT、DELETE、POST、GET
对应数据处理的增、删、改、查
PUT、DELETE两种方式此处不做介绍
主要说下POST与GET,也就是改、查
如上述所言,POST与GET一个主要用于修改数据的场景,一个主要用于查询的场景。那么在功能以及权限上是有区分的,这里的区分将作用域实际Django代码中
在视图代码中加入下面代码,准备处理GET请求,由于前面讲过简单的GET的模板,这里就不用模板了。
def search_get(request):
request.encoding = 'utf-8'
if 'q' in request.GET and request.GET['q']:
message = '你搜索的内容为: ' + request.GET['q']
else:
message = '你提交了空表单'
return HttpResponse(message)
将search_get接口加入后端访问路径
path('search-get/', search.search_get),
很简单就能看出,这里先判断GET请求中是否存在字段‘q’, 存在的话将字段q读出来让http返回。
看下效果
以前说过GET的模板应用,这里说下POST的模板应用。
建立模板html代码
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>域中四大:天大,地大,道大,人亦大title>
head>
<body>
<form action="/search-post/" method="post">
{% csrf_token %}
<input type="text" name="q">
<input type="submit" value="搜索">
form>
<p>{{ last_input }}p>
body>
html>
再贴上处理POST请求的代码
def search_post(request):
input_text ={}
if request.POST:
print(request)
input_text['last_input'] = request.POST['q']
print(request.POST)
return render(request, "post_form.html", input_text)
之前说过,双大括号范围内的数据是用来留给render入参的。这里将POST的请求数据交给render的html入参。
还有个一指的注意东西:{% csrf_token %},这个是Django提供的防止伪装提交请求的功能。
写了几天的代码了,每个处理请求接口的函数中都会有一个request入参,这个入参是什么?下面介绍:
When a page is requested, Django creates an HttpRequest object that contains metadata about the request. Then Django loads the appropriate view, passing the HttpRequest as the first argument to the view function. Each view is responsible for returning an HttpResponse object.
大致翻译一下就是:
当一个页面被请求时,Django会创建一个包含请求元数据的HttpRequest对象。 然后Django加载相应的视图,将HttpRequest作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。
对了着重说下:所有属性值或者字段没有特殊说明,都是只读状态!
这个object中包含了哪些东西?