Django 请求和响应

一、HTTP 协议的请求和响应:

1、定义:请求是指浏览器端通过 HTTP 协议发送给服务器端的数据; 响应是指服务器端接受到请求后做相应的处理后再回复给浏览器端的数据

2、请求:根据 HTTP 标准,HTTP 请求可以使用多种请求方式

  • HTTP1.0 定义了三种请求方式:GETPOST,和 HEAD 方法(最常用)
  • HTTP1.1 新增 5 种请求方式:OPTIONSPUTDELETETARACECONNECT 方法
  • GET:请求指定的页面信息,并返回实体主体
  • HEAD:类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
  • POST:向指定资源提交资源进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中,POST 请求可能会导致新的资源的建立和/或已有资源的修改
  • PUT:从客户端向服务器传送的数据取代指定的文档的内容
  • DELETE:请求服务器删除指定的页面
  • CONNECT:HTTP/1.1 协议中预留给能够连接改为管道方式的代理服务器【翻墙时需用到】
  • OPTIONS:允许客户端查看服务器的性能
  • TRACE:回显服务器收到的请求,主要用于测试或诊断

3、Django 中的请求

  • 请求在 Django 实则就是 视图函数 中的第一个参数;即 HttpRequest 对象
  • Django 接收到 http 协议的请求后,会根据请求数据报文创建 HttpRequest 对象
  • `HttpRequest 对象通过属性描述了请求的所有相关信息
  • path_info: URL 字符串
  • method:字符串,表示 Http 请求方法;常用值:GETPOST
  • GETQueryDict 查询字典的对象,包含 get 请求方式的所有数据
  • POSTQueryDict 查询字典的对象,包含 post 请求方式的所有数据
  • FILES:类似于字典的对象,包含所有的上传文件信息
  • COOKIESPython 字典,包含所有的 cookie ,键和值都为 字符串
  • session: 类似于字典的对象,表示当前的会话
  • body:字符串,请求体的内容(POSTGET
  • scheme:请求协议(http / https
  • request.get_full_path():请求的完整路径
  • request.META:请求中的元数据(消息头);例:request.META['REMOTE_ADDR']:客户端 IP 地址

二、响应

1、响应状态码

  • HTTP Status Code
  • 200:请求成功
  • 301:永久重定向-资源(网页等)被永久转移到其他 URL
  • 302:临时重定向
  • 404:请求的资源(网页等)不存在
  • 500:内部服务器错误

2、响应对象

  • 构造函数格式: HttpResponse(content=响应体, content_type=响应体数据类型. 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 ,统一由视图函数接收请求,通过判断 request.method 区分具体的请求动作

1、GET 请求:

  • GET 请求动作,一般用于向服务器获取数据;若有数据传递给服务器,通常会用查询字符串(Query String) 传递【注意:不要传递敏感数据】;服务器端接收参数,获取客户端请求 GET 请求提交的数据

2、POST 请求:

  • 一般用于向服务器提交大量 / 隐私数据
  • 客户端通过表单等 POST 请求将数据传递给服务器端
  • 取消 csrf 验证,否则 Django 将会拒绝客户端发来的 POST 请求,报 403 错误;需要禁止 settings.pyMIDDLEWARE 中的 CsrfViewsMiddleWare 的中间件-'django.middleware.csrf.CsrfViewMiddleware'