学习笔记-Python-Django-视图

# view视图
# 1、视图概述
- 视图即视图函数,接受web请求并返回web响应的事物处理函数
- 响应指符合http协议要求的任何内容,包括json、string、html等
- 本章忽略事物处理,重点在如何返回处理结果上
# 2、其他简单视图
- django.http给我们提供很多和HttpResponse类似的简单视图
- Http404为Exception子类,所以需要raise使用,方法raise Http404,直接引发404异常
# 3、HttpResponse详解
- 方法
- init:实例化HttpResponse对象
- write(content):以文件的方式写
- flush():以文件的方式输出缓存区
- set_cookie(key, value='', max_age=None, expires=None):设置Cookie
- key, value都是字符串类型
- max_age是一个整数,表示在指定秒数后过期,生命周期
- expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期
- max_age和expires用时二选一
- 如果不指定过期时间,则两个星期后过期
- delete_cookie(key):删除指定key的Cookie,如果key不存在则什么也不发生

# 4、HttpResponseRedirect
- 重定向,服务器跳转
- 构造函数的第一个参数用来指向重定向的地址

# 5、Request对象
- Request介绍
- 服务器接收http协议的请求后,会根据报文在中间层创建HttpRequest对象
- 视图函数的第一个参数是HttpRequest对象
- 在django.http模块中定义了HttpRequest对象的API
- 属性
- 下面除非特别说明,否则属性都是只读的
- path:一个字符串,表示请求的页面的完整路径,不包含域名
- method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'
- encoding:一个字符串,表示提交数据的编码方式
- 如果为None则表示使用浏览器的默认设置,一般为utf-8
- 这个属性时可写的,可以通过修来它来修改访问表单数据使用的编码
- GET:一个类似于字典的对象,包含get请求方式的所有参数,直接访问key,如果没有会报错,要用get去访问
- POST:一个类似于字典的对象,包含post请求方式的所有参数
- FILES:一个类似于字典的对象,包含所有的上传文件
- COOKIES:一个标准的python字典,包含所有的cookie,键和值都为字符串
- session:一个既可读又可写的类似于字典的对象,表示当前的会话
- 只有当Django启用会话的支持才可用
- 详细内容见"状态保持"
- 方法
- is_ajax():如果请求时通过XMLHttpRequest发起的,则返回True
- QueryDict对象
- 定义在django.http.QueryDict
- request对象的属性GET、POST都是QueryDict类型的对象
- 与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况
- 方法get():根据键获取值
- 只能获取键的一个值
- 如果一个键同时拥有多个值,获取最后一个值
- 方法getlist():根据键获取值
- 将键的值以列表返回,可以获取一个键的多个值
- GET属性
- QueryDict类型的对象
- 包含get请求方式的所有参数
- 与url请求地址中的参数对应,位于?后面
- 参数的格式是键值对,如key1=value1
- 多个参数之间,使用&链接,如key1=value1&key2=value2
- 键是开发人员定下来的,值是可变的
- 案例/views/v8_get

- POST属性
- QueryDict类型的对象
- 包含post请求方式的所有参数
- 与from表单中的控件对应
- 表单中控件必须有name属性,name为键,value为值
- checkbox多选框存在一键多值的问题
- 键是开发人员定下来的,值是可变的
- 案例/views/v9_post

 

 

# 手动编写视图
- 实验目的:
- 利用django快捷函数手动编写视图处理函数
- 编写过程中理解视图运行原理
- 分析:
- django把所有请求信息封装入request
- django通过urls模块把相应请求跟事件处理函数关联起来,并把request作为参数传入
- 在相应的处理函数中,我们需要完成两部分
- 业务处理
- 把结果封装并返回,我们可以使用简单HttpResponse,同样也可以使用它的子类
- 本案例不介绍业务处理,把目光集中在如何渲染结果并返回
- render(request, template_name[, context][, context_instance][, content_type])
- 使用模板和一个给定的上下文环境,返回一个渲染的HttpResponse
- request:django的传入请求
- template_name:模板名称
- context_instance:上下文环境
- 案例teacher_app/views/render_test
- render_to_response
    - 根据给定的上下文字典格式的内容渲染给定模板,返回渲染后的HttpResponse

 

 

# 系统内建视图  
- 系统内建视图,可以直接使用
- 404
- default.page_not_found(request, template_name='404.html')
- 系统引发Http404时触发
- setting.py里设置DEBUG=True则不会调用404,取而代之的是调试信息
- 404视图会被传递一个RequestContext对象并且可以访问模板上下文处理器提供的变量
- 500(server error)
- defaults.server_error(request, template_name='500.html')
- 需要设置DEBGU=False,否则不会调用
- 403(HTTP Forbidden)视图
- defaults.permission_denied(request, template_name='403.html')
- 通过PermissionDenied触发
- 400(bad request)视图
- defaults.bad_request(request, template_name='400.html')
- DEBUG=False


原文地址:https://www.cnblogs.com/Cloudloong/p/10103678.html