模板
-
模板设置
在 settings.py 中 TEMPLATES
1. BACKEND:指定模板的引擎
2. DIRS:指定存放模板的目录们
DIRS : [os.path.join(BASE_DIR,‘template’)]
3. APP_DIRS:指定是否去应用中搜索模板目录
4. OPTIONS -
模板的加载方式
1. 使用 loaderfrom django.template imort loader
t = loader.get_template(‘模板名称’)
html = t.render()
return HttpResponse(html)- 使用 render()
from django.shortcuts import render
return render(request,‘xxx.html’,locals()) -
模板的语法
1. 变量
dic = {
"key1":"value1",
"key2":"value2",
}
return render(request,'xx.html',locals())
xx.html
{{key1}}
-
标签
1.{% if %} 2.{% for %} 内置变量:forloop forloop.counter forloop.counter0 3.{% extends %} 4.{% block %} 5.{% load %} 6.{% static %} 7.{% url %}
-
过滤器
{{变量|过滤器:“参数”}} -
静态文件
- 配置
settings.py中 配置:- STATIC_URL:静态文件访问路径
STATIC_URL = “/static/” - STATICFILES_DIRS:指定静态文件的存储目录
STATICFILES_DIRS = (os.path.join(BASE_DIR,‘static’),)
- STATIC_URL:静态文件访问路径
- 使用
- 使用 静态文件访问路径 进行访问
STATIC_URL = “/static/”
<\img src="/static/images/a.jpg">
<\img src=“http://127.0.0.1/static/images/a.jpg”> - 使用 {% static %} 标签
{% load static %}
<\img src="{% static ‘images/a.jpg’ %}">
- 使用 静态文件访问路径 进行访问
- 配置
-
模板的继承
- 在父模板中
{% block xxx %} … {% endblock %} - 在子模板中
- {% extends ‘父模板名称’ %}
- {% block xxx %} … {% endblock %}
- 在父模板中
-
url name 参数
- url(regex,views,name=“别名”)
- 使用别名
{% url ‘别名’ %}
{% url ‘别名’ ‘参数’ ‘参数’ %}
================================================
-
模型 - Models
- ORM框架
ORM : Object Relationship Mapping
对象 关系 映射
- 三大特征:
- 表 到 类的映射
- 数据类型的映射
- 关系映射
- 创建 和 配置数据库
-
创建数据库
create database webdb default charset utf8 collate utf8_general_ci; -
数据库的配置
在 settings.py 中
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),
}
}- ENGINE
指定数据库的引擎,mysql引擎如下:
‘django.db.backends.mysql’ - NAME
指定要连接的数据库的名称
‘NAME’:‘webdb’ - USER
指定登录到数据库的用户名
‘USER’:‘root’ - PASSWORD
指定登录到数据库的密码
‘PASSWORD’:‘123456’ - HOST
指定要连接的主机
‘HOST’:‘localhost’ - PORT
指定要连接的主机上的端口号
‘PORT’:‘3306’
- ENGINE
-
- 数据库的迁移
- 编写Models
- Models的语法规范
语法:
class CLASSNAME(models.Model):
NAME=models.FIELD_TYPE(FIELD_OPTIONS)-
CLASSNAME
实体类名,表名组成一部分
默认表名组成规范:
应用名称_classname -
NAME
属性名,映射回数据库就是字段名 -
FIELD_TYPE
字段类型:映射到表中的字段的类型-
BooleanField()
编程语言中:使用True或False来表示值
在数据库中:使用1或0来表示具体的值
数据库类型:tinyint -
CharField()
数据库类型:varchar
注意:
必须要指定max_length参数值 -
DateField()
作用:表示日期
编程语言中:使用字符串来表示具体值
数据库类型:date -
DateTimeField()
作用:表示日期和时间
数据库类型:datetime -
DecimalField()
编程语言中:使用小数表示该列的值
在数据库中:使用小数
数据库类型:decimal
示例:money=models.DecimalField( max_digits=7, decimal_places=2 )
-
FloatField()
编程语言中和数据库中都使用小数表示值
数据库类型:float -
EmailField()
编程语言和数据库中使用字符串
数据库类型:varchar -
IntegerField()
编程语言和数据库中使用整数
数据库类型:int -
URLField()
编程语言和数据库中使用字符串
数据库类型:varchar -
ImageField()
作用:在数据库中为了保存图片的路径
编程语言和数据库中使用字符串
示例:
image=models.ImageField(
upload_to=“static/images”
)upload_to:指定图片的上传路径 在后台上传时会自动的将文件保存在指定的目录下
-
TextField()
作用:表示大量数据
编程语言和数据库中使用字符串
数据库类型:text
-
-
FIELD_OPTIONS
字段选项,指定创建的列的额外的信息
允许出现多个字段选项,多个选项之间使用,隔开- primary_key
如果设置为True,表示该列为主键 - null
如果设置为True,表示该列值允许为空
默认为False - default
设置所在列的默认值 - db_index
如果设置为True,表示为该列增加索引 - unique
如果设置为True,表示该列的值唯一 - db_column
指定列的名称,如果不指定的话则采用属性名作为列名
ex:
创建一个属性,表示用户名称,长度30个字符,必须是唯一的,不能为空,添加索引name=models.CharField(max_length=30,unique=True,null=False,db_index=True)
- 练习:
在 index 应用中追缴两个model类- Author - 作者
1.name - 姓名,非空,唯一,加索引
2.age - 年龄,非空
3.email - 邮箱,允许为空 - Book - 图书
1.title - 书名,非空,唯一,加索引
2.publicate_date - 出版时间,非空,加索引
- Author - 作者
- primary_key
-
- Models的语法规范
- 相关指令
- 数据的CRUD
-
增加数据
-
Entry.objects.create(属性=值,属性=值)
返回值:返回创建好的实体对象 -
创建Entry对象,并调用 save() 进行保存
obj = Entry(属性=值,属性=值)
obj.属性=值
obj.save()
无返回值,保存成功后,obj会被重新赋值 -
使用字典创建对象,并调用save()进行保存
dic = {
‘属性1’:‘值’,
‘属性2’:‘值2’,
}obj = Entry(**dic)
obj.save()
- 练习:
使用以上三种方式,分别向Book和Publisher表中各增加三条数据
-
-
查询数据
通过 Entry.objects 属性 调用查询接口
Entry.objects.all()
Entry.objects.get()
Entry.objects.filter()
… …- 基本查询操作
方法:all()
用法:Entry.objects.all()
作用:查询Entry实体中所有的数据
select * from xxx
返回值:QuerySet - 查询返回指定列
方法:values(‘列1’,‘列2’)
用法:Entry.objects.values(…)
作用:查询部分列的数据并返回
select 列1,列2 from xxx
返回值:QuerySet
会将查询出来的数据封装到字典中,再封装到列表中 - 查询返回指定列
方法:values_list(‘列1’,‘列2’)
用法:Entry.objects.values_list(…)
返回值:QuerySet
会将查询出来的数据封装到元组中,再封装到列表中 - 排序查询
方法:order_by
用法:Entry.objects.order_by(’-列’,‘列’)
说明:
默认是按照升序排序,降序排序则需要在列前增加’-'表示
- 基本查询操作
-
- ORM框架