Django请求与响应
一、请求与响应
请求是指浏览器端通过HTTP协议发送给服务器端的数据
响应是指服务器端接收到请求后做相应的处理后再回复给浏览器端的数据
请求中的方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体 |
2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。 POST请求可能会导致新的资源的建立和或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1协议ф预留给能够 连接改为管i方 的代理服务器 |
7 | TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
8 | OPTIONS | 允许客户端查看服务器的性能 |
Django请求机制
请求在Django中实则就是视图函数的第一个参数,即HttpRequest对象
Django接收到http协议的请求后,会根据请求数据报文创建HttpRequest对象
HttpRequest对象通过属性描述了请求的所有相关信息
path_info:URL字符串
method:字符串,表示HTTP请求方法,常用值:’GET’、’POST’
‘GET’:QueryDict查询字典的对象,包含get请求方式的所有数据
‘POST’:QueryDict查询字典的对象,包含post请求方式的所有数据
‘FILES’:类似于字典的对象,包含所有的上传文件信息
COOKIES: Python字典,包含所有的 cookie,键和值都为字符串
session:似于字典的对象,表示当前的会话
body:字符串,请求体的内容(POST或PUT)
scheme:请求协议Chttp:/https)
request. get_full_path:请求的完整路径
request. META:请求中的元数据(消息头)
request. META[‘REMOTE_ADDR’]:客户端IP地址
响应
HTTP状态码的英文为HTTP Status Code,下面是常见的HTTP状态码:
200-请求成功
301-永久重定向-资源(网页等)被永久转移到其它URL
302-临时重定向
404-请求的资源(网页等)不存在
500-内部服务器错误
构造函数格式: HttpResponse(content=响应体, contenttype=响应体数据类型, status=状态码)作用:向客户端浏览器返回响应,同时携带响应体内容
常用的Content-Type如下:
‘text/html'(默认的,html文件)
‘text/plain'(纯文本)
‘text/css'(css文件)
‘text/javascript'(js文件)
‘multipart/form-data'(文件提交)
‘application/json’ (json传输)
‘application/xml'(xml文件)
HttpResponse子类
类型 | 作用 | 状态码 |
---|---|---|
HttpResponseRedirect | 重定向 | 302 |
HttpResponseNotModified | 未修改 | 304 |
HttpResponseBadRequest | 错误请求 | 400 |
HttpResponseNotFound | 没有对应的资源 | 404 |
HttpResponseForbidden | 请求被禁止 | 403 |
HttpResponseServerError | 服务器错误 | 500 |
二、GET与POST
views中使用request.method==“GET”/”POST”来判断请求类型
GET请求动作
GET请求动作,一般用于向服务器获取数据能够产生GET请求的场景:
浏览器地址中输入URL,回车后
<a href=”地址?参数=值&参数=值”>
form表单中的method为get
GET请求方式中,如果有数据需要传递给服务器,通常会用查询字符串(Query String)传递(注意:不要传递敏感数据] 因为会显示在地址栏
URL格式:xxx?参数名1=值1&参数名2=值2…
如:http://127.0.0.1:8000/page1?a=100&b=200
服务器端接收参数
获取客户端请求GET请求提交的数据,返回QueryDict()
request.GET['KEY']##没有直接报错
request.GET.get('key',default=)##会有默认值
request.GET.getlist('参数',default=)#如果key对应了很多参数只会返回最后一项,要取到所有的数据用getlist
POST请求动作
POST请求动作,一般用于向服务器提交大量/隐私数据数据
客户端通过表单等POST请求将数据传递给服务器端如
<form method='post' action="/login">//action为目标地址,post为方法
姓名: <Input type=text name=username>
<Input type='submit' value=登陆'>
</form>
使用post方式接收客户端数据
request. POST['参数名'] #request. POST绑定Querypict
request.POST.get('参数名,')
request.POST.getlist('参数名')
Comments NOTHING