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',
        },
    }
}

 

posted @ 2017-12-06 16:51  九二零  阅读(107)  评论(0编辑  收藏  举报