django框架第二弹,一起来学习视图和模板吧!!!
探究视图
视图负责处理用户请求和生成相应的响应内容,然后再页面中显示
构建网页内容
1.响应类型
视图函数return具有多种响应类型
响应类型 | 说明 |
---|---|
HttpResponse(‘Hello world’) | HTTP状态码200,请求已成功被服务器接收 |
HttpResponseBadRequest(‘BadRequest’) | HTTP状态码400,访问的页面不存在或者请求错 |
HttpResponseForbidden(‘NotFound’) | HTTP状态码404,网页不存在或网页的URL失效 |
HttpResponseForbidden(‘NotFound’) | HTTP状态码403,没有访问权限 |
HttpResponseNotAllowed(‘NotAllowed Get’) | HTTP状态码405,不允许使用该请求方式 |
HttpResponseServrError(‘ServerError’) | HTTP状态码500, 服务器内容错误 |
响应类型是服务器告诉客户端当前网页请求发生了什么,其属于django.http模板,该模板可以用于实现文件下载
2.生成html网页
django.http模板可以通过render()函数跳转生成html文件
1 | render(request, template_name, context = None, content_type = None, status = None, using = None) |
参数说明
相关参数 | 介绍 |
---|---|
request | 浏览器向服务器发送的请求对象(不用修改) |
template_ name | HTML 模板文件名 |
context | 对HTML模板的变量赋值,以字典格式表示,默认情况下是一个空字典 |
content_ type | 一般情况使用默认值,不用修改 |
status | HTTP状态码,默认为200,可以指向404页面 |
using | 设置HTML模板转换生成HTML网页的模板引擎 |
3.案例
在app目录下创建templates存放html模板,static存放html的静态资源
编写urls.py生成URL信息
1 | from django.urls import path,re_path #引入re_path功能模板 |
编写视图函数生成html网页
1 | from django.shortcuts import render #引用render模板 |
数据可视化
视图的功能:
- 接收用户请求和返回响应内容
- 与模型(Model) 实现数据交互(操作数据库)
- 视图相当于一个处理中心,负责接收用户请求,然后根据请求信息读取并处理后台数据,最后生成HTML网页返回给用户。
该部分的内容涉及到数据库,详细的内容会在下一篇文章介绍
1.创建数据库
视图操作数据库实质是从models.py导入数据库映射对象
(1)在app的models.py文件编写,将Product类和数据表Product构成映射关系
1 | from django.db import models |
(2)在Navicat for MySQL工具,先新建数据库,再到setting.py文件设置数据库连接信息
1 | DATABASES = { |
(3)上述代码只构成了两者间的关系,在数据库中并没有生成相应数据表
生成用于创建数据表的文件(在项目下调用)
1 | python manage.py makemigrations |
该指令用于生成index定义的模型生成0001_initial.py文件,形成生成数据表的脚本代码
1 | python manage.py migrate |
该指令根据脚本代码在目标数据库生成对应数据表(要重新连接刷新数据库)
实现效果如下(要打开mysql服务才能成功连接)
其中的index_product对应的就是我们自己在models.py中定义的Product类,通过Navicat工具在其中添加数据,如图
2.视图函数处理
视图函数将数据与模板连接,实现数据可视化
1 | from django.shortcuts import render #引用render模板 |
3.使用模板插入数据
模板与标签的内容下一篇文章再细讲
在html插入动态数据
1 |
|
4.总结
实现数据可视的步骤:
- 定义数据模型
- 在视图导入模型所定义的类(数据表对象)
- 视图函数再获取数据后,将数据传递给html模板
获取请求信息
视图是用于接收并处理用户请求信息,并且信息储存在参数request中
1.常用属性
最重要的是GET,POST和method三个
2.实例
编写url.py路径
1 | from django.urls import path |
编写视图函数
1 | from django.shortcuts import HttpResponse #引用render模板 |
- 首先使用method对用户的请求方式进行判断,一般来说用户访问某个URL地址都是GET,输入信息和点击按钮是POST
- 判断后,用GET或POST的方式获取请求参数
- http:/ /127.0.0.1 : 8000/ login. html ?name=Tom 中GET的请求参数以?为标识,等号前为参数名,等号后为参数值
通用视图
Django可以通过通用视图快速完成数据视图的开发,它是通过定义和声明类的形式实现的
类 | 用途 |
---|---|
TemplateView | 返回HTML模板 |
ListView | 将数据库的数据传递给HTML模板,通常获取某个表的所有数据 |
DetailView | 将数据库的数据传递给HTML模板,通常获取数据表的单条数据 |
深入模板
django作为web框架,可以使用模板去动态生成HTML网页。django的模板语言有其内置的DTL和最流行的Jinja2,以下主要介绍的是内置的模板语言DTL
变量与标签
1.Django内置标签
标签 | 介绍 |
---|---|
name是变量名,用于插入变量数据,可以是字符串型和整型 | |
{% for %}` | 遍历输出变量的内容,变量类型多为列表 |
| `{% if %}` | 对变量进行条件判断 |
| `{% csrf_ _token %}` | 用于防护跨站请求伪造攻击 |
| `{% url %}` | 引用路由配置的地址,生成相应的URL地址 |
| `{% static %}` | 读取静态资源的文件内容 |
| `{% extends xxx %}` | 模板继承,xxx为模板文件名,使当前模板继承xxx模板 |
| `{% block xxx %}` | 重写父类模板的代码 |
注意`{% for %}`要用`{% endfor %} ,{% if %}`要用`{% endif %} 结束 |
2.for标签变量
为了方便for的索引,模板还提供一些特殊的变量来获取for标签循环的信息,把for做出数组的效果方便读取信息
变量 | 描述 |
---|---|
forloop.counter | 获取当前循环的索引(即第几个数据),从1开始计算 |
forloop.counter() | 获取当前循环的索引,从0开始计算 |
forloop.revcounter | 索引从最大数开始递减,直到索引到1位置 |
forloop.revcounter() | 索引从最大数开始递减,直到索引到0位置 |
forloop.first | 当遍历的元素为第一项时为真 |
forloop.last | 当遍历的元素为最后一-项时为真 |
模板继承
即存在一个html文件的内容,可以在其他html中共用(如header和footer这些)
使用方法很简单:
- 在index.html中使用
{% extends "base.html" %}
来继承base.html的代码 {% block body %}`在继承模板的基础上实现自定义模板内容 - `{% endblock %}
结束block标签
相当于在共用模板中插入{% block body %}`与`{% endblock %}
间的内容
过滤器
过滤器是对变量内容进行处理,把变量的数据格式与内容转化成我们想要的效果,其使用方法为
1 | {{variable|filter}} |
过滤器处理变量variable,Django中有许多内置的过滤器