本渣渣不专注技术,只专注使用技术,不是一个资深的coder,是一个不折不扣的copier |
1、创建APP
创建APP
Django 中的一个app就是一个小的项目,我们通过 startapp 命令即可创建, 一下提供两种方式
①启动虚拟环境 stormsha
//~为项目所在路径
$ cd ~/blog
$ django-admin startapp storm
$ cd storm
|-- storm # 博客应用
| |-- migrations # 数据库映射文件
| |-- __init__.py # 声明模块,内容默认为空
| |-- admin.py # 该应用的后台管理系统
| |-- apps.py # 应用配置,Django-1.9以后自动生成
| |-- models.py # 数据模块,使用ORM框架
| |-- tests.py # 自动化测试的模块
| |-- views.py # 执行响应的代码所在模块,是代码逻辑处理的主要地点,项目中大部分代码在这里编写
②Pycharm 中的 Tools -> run manage.py task 下执行命令:
startapp storm
这样就可以创建出一个名为 storm 的 app
目前项目完整结构
.
|-- blog
| |-- storm # 博客应用
| | |-- 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', # 添加用户应用
]
2、迁移数据库
推荐阅读:mysql5.7.21 安装与使用
创建数据库
使用 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': 'mysql',
'NAME': 'blog',
# 避免映射数据库时出现警告
'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
'charset': 'utf8mb4',
},
}
}
此时 Django 与 Mysql 关联上了,但是 Python 并没有与 Mysql 连接上,启动虚拟环境 stormsha,安装pymysql
$ workon stormsha
$ pip install pymysql
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
我们在执行迁移数据库的操作时,如下警告:
WARNINGS:
?: (1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your default TEMPLATES dict: TEMPLATE_DIRS.
这是因为 Django 版本的问题产生的,解决方法按照提示操作,打开 settings.py,将如下语句删掉:
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),)
并将 templates 的位置添加到TEMPLATE中:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 添加此行,注册 Django templates模板
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
添加templates模板文件夹
此时可能你会发现项目文件中并没有 templates文件
.
|-- blog
| |-- storm # 博客应用
| | |-- 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 服务器的入口,以便运行你的项目
| |-- templates # 模板文件
`-- manage.py
【注意】——这里最好把新建的 templates 文件,Mark 为模板文件
把鼠标放在 templates 文件上,右击鼠标,选择 Mark Directory as -> Template Folder, 点击确定
————————————————————————————————————————————————————————————————————————————————————
转载请注明: StormSha » Django个人博客开发五 | 创建第一个APP