请求及响应
Django中的请求
请求在Django中实则就是 视图函数的第一个参数request,即 HttpRequest对象
Django接收到http协议的请求后,会根据请求数据报文创建HttpRequest对象
HttpRequest对象 通过属性描述了请求的所有相关信息
request.xxx
path_info: URL字符串
method :字符串,表示HTTP请求方法,常用值:'GET'、'POST'
GET:QueryDict查询字典的对象,包含GET请求方式的所有数据
POST:QueryDict查询字典的对象,包含POST请求方式的所有数据
FILES:类似于字典的对象,包含所有的上传文件信息
COOKIES:python字典,包含所有的cookies,键和值都为字符串
session:类似于字典的对象,表示当前的会话
body:字符串,请求体的内容(POST或PUT)
scheme:请求协议('http/https')
request.get_full_path():请求的完整路径
request.META:请求中的元数据(消息头)
request.META['REMOTE_ADDR']:客户端的IP地址
#http://127.0.0.1:8000/test_request?a=1&b=1 print('!path info is',request.path_info) print('!method is ',request.method) print('!querystring is',request.GET) print('!full path is',request.get_full_path()) !path info is /test_request !method is GET !querystring is <QueryDict: {'a': ['1'], 'b': ['1']}> !full path is /test_request?a=1&b=1
Django中的响应
响应状态码
- 200 - 请求成功
- 301 - 永久重定向-资源(网页等)被永久转移
- 302 - 临时重定向
- 404 - 请求的资源(网页等)不存在
- 500 - 内部服务器错误
Django中的响应对象
构造函数格式:
HttpResponse(content=响应体,content_type=响应体数据类型(默认为html),status=状态码(默认为200))
作用:
向客户端浏览器返回响应,同时携带响应体内容
常用的Content-Type:
'text/html' 默认,html文件
'text/plain' 纯文本
'text/css' css文件
'text/javascript' js文件
'multipart/form-data' 文件提交
'application/json' json传输
'application/xml' xml文件
HttpResponse子类
from django.http import HttpResponsexxx
例:
def test_request(request): print('!path info is',request.path_info) print('!method is ',request.method) print('!querystring is',request.GET) print('!full path is',request.get_full_path()) return HttpResponseRedirect('/page/1')
当访问 http://localhost/test_request 时,会跳转到 http://localhost/page/1
GET和POST请求
无论是GET还是POST,通以都由视图函数接受请求,通过判断 request.method
区分具体的请求动作
- 样例
if request.method == 'GET': 处理GET请求时的业务逻辑 elif request.method == 'POST': 处理POST请求的业务逻辑 else: 其他请求业务逻辑
GET处理
GET请求动作,一般用于向服务器获取数据
能够产生GET请求的场景
浏览器地址栏中输入URL,回车后
<a href="地址?参数=值&参数=值">
from表单中的method为GET
方法
request.GET['参数名'] .GET是一个 QueryDict
request.GET.get('参数名','默认值') 返回某个参数的值,若此参数不存在 则返回一个默认值
request.GET.getlist('参数名') 获取某个参数的所有值 返回值是一个列表
POST处理
POST 一般用于向服务器提交大量/隐私数据
客户端通过**表单(form)**等POST请求将数据传递给服务器端
服务器端接收参数:
通过 request.method 来判断请求是否是 POST
使用POST方式接收客户端数据
取消CSRF验证,否则Django会拒绝客户端发来的POST请求,报错403
settings.py 中 取消CSRF验证
Django处理 GET 请求
✔️查询字符串 - 少量数据传递(切记不能传输敏感数据)
Django处理 POST 请求
✔️ 专用于浏览器提交数据