本渣渣不专注技术,只专注使用技术,不是一个资深的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