============================ 请求和响应对象 ============================ .. module:: django.http :synopsis: Classes dealing with HTTP requests and responses. 概述 ============== Django使用Request对象和Response对象在系统间传递状态. 当请求一个页面时, Django会创建一个包含请求元数据的 :class:`HttpRequest` 对象. 然后加载相应的视图, 将 :class:`HttpRequest` 作为视图函数的第一个参数传入. 视图函数负责返回一个 :class:`HttpResponse` 对象. 本文档对 :class:`HttpRequest` 和 :class:`HttpResponse` 对象的API进行说明, 这些API定义在 :mod:`django.http` 模块中. ``HttpRequest`` 对象 ======================= .. class:: HttpRequest .. _httprequest-attributes: 属性 ---------- 除非另有说明, 否则所有属性都应视为只读. .. attribute:: HttpRequest.scheme 代表请求协议的字符串 (通常是 ``http`` 或 ``https``). .. attribute:: HttpRequest.body 表示原始HTTP请求正文的字节字符串. 它对处理非HTML表单数据非常有用: 二进制图片, XML等. 如果要处理常规表单数据, 请使用 ``HttpRequest.POST``. 还可以使用类似文件的接口从HttpRequest读取数据. 详见 :meth:`HttpRequest.read()`. .. attribute:: HttpRequest.path 请求页面完整路径, 不包括scheme和domain. 例如: ``"/music/bands/the_beatles/"`` .. attribute:: HttpRequest.path_info 在某些Web服务器配置下, 主机名后的URL被分成脚本前缀部分和路径信息部分. ``path_info`` 属性始终会包含路径信息部分, 不论使用什么Web服务器, 使用它代替 :attr:`~HttpRequest.path` 可以使代码在测试和开发环境中更好地切换. 例如, 如果应用的 ``WSGIScriptAlias`` 设置为 ``"/minfo"``, ``path`` 是 ``"/minfo/music/bands/the_beatles/"`` 时 ``path_info`` 是 ``"/music/bands/the_beatles/"``. .. attribute:: HttpRequest.method 一个字符串, 表示请求使用的HTTP方法. 大些字母形式. 例如:: if request.method == 'GET': do_something() elif request.method == 'POST': do_something_else() .. attribute:: HttpRequest.encoding 一个字符串, 表示提交的数据的编码(如果为 ``None``, 表示使用 :setting:`DEFAULT_CHARSET` 设置). 可以修改这个属性值来改变访问表单数据使用的编码. 修改后的属性访问(从 ``GET`` 或 ``POST`` 读取)都将使用新的 ``encoding`` 值. 这对于访问数据不是 :setting:`DEFAULT_CHARSET` 编码时非常有用. .. attribute:: HttpRequest.content_type .. versionadded:: 1.10 从 ``CONTENT_TYPE`` 请求头中解析到的MIME类型字符串. .. attribute:: HttpRequest.content_params .. versionadded:: 1.10 ``CONTENT_TYPE`` 请求头中的键值参数字典. .. attribute:: HttpRequest.GET 包含所有HTTP GET请求参数的类字典对象. 详见 :class:`QueryDict`. .. attribute:: HttpRequest.POST 包含所有HTTP POST请求参数的类字典对象, 前提是请求包含了表单数据. 详见 :class:`QueryDict`. 如果需要访问post提交的原始或非表单数据, 可以使用 :attr:`HttpRequest.body` 属性. 有可能会有POST请求但是 ``POST`` 为空字典的情况 -- 比如, 不包含表单数据的POST请求. 因此, 不要使用 ``if request.POST`` 来判断是否为POST请求; 应该使用 ``if request.method == "POST"`` (见上文). 注意: ``POST`` **不** 包含文件上传信息. 见 ``FILES``. .. attribute:: HttpRequest.COOKIES 包含所有cookie的Python字典. 键和值都是字符串. .. attribute:: HttpRequest.FILES 包含所有上传文件的类字典对象. ``FILES`` 中的键为 ```` 中的 ``name``. ``FILES`` 中的值是一个 :class:`~django.core.files.uploadedfile.UploadedFile` 对象. 详见 :doc:`/topics/files`. 注意, 只有 ``