文章目录
概述-什么是请求及响应
浏览器(或者客户端)在访问网址的时候实际上是不断的与网页服务器后台进行数据通信,显而易见的是必然包含两个过程:
- 第一,浏览器向服务器发送数据,此即请求
- 第二,服务器接收请求后做相应处理后再返回给浏览器内容,此为响应
- 这些通信必须要有统一的规则,建立在一定的协议上,即http/https,为了数据安全https协议对传输数据进行了加密
请求
请求内容包含三部分:
- 1.起始行,请求方法(GET,POST等),路由地址,网络协议
- 2.头部(headers):键值对形式,包含host,user-agent,语言等
- 3.主体(body):提交的表单、用户名,密码等
- 请求方法
方法 | 作用 |
---|---|
GET | 浏览器请求指定页面信息,并返回网页主体 |
POST | 向服务器提交表单、上传文件等,可能会导致新的资源建立或者已有资源的修改 |
HEAD | 类似GET,只获得头部信息,常用于调试 |
PUT | 替换服务器指定文档内容 |
DELETE | 删除指定页面 |
- 在Django的使用
请求在Django中实际上是视图函数的第一个参数request
,即HttpRequest对象,常用request属性:
path_info: 请求路由地址
method: 请求方法
GET: QueryDict类查询字典,包含GET请求的所有数据
POST: QueryDict类查询字典,包含POST请求的所有数据
FILES: 类似字典对象,包含上传文件的信息
写在视图函数:
def home(r):
print('r.path_info is %s\nr.method is %s\n' % (r.path_info, r.method))
print('r.get is %s\n r.post is %s\nr.files is %s' %
(r.GET, r.POST, r.FILES))
print('r.cookies is %s \n r.sessions is %s\nr.scheme is %s\n r.body is %s' %
(r.COOKIES, r.session, r.scheme, r.body))
print('full path is %s\nip is %s' %
(r.get_full_path(), r.META['REMOTE_ADDR'])) # 获得完整请求路径以及浏览器ip
return HttpResponse('Test ok')
在浏览器输入http://127.0.0.1:8000/home?a=1&b=1
将在VS中端看到:
r.get is <QueryDict: {'a': ['1'], 'b': ['1']}>
r.post is <QueryDict: {}>
r.files is <MultiValueDict: {}>
r.cookies is {}
r.sessions is <django.contrib.sessions.backends.db.SessionStore object at 0x0000018C992A8700>
r.scheme is http
r.body is b''
full path is /home?a=1&b=1
ip is 127.0.0.1
[06/Jul/2021 11:26:01] "GET /home?a=1&b=1 HTTP/1.1" 200 7
响应
同样包含三部分,第一行包含协议,返回响应状态码,描述;头部包括时间、服务器信息等,主体则是
- 常见响应状态码
200,成功
301,永久重定向
302,临时重定向
404,访问资源不存在
500,服务器错误 - Django 响应对象HttpResponse
- 函数格式:HttpResponse(content = 响应体, content_type = 响应体类型, status = 状态码)
- content-type包含:
content_type | 描述 |
---|---|
text/html | 默认,html文件 |
text/plain | 纯文本文件 |
text/css | css文件 |
text/javascript | js文件 |
multipart/form-data | 文件提交 |
application/json | json文件 |
application/xml | xml文件 |
- 响应子类