天天看点

python_fullstack—Django框架(六)-Django ViewDjango View

Django View

Django Request and response objects

一、概览

  • Django使用请求Request和响应Response来给整个系统传递状态
  • 当用户请求一个页面时,Django创建一个包含元数据和请求内容的HttpRequest对象。然后Django加载适当的视图,HttpRequest对象作为视图函数的第一个参数,每个视图负责返回一个HttpResponse对象。

二、HttpRequest 对象

1、属性

  • HttpRequest.scheme
    • 返回请求协议的名称,通常是http或是https
  • HttpRequest.body
    • 返回字节格式的原始HTTP请求内容,通常用于二进制图像、XML等格式的文件
  • HttpRequest.path
    • 返回请求的全路径,例如

      "/music/bands/the_beatles/"

  • HttpRequest.method
    • 返回请求调用的HTTP方法,通常是’GET’或是’POST’
  • HttpRequest.GET
    • 包含所有给定HTTP GET参数的类似字典的对象。
  • HttpRequest.POST
    • 接收表单提交的数据,返回一个类似字典的对象,包含所有给定的HTTP POST参数。
  • HttpRequest.COOKIES
    • 包含所有COOKIES的字典,键和值是字符串。
  • HttpRequest.FILES
    • 包含所有上传文件的类似字典的对象。文件中的每一个键都是

      <input type="file" name="" />

      的名称,文件中的每个值是一个uploadedFile。
  • HttpRequest.META
    • 包含所有可用的HTTP头的字典,通常包含以下内容:
    CONTENT_LENGTH – 请求体的长度(以字符串形式返回)
    CONTENT_TYPE – 请求体的 MIME 类型
    HTTP_ACCEPT – 响应可以接收的文本类型
    HTTP_ACCEPT_ENCODING – 响应可以接收的编码方式
    HTTP_ACCEPT_LANGUAGE – 响应可以接收的语言
    HTTP_HOST – 客户端发来的HTTP主机头
    HTTP_REFERER – 返回引用页
    HTTP_USER_AGENT – 客户端的用户代理(字符串格式)
    QUERY_STRING – 查询字符串,作为独立的(解析)字符串
    REMOTE_ADDR – 客户端IP地址
    REMOTE_HOST – 客户端主机名
    REMOTE_USER – 由Web服务器验证的用户
    REQUEST_METHOD – 返回请求方法的字符串,例如"GET"或者"POST".
    SERVER_NAME – 服务端主机名
    SERVER_PORT – 服务端端口(字符串格式)
               
  • 其他不常用的属性
    • HttpRequest.path_info
    • HttpRequest.encoding
    • HttpRequest.content_type
    • HttpRequest.content_params
    • HttpRequest.resolver_match

2、由application设置的属性

  • HttpRequest.current_app
    • 该属性的值将作为url模板标签reverse()方法的参数,并用于当前的app
  • HttpRequest.urlconf
    • 它将覆盖ROOT_URLCONF的设置,同时作为根URLConf映射用于当前的请求

3、由middleware设置的属性

  • HttpRequest.session
    • 来自于 CurrentSiteMiddleware:可读可写,表示当前session,是一个类似于字典的对象
  • HttpRequest.site
    • 来自于 CurrentSiteMiddleware:get_current_site()的返回值,表示当前站点,通常是Site或者是RequestSite的对象
  • HttpRequest.user
    • 来自于AuthenticationMiddleware:一个AUTH_USER_MODEL对象,表示当前登录的用户,如果用户未登录则会被默认为 AnonymousUser(匿名用户)

4、方法

  • HttpRequest.get_host()[source]
    • 返回从HTTP_X_FORWARDED_HOST和HTTP_HOST的信息头获取信息的请求源主机
  • HttpRequest.get_port()[source]
    • 返回从HTTP_X_FORWARDED_PORT和SERVER_PORT的元变量中获取到的请求源端口
  • HttpRequest.get_full_path()[source]
    • 返回路径,包括追加的查询字符串,例如

      Example: "/music/bands/the_beatles/?print=true"

  • 其他不常用方法
    • HttpRequest.build_absolute_uri(location)[source]
    • HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt=”, max_age=None)[source]
    • HttpRequest.is_secure()[source]
    • HttpRequest.is_ajax()[source]
    • HttpRequest.read(size=None)[source]
    • HttpRequest.readline()[source]
    • HttpRequest.readlines()[source]
    • HttpRequest.xreadlines()[source]
    • HttpRequest.__iter__()

三、QueryDict 对象

1、概述

对HttpRequest对象而言,GET和POST是django.http.QueryDict的实例,django.http.QueryDict的实例是用于处理相同key下包含多个values的定制类,它的意义在于有一些HTML表单元素,特别是类似于

<select multiple>

这种便签就是典型的同一个key传递多个values的情况

2、方法

  • QueryDict.__init__(query_string=None, mutable=False, encoding=None)[source]
    • 基于query_string实例化QueryDict对象
  • QueryDict.__getitem__(key)
    • 返回给定key的value。如果key有多个values值,则返回最后一个value。如果key不存在则抛出django.utils.datastructures.MultiValueDictKeyError的异常
  • QueryDict.__setitem__(key, value)[source]
    • 将给定的key赋值
  • QueryDict.__contains__(key)
    • 如果给定的key设置了响应的value则返回True
  • QueryDict.get(key, default=None)
    • 用法类似于__getitem__(),区别在于如果给定的key不存在则返回default设置的value,而不会抛出异常
  • QueryDict.setdefault(key, default=None)[source]
    • 类似于Python中字典数据类型的dict.setdefault()方法,区别在于其内部实际调用了__setitem__()方法
  • QueryDict.update(other_dict)
    • 参数要求是一个QueryDict或者是dictionary,类似于python中字典数据类型的dict.update(),区别在于是将值追加在后面,而不是取代原值。
  • QueryDict.items()
  • QueryDict.iteritems()
  • QueryDict.iterlists()
  • QueryDict.values()
  • QueryDict.itervalues()
  • QueryDict.copy()[source]
  • QueryDict.getlist(key, default=None)
  • QueryDict.setlist(key, list_)[source]
  • QueryDict.appendlist(key, item)[source]
  • QueryDict.setlistdefault(key, default_list=None)[source]
  • QueryDict.lists()
  • QueryDict.pop(key)[source]
  • QueryDict.popitem()[source]
  • QueryDict.dict()
  • QueryDict.urlencode(safe=None)[source]

四、HttpResponse 对象

1、用法

  • Passing strings
  • Passing iterators
  • Setting header fields
  • Telling the browser to treat the response as a file attachment

2、属性

3、方法

4、HttpResponse 子类

五、JsonResponse 对象

1、用法

  • Serializing non-dictionary objects
  • Changing the default JSON encoder

六、StreamingHttpResponse 对象

1、属性

七、FileResponse 对象

八、官方链接

https://docs.djangoproject.com/en/1.11/ref/request-response/