3.模版
MVT中的T,template
3.0拓展
问:模版3D渲染的阶段是在服务端进行的,或是在手机客户端进行的?
答:网络服务器。
过程:
手机客户端浏览/use_template/,网络服务器启用相应的主视图涵数,开展网站模板的3D渲染,给模版文档传送自变量,将模版文档中的变量值开展更换,获得更换以后的html內容,将更换以后的html內容返还给手机客户端,回到3D渲染以后的整洁的html网页页面,手机客户端仅仅表明。
web网站开发设计的有两种玩法:
1)前后左右端不分离出来:前面见到的结果是由后面开展操纵的。
2)静态页面:后面只回到前面需要的数据信息,对于数据信息如何展现,由前面自身操纵。
3.1模版的功效
3D渲染造成html网页页面內容,开展数据展示
3.2模版的应用
flask中:
render_template('模版文件夹名称',=,.....)
Django中:
1.设定模版文件目录
在项目中建立模版文件目录templates。在settings.py环境变量中改动TEMPLATES配备项的DIRS值:
'DIRS': [os.path.join(BASE_DIR, 'templates')], # 这里改动
2.render(request,'模版文件夹名称',<词典>)
render回到的是一个相应的目标。
render 实际上就是就是下边模版的具体流程的一个缩写封裝。
3.3模版的具体流程(关键把握)
如果我们不愿回到回应目标,仅仅想3D渲染一下网页页面,更换数据信息,那麼我们可以按下边的来。
大家应用建筑模板的具体流程:
1.载入模版:特定应用模版文档,获得模版目标
from django.template import loader
temp = loader.get_template('模版文件夹名称')
2.模版3D渲染:给模版文档传送自变量,将模版文档中的变量值开展更换,获得更换以后的html內容
res_html = temp.render(词典)
3.建立回应目标
return HttpResponse(res_html)
3.4模版英语的语法(掌握)
3.4.1模版自变量
用户标识符务必由英文字母.数据.下横线(不可以以下横线开始)和点构成。
英语的语法如下所示:{{自变量}}
模版自变量能够使python的内建种类,还可以是目标。
django中的模版自变量不可以开展计算。
3.4.2模版句子
1)for循环:
2)if标准:
3)较为操作符如下所示:
4)布尔运算符如下所示:
留意:操作符上下两边不可以紧靠自变量或变量定义,务必有空格符。
3.4.3过滤装置
英语的语法如下所示:
应用管路标记|来运用过滤装置,用以开展测算.变换实际操作,能够运用在自变量.标识中。
假如过滤装置*须 主要参数,则应用灶具:传送主要参数。
自变量|过滤装置:主要参数
例举好多个如下所示:
safe,禁止使用转义,告知模版这一自变量是安全可靠的,能够表述实行
length,长短,回到字符串包含标识符的数量,或目录.元组.词典的原素数量。
default,初始值,假如自变量不会有的时候回到初始值。
data|default:'初始值'
date,日期,用以对日期种类的值开展字符串数组恢复出厂设置,常见的恢复出厂设置标识符如下所示:
Y表明年,文件格式为4位,y表明俩位的年。
m表明月,文件格式为01,02,12等。
d表明日, 文件格式为01,02等。
j表明日,文件格式为1,2等。
H表明时,24进制,h表明12进制的时。
i表明分,为0-59。
s表明秒,为0-59。
value|date:"Y年m月j日 H时i分s秒"
3.4.4注解
1)单行注解英语的语法如下所示:
{#...#}
2)几行注解应用comment标识,英语的语法如下所示:
1{% comment %}
2...
3{% endcomment %}
3.4.5模版承继
模版承继和类的承继含意是一样的,主要是为了能增强编码器重,缓解开发者的劳动量。
父模版
假如发觉在好几个模版中一些內容同样,那么就要把这些內容界定到父模版中。
标识block:用来在父模版中预埋地区,交给子模版添充差异的內容,名称不可以同样。为了更好地更快的易读性,提议给endblock标识写上名称,这一名称与相应的block名称同样。父模版中也能够应用前后文中传送来的数据信息。
1{% block 名字 %}
2预埋地区,能够撰写默认设置內容,还可以沒有默认设置內容
3{% endblock 名字 %}
子模版
标识extends:承继,写在子模版文档的**行。
{% extends "父模版途径"%}
子模板无需添充父模板中的全部预埋地区,假如子模板沒有添充,则应用父模板界定的初始值。
添充父模版中特定名字的预埋地区。
1{% block 名字 %}
2具体添充內容
3{{ block.super }}用以获得父模版中block的內容
4{% endblock 名字 %}
3.4.6Django和Flask模版的差别
1.模版自变量
a)Django应用模版自变量的情况下,不论是词典.目录或元组的原素,都*须应用.不可以应用[],词典是.key,元组和目录是.index字符;这也是和flask有差异的地区。
b)Django中的模版自变量不可以同时开展算术运算
2.模版操纵句子:标准分辨和for循环
a)标准分辨:Django模版中在开展标准分辨情况下,较为运算符两侧需要有空格符
b)for循环:Django模版中的for循环和jinja2模版中for循环比照。
3.模版过滤装置
a) jinja2模版过滤装置应用:
{{ 模版自变量 | 过滤装置(主要参数...)}}
b) Django中模版过滤装置的应用:
{{ 模版自变量 | 过滤装置:主要参数 }}
留意:Django中过滤装置:号以后只有接受一个主要参数
4.数据库查询
ORM架构:
功效:将实体模型类和数据分析表开展相匹配,根据面向对象编程的方法开展数据库查询的实际操作。
flask中SQLALchemy
Django中内置ORM架构,能够同时开展应用。
4.1数据库查询连接配备
flask中:
SQLALCHEMY_DATABASE_URI = 'mysql://:@:/'
Django中:
1.pip install pymysql
2.setting里边的DATABASES里边实现数据库查询配备
3.初次运作时*须 在新项目同名的的文件目录下._init._.py里边加上几句话
import pymysql导进
pymysql.install_as_MySQLdb()启用方式
sqlite是中小型的数据库查询,用在手机里,默认设置的是它。我们可以选择大家的要求改成mysql。
4.2界定实体模型类
1)flask界定实体模型类:
2)Django中概念实体模型类
数据删除的情况下,有一种逻辑性删掉:就是否真真正正的删掉,只是做一个删掉的标识,例如加一个字段名,0表明删掉,1表明没删掉,随后展现的情况下依据标识展现,也做到了删掉的目地。
Django中的id不用界定,默认设置为大家使用了id,是外键约束,而且自提高。id能够应用pk替代(primary key)
界定列名的情况下,不允许应用持续的下横线。
字段名种类
选择项
外键约束
在设定外键约束时,*须 根据on_delete选择项指出主表删掉信息时,针对外键约束引入表数据信息如何处理,在django.db.models中包括了可选择变量定义:
CASCADE 联级,删掉主表数据信息时连接一起删掉外键约束表中数据
PROTECT 维护,根据抛出去ProtectedError出现异常,来阻拦删掉主表中被外键约束运用的数据信息
SET_NULL 设定为NULL,仅在该字段名null=True容许为null时可以用
4.3转移转化成数据分析表
flask中:
安裝拓展flask-migrate
python manage.py db init转化成转移文件夹名称
python manage.py db migrate 转化成转移文档
python manage.py db upgrade 转移
Django中:
不用创建文件夹
1.转化成转移文档
python manage.py makemigrations
2.转移转化成表
python manage.py migrate
mysql数据库查询中:
desc 表名;查询表结构
在大家转移的情况下,Django的子运用会默认设置为大家建立一些表,
4.4演试专用工具应用
4.4.1shell专用工具
Django的manage专用工具带来了shell命令,协助大家配备好当今工程项目的软件环境(如联接好数据库查询等),便于能够立即在终端设备中实行检测python句子。
根据如下所示指令进到shell
python manage.py shell
随后导进大家的实体模型类
from booktest.models import BookInfo, HeroInfo
4.4.2查询MySQL数据库查询日志
查询mysql数据库查询日志能够查询对数据库查询的操作记录。 mysql日志文档默认设置沒有造成,*须 做如下所示配备:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
把68,69行前边的#除去,随后储存并应用如下所示指令重新启动mysql服务项目。
sudo service mysql restart
应用如下所示指令开启mysql日志文档。
4.5根据实体模型类和对象开展数据信息实际操作(增删)
4.5.1增加
1.建立实体模型类目标,目标.save()
留意:加上HeroInfo时,能够给hbook取值,还可以立即表格中hbook_id取值
2.实体模型类.objects.create(...)
4.5.2改动
1. 查看目标->改动目标特性->目标.save()
改动实体模型类目标的特性,随后实行save()方式
1hero = HeroInfo.objects.get(hname='猪八戒') 2hero.hname = '猪悟能' 3hero.save()
2. 实体模型类.objects.filter(...).update(...)
应用实体模型类.objects.filter().update(),会回到受影响的个数
1HeroInfo.objects.filter(hname='沙悟净').update(hname='沙悟净')
4.5.3删掉
1.查看目标->目标.delete()
实体模型类目标delete
1hero = HeroInfo.objects.get(id=13) 2hero.delete()
2.实体模型类.objects.filter(...).delete()
实体模型类.objects.filter().delete()
1HeroInfo.objects.filter(id=14).delete()