一、创建APP
创建APP
Django 中的一个app就是一个小的项目,我们通过 startapp 命令即可创建, 一下提供两种方式
1、启动虚拟环境 fswy
(fswy) xxxxdeMacBook-Pro:fswy xiatian$ cd fswy/blog
(fswy) xxxxdeMacBook-Pro:blog xiatian$ django-admin startapp fswy
(fswy) xxxxdeMacBook-Pro:blog xiatian$ cd fswy
(fswy) xxxxdeMacBook-Pro:blog xiatian$ls
|-- storm # 博客应用
| |-- migrations # 数据库映射文件
| |-- __init__.py # 声明模块,内容默认为空
| |-- admin.py # 该应用的后台管理系统
| |-- apps.py # 应用配置,Django-1.9以后自动生成
| |-- models.py # 数据模块,使用ORM框架
| |-- tests.py # 自动化测试的模块
| |-- views.py # 执行响应的代码所在模块,是代码逻辑处理的主要地点,项目中大部分代码在这里编写
2、Pycharm 中的 Tools -> run manage.py task 下执行命令:
startapp fswy
这样就可以创建出一个名为 fswy 的 app
目前项目完整结构
.
|-- blog
| |-- fswy # 博客应用
| | |-- migrations # 数据库映射文件
| | |-- __init__.py # 声明模块,内容默认为空
| | |-- admin.py # 该应用的后台管理系统
| | |-- apps.py # 应用配置,Django-1.9以后自动生成
| | |-- models.py # 数据模块,使用ORM框架
| | |-- tests.py # 自动化测试的模块
| | |-- views.py # 执行响应的代码所在模块,是代码逻辑处理的主要地点,项目中大部分代码在这里编写
| |-- blog # 项目的容器
| | |-- __init__.py # 声明模块,内容默认为空
| | |-- settings.py # 该 Django 项目的设置/配置。
| | |-- urls.py # 该 Django 项目的 URL 声明; 一份由 Django 驱动的网站"目录"。
| `-- wsgi.py # 一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目
`-- manage.py
注册新增APP
blog -> blog -> settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'storm', # 添加用户应用
]
二、迁移数据库
推荐阅读:mysql8.0 安装与使用
创建数据库
使用 Mysql 创建数据库 blog ,数据库编码类型 utf-8
推荐阅读:命令行创建 Navicat for MySQL创建数据库
连接数据库
Django 中默认的数据库是 sqlite3
blog -> blog -> settings.py
# 默认
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
将其改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': '3306',
'USER': 'root',
'PASSWORD': 'xxxxxx',
'NAME': 'blog',
# 避免映射数据库时出现警告
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4',
},
}
}
注意:
上述改变的内容里面数据库的相关信息一定要换成你自己电脑上安装的数据库的用户信息!
- ‘ENGINE’: ‘django.db.backends.mysql’, 这句话是固定的格式连接Mysql不用更改
- ‘Hots’:‘127.0.0.1’, 数据库的位置,一般不会改变
- ‘PORT’:‘3306’, 数据库的端口号,一般不会改变
- ‘USER’:‘root’, 换成你的数据库的账户
- ‘PASSWORD’:‘xxxxxx’, 换成你的数据库的密码
- ‘NAME’:‘blog’, blog是数据库表的名字,这里可以随意改成自己的
Navicat连接MySQL,并新建数据库blog
Pycharm的Database连接MySQL
点击Test Connection返回successful;
点击确定;
Django 与 Mysql 关联成功。
安装MySQL数据库python环境的驱动
此时 Django 与 Mysql 关联上了,但是 Python 并没有与 Mysql 连接上,启动虚拟环境 fswy,安装pymysql
(fswy) xxxxdeMacBook-Pro:~ xiatian$ pip3 install pymysql
Collecting pymysql
Successfully installed pymysql-0.9.3
进入blog目录
(fswy) xxxxdeMacBook-Pro:~ xiatian$cd fswy/blog
下面有两种迁移数据库的方法
1、命令行
(fswy) xxxxdeMacBook-Pro:blog xiatian$ python3 manage.py makemigrations
(fswy) xxxxdeMacBook-Pro:blog xiatian$ python3 manage.py migrate
But
在执行python3 manage.py makemigrations
时,返回一堆错误
例如:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
大概就是python3.8中找不到MySQLdb模块,当然这个模块本身就是python2.x的,花了一个多小时查找资料终于解决了。
详细解决方案见:makemigrations连接MySQL数据库的坑
2、Pycharm 中的Tools -> run manage.py task 下依次执行命令:
$ makemigrations
$ migrate
当执行了 makemigrations 后,Django 在 storm 应用的 migrations\ 目录下生成了一个 0001_initial.py 文件,这个文件是 Django 用来记录我们对模型做了哪些修改的文件。
不过此时只是告诉了 Django 做了哪些改变,为了让 Django 真正地为我们创建数据库表,接下来执行 migrate 命令。
Django 通过检测应用中 migrations\ 目录下的文件,得知我们对数据库做了哪些操作,然后它把这些操作翻译成数据库操作语言,从而把这些操作作用于数据库。
经过这两项操作后,我们打开 navicat 中的 blog 数据库,发现多了如下表单,这些表单为Django 自身还内置的很多应用,这些应用本身也是需要存储数据的。
auth_group,
auth_group_permissions,
auth_permission,
auth_user,
auth_user_groups,
auth_user_user_permissions,
django_admin_log,
django_content_type,
django_migrations,
django_session
【注意】这里最好把新建的 templates 文件,Mark 为模板文件
把鼠标放在 templates 文件上,右击鼠标,选择 Mark Directory as -> Template Folder, 点击确定