[Django] Django(七) HttpRequest和HttpResponse

时间:2022-12-01 20:23:26

概述

在Django中,使用HttpRequest和HttpResponse代表Http的请求和响应。在使用时,需要导入对应的包名:

from django.http request
rrom django.http response

HttpRequset

属性

HttpRequest.scheme:请求协议,http或https
HttpRequest.body:请求体,以byte字符串的形式
HttpRequest.path:请求页面的全路径,不包括协议和主体,如http://www.baidu.com/,则path为www.baidu.com
HttpRequest.path_info:在某些Web服务器配置下,主机名后的URL部分被分成脚本前缀script prefix部分和路径信息(path_inof)部分。 无论使用什么Web服务器,path_info属性始终包含路径的路径信息部分。 使用此代替path可以使您的代码更容易在测试和部署服务器之间移动。
HttpRequest.method:请求方法,全部大写,如GET、POST;
HttpRequest.encoding:解析form提交数据的编码,默认为DEFAULT_CHARSET的值
HttpRequest.GET:包含所有给定的HTTP GET参数的类似字典的对象(QueryDict对象);
HttpRequest.POST:包含所有给定的HTTP POST参数的类似字典的对象(QueryDict对象),前提是请求包含表单数据。
HttpRequest.content_type:请求中MIME类型字符串,从请求头CONTENT_TYPE中解析而来;
HttpRequest.content_params:以字典的形式包含请求头CONTENT_TYPE中的参数;
HttpRequest.COOKIES:以字典的形式包含所有的cookies;

FILES只会在POST请求中包含表单且form表单中有enctype=”multipart/form-data”时才会包含文件,其他情况下FILES为一个空字典。

HttpRequest.META:包含所有请求头的字典;
HttpRequest.resolver_match:表示解析的URL的ResolverMatch实例。 这个属性只在URL解析发生后才被设置,这意味着它可以在所有视图中使用,但不在中间件中可用,这些中间件在URL解析发生之前执行(可以在process_view()中使用它);

  • 由应用设置的属性,这些值Django中并没有设置,但是设置后依然可用:
    HttpRequest.current_app:
    HttpRequest.urlconf:
  • 由中间件设置的属性:
    一些包含在Django.contrib应用中的中间件会在请求时设置属性,
    HttpRequest.session:代表一个session对象;
    HttpRequest.site:代表当前地址;
    HttpRequest.user:代表当前登录的用户;

HttpResponse对象

表示Http请求的响应,创建的每个视图都应该返回HttpResponse实例。

常用用法

  • 1.在创建HttpResponse时可以传入一个字符串,作为响应内容,如:
from django.http import HttpResponse
response = HttpResponse("Hello Django")
  • 2.可以设置content_type响应头:
response = HttpResponse("Hello Django",content_type="text/plain")
  • 3.设置响应头:
response = HttpResponse()
response['Content-Disposition'] = 'attachment; filename="foo.xls"'

HttpResponse子类

Django中提供了不同的HttpResponse来处理Http响应,和HttpResponse使用方式一样,也位于django.http模块中。

HttpResponseBadRequest:返回400状态码;
HttpResponseNotFound:返回404状态码;
HttpResponseRedirect:返回302状态码;
JSONResponse:用于创建JSON编码的响应,构造方法如下:
JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs

有如下特点:

  • 1.Content-Type 请求头默认为application/json;
  • 2.创建JSONResponse时,第一个参数data必须是一个dict类型,如果safe=False,也也可以是任意的可json序列化的对象;
  • 3.encoder用于序列化数据;
  • 4.safe默认为True,此时如果data为非字典数据,则会抛出TypeError异常,如果safe=False,则任何对象都可以传入进行序列化。
StreamingHttpResponse:用于将响应传到浏览器,如果生成的响应和内存过大,则可以使用该类。

该类不是HttpResponse的子类

FileResponse:是StreamingHttpResponse的子类,针对二进制文件进行了优化,用法如下:
>>> from django.http import FileResponse
>>> response = FileResponse(open('myfile.png', 'rb'))

文件流将会自动关闭,因此不要使用context manager打开它