Python 的数据模型
Model用于和关系型数据库交互
1. 要实现的数据表结构如下
-
书籍信息表
字段名 字段类型 字段说明 id AutoField 主键 name CharField 书名 id name 1 西游记 2 三国演义 -
人物信息表
字段名 字段类型 字段说明 id AutoField 主键 name CharField 人名 gender BooleanField 性别 book ForeignKey 外键 id name gender book 1 孙悟空 False 1 2 白骨精 True 1 3 曹操 False 2 4 貂蝉 True 2
2. ORM 框架介绍
ORM(Object Relational Mapping)对象关系映射,就是把数据库表的行与相应的对象建立关联,互相转换,使得数据库的操作面向对象。
由于 Django 的 Model 中内嵌了 ORM 框架,所以不需要直接面向数据库编程,而是定义模型类,通过 模型类和对象完成数据库的 增删查改。
ORMDB类
<===>数据表 对象<====>数据行 属性<====>字段
3. 使用 Django 进行数据库开发的步骤
3.1 定义模型类
from django.db import models
"""
1. 我们的模型类需要继承自 models.Model
2. 系统会自动添加一个主键 id
3. 字段定义
字段名=models.类型(选项)
字段名不要使用 python、mysql 等关键字
"""
class BookInfo(models.Model):
name = models.CharField(max_length=10)
# 人物
class PeopleInfo(models.Model):
name = models.CharField(max_length=10)
gender = models.BooleanField()
# 外键
book = models.ForeignKey(BookInfo, on_delete=models.CASCADE)
3.2 模型迁移
迁移由两部分完成:
-
生成迁移文件:根据模型类生成创建表的语句
python manage.py makemigrations此时
/bookmanager/book/migrations下会多出一个0001_initial.py文件,这便是生成的迁移文件。 -
执行迁移文件:根据第一步生成的语句在数据库中创建表
python manage.py migrate
3.3 操作数据库
-
上一步生成的数据表在哪查看呢?
在
/bookmanager/bookmanager/settings.py文件里可以看到如下代码:# Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }说明当前默认数据库用的是
sqlite3数据库,存储数据的文件为/bookmanager/db.sqlite3。 -
查看
sqlite3数据库首次查看,需要在
pycharm里先安装对应的驱动,步骤如下:-
双击
/bookmanager/db.sqlite3文件; -
下载驱动
此时在
pycharm右侧Database里就能看到数据库了,在Database/db/main/tables下可以看到生成的book_bookinfo和book_peopleinfo两张表。 -
3. 操作数据库
10.4 站点管理
10.4.1 管理界面本地化
-
启动项目下的
manage.py文件 -
访问
http://127.0.0.1:8000/admin进入登录页面界面默认是英文,需要改为中文,需要在
/项目名称/settings.py里进行修改# settings.py # 设置语言 # LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-Hans' # 设置时区 # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai'
10.4.2 创建管理员
-
运行
python manage.py createsuperuser创建超级用户的 账号、密码和邮箱这样就会在表
db.sqlite3/Schemas/main/Tables/auth_user生成一条数据重置密码使用
python manager.py changepassword 用户名 -
在登录页面用刚才设置的账号密码进行登录
10.4.3 注册模型类
# /src/book/admin.py
from django.contrib import admin
from book.models import BookInfo, PeopleInfo
# 注册模型类
admin.site.register(BookInfo)
admin.site.register(PeopleInfo)
# 重启Django
10.4.4 发布内容到数据库
10.5 视图和路由
10.5.1 视图
# /src/book/views.py
from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
# Create your views here.
"""
视图
所谓的视图 其实就是python函数
视图函数有2个要求:
1. 视图函数的第一个参数就是接收请求。这个请求其实就是 HttpRequest 的类对象
2. 必须返回一个响应
"""
def index():
return HttpResponse('ok')
10.5.2 路由
在子应用创建urls.py
# /src/book/urls.py
from django.urls import path
from book.views import index
# urlpatterns 是固定写法
urlpatterns = [
# path('路由','视图函数名')
path('index/', index)
]
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('book/', include('book.urls'))
]
10.6 模板 Template
在/src/settings.py 文件下的 TEMPLATE 变量里的 DIRS 属性里设置模板路径,例如:
TEMPLATES = [{
...,
# 告知系统,我们的模板文件放在哪里
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
}]
将 /src/book/views.py 里的 def index 改为:
def index(request):
# return HttpResponse('ok')
context = {
'name': '马上双11'
}
return render(request, 'book/index.html', context=context)
10.7 配置文件 /src/settings.py
-
BASE_DIRBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # print(__file__) # C:\Users\Administrator\Envs\vir1\src\src\settings.py # print(os.path.abspath(__file__)) # C:\Users\Administrator\Envs\vir1\src\src\settings.py # os.path.dirname() 获取文件的目录 # print(os.path.dirname(os.path.abspath(__file__))) # C:\Users\Administrator\Envs\vir1\src\src -
DEBUG = True调试模式、ALLOWED_HOSTS在我们开发的时候,我们需要看到更多的信息,所以要开启debug模式,当我们的程序上线之后,就改为False,此时,必须在
ALLOWED_HOSTS里设置可访问的ip地址 -
语言与时区
# 设置语言 # LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-Hans' # 设置时区 # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai'
10.8 静态文件
为了提供静态文件,需要在/src/settings.py配置两个参数:
# 存放查找静态文件的目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
# 访问静态文件的URL前缀
STATIC_URL = '/static/'
在浏览器访问:http://127.0.0.1:8000/static/c.png
10.9 App 应用配置
10.10 更换数据库
10.10. 1 在 MySQL 中创建数据库
create database book charset utf8;
use book;
10.10.2 修改 DATABASES 配置信息
修改 settings.py 中的 DATABASES:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 主机
'PORT': 3306, # 端口号
'USER': 'root', # 用户名
'PASSWORD': 'root', # 密码
'NAME': 'book', # 数据库
}
}
10.10.3 运行测试
报错:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. Did you install mysqlclient?
原因:没有安装 mysqlclient
在虚拟环境中安装 mysqlclient
pip install mysqlclient
如果
pip install mysqlclient报错,需要在当前操作系统中安装libmysqlclient-dev:
sudo apt-get install libmysqlclient-dev