12月6日学习内容整理:模版语言补充,model模型
补充:
render(request,模版对象(模版文件),context对象也叫上下文对象)
当要传递的mob模版变量很多时我们一个个的写会比较麻烦,所以可以用locals()代替,这个方法就会帮我们把上下文出现的所有变量都传递给模版,那么就要求模版中的变量名和传递的变量名要保持一致
python的datetime模块:日期模块
t=datetime.datetime.now() 输出2013-12-23 6:54:34.123213 这样的日期形式
t是一个对象,可以用句点符来引用属性和方法
t.year t.month t.day t.date 分别输出2017(年) 12(月) 6(日) 2017-12-06
一、模版语法补充:
1、过滤器
{{ 变量名|过滤器名:参数 }}
(1)加法过滤器:| add:5 传递的变量+5后的值
(2)日期:| date:"Y-m-d" 指定格式
(3)长度:| length
(4)设置默认值,内容为空时提示用户:| default="xxxxx"
(5)文件大小:| filesizeformat 字节到MB的自动转换
(6)切片:| slice :"2:4" 索引切片
(7)长字符串的摘要截取: 结尾自动添加...
| truncatechars:20 前20个字符
| truncatewords:8 前8个单词
(8)| safe 前端在渲染时就不会当作字符串处理,会以html形式渲染,一般的网站都会对特殊字符进行替换以防止加载时页面出现问题(比如js代码之类的尖角符等),我们加了safe过滤器后前端就会认为这是安全的,就会按照html形式渲染了
2、模版标签
昨天说了模版变量{{}},{% %}这样形式的就是模版标签
(1)with:用一个简单的变量名代替一个复杂的变量名,比如变量名2是一个对象经过几个句点符调用的属性或方法,那么用一个简单的变量名1代替它,写起来就会比较简单
{% with 变量名1=变量名2 %}
{% endwith %}
(2){% csrf_token %} 防止跨域请求的
实际上请求经过wsgi传给Django的路由系统之前还会经过Django的中间件进行检测,csrf就是其中之一,主要用来检测跨域请求,为了防止恶意网站向我的服务端以POST请求提交数据从而在我的网页上显示恶意信息或者窃取别的信息,所以要在安全的POST请求中加入一个可以用来验证的字段
模版文件中加入这个标签,渲染时就会生成一个隐藏的input标签,name属性值是固定的,value是随机字符串,相当于给POST请求提交数据时加了一个身份证,后端接受POST请求时会验证这个身份证,如果name属性和value对应就代表是安全的,没有就代表是危险的,会抛出forbidden异常,只针对POST请求
补充:json序列化后字符串中的键必须是双引号才是json格式的字符串,别的语言才能够进行反序列化,否则是无法反序列化的
3、继承
子板中{{ black.super }} 就是继承母板中对应盒子的内容,这样我们就可以在母板原有内容的基础上进行扩充
二、model模型
就是用来和数据库做交互,利用Django的ORM框架,简单的说就是实现了python语法中不出现SQL语法,不用我们自己去写原生SQL语句
1、映射关系
python的类名对应的SQL语句的表名
python的类属性对应的SQL语句的表名下的字段
python的类属性的约束对应的SQL语句的表名下的字段类型
python的类的实例对象对应的SQL语句的表中的一条记录
2、如何创建一个表:在对应app文件夹中的models.py文件中
class Student(models.Model): 类名就是表名,继承就代表交给ORM框架处理
类属性名就是字段名
nid=models.AutoField(primary_key=True) # 主键约束 代表自增字段的数字类型,参数设置为主键
name=models.CharField(max_length=32) # 字符串字段 代表数据库中的字符串类型,参数设置存储宽度为32字节,这个参数必须写
birth=models.DateField() # 日期类型 代表数据库中的日期类型
class_id=models.IntegerField(default=0) 新增字段直接在类中写新的字段就可以了,代表数据库中的数字类型,给原有记录中 没有该字段的设置默认值
3、如何执行创建表的操作
Django的cmd目录下:
python manage.py makemigrations
python manage.py migrate
4、如何添加一条记录:在视图函数中,views.py文件中的函数
之前的映射关系以及说过,实例对象就代表一条记录,那具体的字段值就写在参数中,字段名=字段值
s=Student(name="yuan",birth="2012-12-12",class_id=3)
s.save() # 保存到数据库
5、查看ORM形成的SQL语句
需要在配置信息文件中添加日志logging的配置
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } }