4.视图和模板
4.1视图
4.1.1 什么是视图
- 视图通常是一个python函数,可以叫视图函数,或者简称视图,定义在 应用/views.py 文件中。
- 响应内容:一般是一个网页的HTML内容、一个重定向、错误信息页面、json格式的数据
- 类视图(了解,区别于函数视图),即把请求方法封装到一个类里
4.1.2 视图的作用
- 接收并处理请求,调用M和T,响应请求(返回HttpResponse或其子类)
- 每一个用户请求,都对应着一个视图(和url地址),由视图处理请求后,再返回html页面内容给浏览器显示
4.1.3URL配置
- 作用:建立url地址和视图函数的对应关系。当用户请求某个url地址时,让django能找到对应的视图函数进行处理。
- 定义完视图后,需要配置urlconf,否则无法处理请求
4.1.4URL配置规则
- 域名、端口、参数不参与匹配
- 先到项目下的urls.py进行匹配,再到应用的urls.py匹配
- 自上而下的匹配
- 匹配成功的url部分会去掉,剩下的部分继续作匹配
- 匹配不成功提示404错误
- 正则表达式 应使用 ^ 和 $ 严格匹配请求url的开头和结尾,以便匹配唯一的字符串
4.2HttpRequest对象
- HttpRequest对象由Django程序自动创建,请求报文自动被封装成HttpRequest对象,并传递给视图函数第一个参数。
4.2.1常用属性
4.2.2常用方法
4.2.3HttpRequest.user详解
- user只有当Django启用AuthenticationMiddleware中间件时才可用。
- 一个AUTH_USER_MODEL类型的对象,表示当前登录的用户。如果用户当前没有登录,user将设置为django.contrib.auth.models.AnonymousUser的一个实例,可以通过is_authenticated( )区分
- django.contrib.auth.models.AnonymousUser 类(匿名用户)实现了django.contrib.auth.models.User 接口,但具有下面几个不同点:
1> id永远为none
2> username永远为空字符串
3> get_username( )永远返回空字符串
4> is_staff和is_superuser永远为False
5> is_active永远为False
6> groups 和 user_permissions永远为空
7> is_anonymous( )返回True
8> is_authenticated( )返回False
9> sete_password( )、check_password( )、save( )和delete( )会触发NotImplementedError。
4.3HttpResponse对象
- HttpResponse对象由我们自己创建。每一个视图方法都应该返回一个HttpResponse对象。
4.3.1属性
4.3.2方法
4.3.3HttpResponse子类对象
HttpResponseRedirect
- 重定向,服务器端跳转
- 函数的第一个参数用来指定重定向的地址,可以是全路径、没有域名的绝对路径、相对路径
JsonResponse
- 用于创建Json格式的Response,
- 默认的Content-Type header 设置成application/json
- 默认只能传递字典类型,如果要传递非字典类型需要设置一下safe关键字参数。
StreamingHttpResponse
- 生成流数据,当生成Response需要花费太多时间或者大量内存时使用,比如生成大型csv文件
FileResponse
- 属于StreamingHttpResponse的子类,用于操作二进制文件
4.4其他方法
4.4.1 render方法
- render(request, template_name[, context])
- 结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象。
- request:用于生成响应的请求对象。
- template_name:要使用的模板的完整名称。
- context:添加到模板上下文的一个字典,默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
4.4.2 redirect 重定向方法
- redirect(to)
- 为传递进来的参数返回HttpResponseRedirect
- to推荐使用反向解析
4.5模板
4.5.1 什么是模版
- 模版是HTML页面,可以根据视图中传递的数据填充数据
- 模版目录在templates下
- 需要在settings.py下设置TEMPLATES值
4.5.2 模版访问视图
4.5.3 模版示例
index.html
detail.html
使用模版
编辑views.py文件,在方法中调用模版