文章目录
一、Django的模型
Django拥有自己的ORM模块,但是Django鼓励开发者进行松耦合开发,耦合就是代码功能直接联系,所谓松耦合代表项目被分为多个相对独立,可以迁移,可以单独修改的功能模块,所以,基于Django数据库操作被设计在了app(application)当中,类似手机上的app,手机本身只是提供了运行功能的环境,具体功能使用app实现。同理,基于django,项目是实现的环境,具体的功能写在不同的app下。
(一)创建APP
(D:\Anaconda3\envs\D_37) F:\0831Pro\DjPro\Qshop>python manage.py startapp Goods
(D:\Anaconda3\envs\D_37) F:\0831Pro\DjPro\Qshop>
(二)认识APP目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CpUZ6N8N-1606314187868)(image//image-20201030155733080.png)]
migrations 数据库同步记录目录
init.py 包文件
admin.py python自带后台管理文件
apps.py 应用的主文件(通常不用)
models.py 数据库模型文件
tests.py 自带的单元测试文件
views.py 视图文件
二、Django数据库
对现代的Web应用程序而言,视图逻辑经常需要与数据库交互。在数据库驱动型网站中,网站链接数据库服务器,从中检索数据,然后在网页中把数据显示出来。此外,可能还会提供让访客自行填充数据库的方式。Django非常适合构建数据库驱动型网站,它提供了简单而强大的工具(ORM),易于使用python执行数据库查询。
(一)ORM介绍
Object Relational Mapping,简称ORM,又叫对象关系映射,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种数据(对象)转化成另外一种数据(数据库表格)。
通过ORM怎样进行转换呢?
- Python中的一个类对应数据库中的一张表格
- Python中的一个对象对应表格中的一条记录
- Python中的一个类的属性对应表格中的字段
ORM优势: ORM提供了对数据库的映射,不用直接编写SQL代码,只需像操作对象一样从数据库操作数据。让软件开发人员专注于业务逻辑的处理,提高了开发效率。Django的ORM会自动生成id主键
ORM劣势: 在一定程度上牺牲程序的执行效率
(二)Django ORM建模
Django的数据库模型,必须在在app的models当中创建。
from django.db import models
# Create your models here.
class Goods(models.Model):
g_name = models.CharField(max_length = 32) #字符串
price = models.FloatField() #小数
number = models.IntegerField() #整数
public_time = models.DateField() #时间
shelf_life = models.IntegerField() #保质期 12
safe_unit = models.CharField(max_length = 32) #保质期单位
(三)配置数据库
1. 安装app
2. sqlite数据库配置
3. mysql数据库配置
使用mysql遇到问题
- 需要安装pymysql
(D:\Anaconda3\envs\D_37) F:\0831Pro\DjPro\Qshop>pip install pymysql
Collecting pymysql
Using cached PyMySQL-0.10.1-py2.py3-none-any.whl (47 kB)
Installing collected packages: pymysql
Successfully installed pymysql-0.10.1
-
django默认使用MySQLdb这个模块操作mysql数据库,需要进行配置
同步数据之前可以根据错误,对源码进行适当的修改。
-
然后进行数据库同步
- 校验配置 python manage.py check
(D:\Anaconda3\envs\D_37) F:\0831Pro\DjPro\Qshop>python manage.py check
System check identified no issues (0 silenced).
- 生成数据库迁移语句 python manage.py makemigrations
(D:\Anaconda3\envs\D_37) F:\0831Pro\DjPro\Qshop>python manage.py makemigrations
Migrations for 'Goods':
Goods\migrations\0001_initial.py
- Create model Goods
- 同步数据库 python manage.py migrate
(四)相关参数
常用的建模字段
字段 | 描述 |
---|---|
CharField | 字符串,必须有max_length |
IntergerField | 整数 |
FloatField | 小数 |
TextField | 长文本 |
DateField | 时间 年月日 |
DateTimeField | 时间 年月日时分秒 |
EmailField | 邮件格式的字符串 |
FileField | 文件,需要upload参数和media配置 |
ImageField | 图片,需要upload参数和media配置和pillow模块 |
常用的建模参数
参数 | 描述 |
---|---|
max_length | 长度 |
verbose_name | 字段别名 |
default | 默认值 |
unique | 唯一 |
blank | 是否可以为空,Django数据库默认不可以为空 |
null | 是否可以null |
upload_to | 上传地址,用在图片和文件 |
auto_now | 默认当前时间 |
primary_key | 主键 |
数据库管理界面
创建超级用户
python manage.py createsuperuser
(D:\Anaconda3\envs\D_37) F:\0831Pro\DjPro\Qshop>python manage.py createsuperuser
Username (leave blank to use 'dell'): admin
Email address: admin@qq.com
Password:
Password (again):
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
绑定模型到后台
修改列表样式
修改语言,时区
至此,基本数据库配置完成,可以开始对数据库进行系列操作了。