配置静态文件的访问路径
指定访问静态文件时是需要通过 /static/xxx 或 127.0.0.1:8000/static/xxx
xxx 表示具体的静态资源位置
配置静态文件的存储路径 STATICFILES_DIRS
示例:
# file: setting.py
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
使用静态文件的访问路径进行访问
<img src="/static/images/lena.jpg">
<img src="http://127.0.0.1:8000/static/images/lena.jpg">
通过 {% static %} 标签访问静态文件
{% load static %}
语法:
{% static '静态资源路径' %}
示例:
<img src="{% static 'images/lena.jpg' %}">
用 manage.py 中的子命令 startapp 创建应用文件夹:python3 manage.py startapp 应用名称
如:python3 manage.py startapp music
在 settings.py 里注册应用
INSTALLED_APPS = [
# ....
'user', #用户信息模块
'music', #音乐模块
]
migrations
文件夹 __init__.py
admin.py
apps.py
models.py
tests.py
views.py
urls.py
)可以不处理用户具体路由,主路由配置文件的可以做请求的分发(分布式请求处理)。具体的请求可以由各自的应用来进行处理 模块app命字/url模块名.py
文件件里必须有urlpatterns 列表
使用前需要使用 from django.conf.urls import include
导入此函数
应用内部可以配置模板目录:
应用下templates 和 外层templates 都存在时,django得查找模板规则:
安装 mysqlclient [版本 mysqlclient 1.3.13 以上 ,官网目前为 1.4.x]
sudo apt list --installed|grep -E ‘libmysqlclient-dev|python3-dev’
sudo apt-get install python3-dev default-libmysqlclient-dev
创建 和 配置数据库
创建数据库
create database mywebdb default charset utf8 collate utf8_general_ci;
数据库的配置
# file: settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mywebdb', # 数据库名称,需要自己定义
'USER': 'root',
'PASSWORD': '123456', # 管理员密码
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
关于数据的 SETTING 设置
ENGINE
'django.db.backends.mysql'
'django.db.backends.sqlite3'
'django.db.backends.oracle'
'django.db.backends.postgresql'
‘django.db.backends.mysql’
NAME
USER
PASSWORD
HOST
PORT
$ python3 manage.py startapp bookstore
# file : setting.py
INSTALLED_APPS = [
...
'bookstore',
]
# file : bookstore/models.py
from django.db import models
class Book(models.Model):
title = models.CharField("书名", max_length=50, default='')
price = models.DecimalField('定价', max_digits=7, decimal_places=2, default=0.0)
迁移是 Django 同步您对模型所做更改(添加字段,删除模型等) 到您的数据库模式的方式
1.生成或更新迁移文件
将每个应用下的 models.py 文件生成一个中间文件,并保存在 migrations 文件夹中
python3 manage.py makemigrations
2.执行迁移脚本程序
执行迁移程序实现迁移。将每个应用下的 migrations 目录中的中间文件同步回数据库
python3 manage.py migrate
注:每次修改完模型类再对服务程序运行之前都需要做以上两步迁移操作。
Models 的语法规范
from django.db import models
class 模型类名(models.Model):
字段名 = models.字段类型(字段选项)
模型类名是数据表名的一部分,建议类名首字母大写
字段名又是当前类的类属性名,此名称将作为数据表的字段名
字段类型用来映射到数据表中的字段的类型
字段选项为这些字段提供附加的参数信息
1.BooleanField()
2.CharField()
必须要指定 max_length 参数值
3.DateField()
参数:
auto_now: 每次保存对象时,自动设置该字段为当前时间 (取值:True/False)。
auto_now_add: 当对象第一次被创建时自动设置当前时间 (取值:True/False)。
default: 设置当前时间 (取值:字符串格式时间如: ‘2019-6-1’)。
以上三个参数只能多选一
4.DateTimeField()
5.DecimalField()
max_digits: 位数总数,包括小数点后的位数。 该值必须大于等于 decimal_places.
decimal_places: 小数点后的数字数量
money=models.DecimalField(
max_digits=7,
decimal_places=2,
default=0.0
)
6.FloatField()
编程语言中和数据库中都使用小数表示值
7.EmailField()
8.IntegerField()
9.URLField()
10.ImageField()
11.TextField()
primary_key
blank
null
default
db_index
unique
db_column
verbose_name
示例:
# 创建一个属性,表示用户名称,长度30个字符,必须是唯一的,不能为空,添加索引
name = models.CharField(max_length=30, unique=True, null=False, db_index=True)
文档参见:
https://docs.djangoproject.com/en/2.2/ref/models/fields/#field-options
# file : bookstore/models.py
from django.db import models
class Book(models.Model):
title = models.CharField("书名", max_length=50, default='')
price = models.DecimalField('定价', max_digits=7, decimal_places=2, default=0.0)
class Meta:
db_table = 'book' #可改变当前模型类对应的表名
当执行 $ python3 manage.py makemigrations 出现如下迁移错误时的处理方法
You are trying to add a non-nullable field 'des' to book without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
您试图添加一个非空字段'des'来预订没有默认;我们不能这样做(数据库需要填充现有行)
请选择修复:
1)现在提供一次性默认值(将对所有现有行设置此列的空值)
2)退出,让我在models.py中添加一个默认值
选择一个选项:
当对模型类新添加一个字段时可出现该错误
原理是 添加新字段后,数据库不知道原来已有数据对于新建字段该如何赋值,所以新增字段时,务必要添加 default 默认值。
删除 所有 migrations 里所有的 000?_XXXX.py (__init__.py 除外)
删除 数据库
重新创建 数据库
重新生成 migrations 里所有的 000?_XXXX.py
重新更新数据库
class MyModel(models.Model):
...
MyModel.objects.create(...) # objects 是管理器对象
MyModel.objects.create (属性 1 = 值 1, 属性 2 = 值 1,…)
创建 MyModel 实例对象,并调用 save () 进行保存
obj = MyModel(属性=值,属性=值)
obj.属性=值
obj.save()
$ python3 manage.py shell