图片、视频、css、js等文件都叫静态文件
STATIC_URL = '/static/'
。若url中存在/static/,默认走静态文件路径,不需要视图函数处理。STATICFILES_DIRS = [ BASE_DIR / "static", '/var/www/static/', ]
动态文件的加载:
<img src="/static/image/girl.jpg" width="300px" height="400px">
{% load static %}
<img src="{% static 'image/girl.jpg' %}" width="300px" height="400px">
是Django项目中的一个独立的业务模块,包含属于自己的路由、视图、模板、模型。
python manage.py startapp music
INSTALLED_APPS = ['xxx','music']
当应用创建好后,每个应用都是一个小MTV。
语法:include('app名字.url模块名')
作用:将当前路由转到各个应用的路由配置文件的utlpatterns进行分布式处理
from django.urls import path,include
from . import views
urlpatterns = [
path('music/',include('music.urls'))
]
手动创建urls.py,内容结构同主路由完全一样
from django.urls import path
from . import views
urlpatterns=[
# http://127.0.0.1:8000/music/index
path('index',views.index_view)
]
'APP_DIRS':True
注:若外层(主文件)有同名模板,django优先选择外层的;
注:若同层(应用)有同名模板,按注册顺序逐层查找。(解决方式如下图)
django.db.backends.mysql
ORM(Object Relational Mapping)即对象关系映射,它允许你使用类和对象对数据库进行操作,而不用使用SQL语句。
1、创建并注册应用
2、在应用文件夹下的models.py中编写模型类代码
from django.db import models
class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)
from django.db import models
# Create your models here.
class Book(models.Model):
title = models.CharField('书名',max_length=50,default='')
price = models.DecimalField('价格',max_digits=7,decimal_places=2)
3、数据库的迁移
迁移是Django同步对模型所做的**更改到数据库(增加字段、删除模型等)**模式的方式。
Django第一次配置 MySQL时,报错django.core.exceptions.ImproperlyConfigured:
Error loading MySQLdb module. Did you install mysqlclient?
http://t.zoukankan.com/jiaoyang77-p-9333424.html
https://www.cnblogs.com/jiaoyang77/p/9333424.html
python manage.py makemigrations
将应用下的models.py文件生成一个中间文件,并保存在migrations文件夹中。python manage.py migrate
执行迁移程序实现迁移。将每个应用下的migrations目录中的中间文件同步回数据库。运行结束后,mysql会在同名数据库中生成一个“应用名_类名”的数据表,并自动生成一个id主键。
数据库类型 | 字段类型 | 备注 |
---|---|---|
tinyint(1) | BooleanField() | 1/0(True/False) |
varchar | CharField() | 必须指定max_length参数值 |
date | DateField() | 参数auto_now=True(保存对象时的时间)、auto_now_add=True(第一次创建时的时间)、default=‘2019-6-1’(默认时间)三选一 |
datetime | DateTimeField() | 更精确的时间,参数同上 |
double | FloatField() | 小数 |
decimal(x,y) | DecimalField() | 参数max_digits(位数总数,包括小数点后的位数)和decimal_places(小数点后的位数) |
varchar | EmailField() | 专门存储邮箱的类型,会自动检查格式 |
int | IntegerField() | 整数 |
varchar | ImageField() | 图片路径 |
longtext | TextField() | 不定长的字符数据 |
int | IntegerField() | 整数 |
参数名 | 解析 |
---|---|
primary_key | 如果设置为True,数据表不会创建id字段 |
blank | 主要控制管理后台使用,如果设置为True,字段可以为空;设置为False,字段必须填写 |
null | 如果设置为True,表示该列值允许为空,与mysql的null同义 |
default | 设置默认值 |
db_index | 如果设置为True,表示为该列增加索引 |
unique | 如果设置为True,表示该字段在数据库中的值必须是唯一的 |
db_column | 指定列的名称,如果不指定则采用属性名作为列名 |
verbose_name | 设置此字段在admin界面上的显示名称 |
from django.db import models
class Book(models.Model):
title = models.CharField('书名',max_length=50,default='')
class Meta:
db_table = 'book' # 可改变当前模型类对应的表名,以前的名是"应用名_类名"
每个继承自models.Model的模型类都会有一个objects对象被继承下来,这个对象叫管理器对象,即
创建数据方案1:
直接用objects创建,返回创建好的实体对象,但不成功会报错。
MyModel.objects.create(属性1=值1,属性2=值2,...)
创建数据方案二:
创建MyModel的实例对象,并调用save()进行保存。
obj = MyModel(属性=值,属性=值)
obj.属性 = 值
obj.save()