创建虚拟环境
- 切换到离项目近的位置
- 创建虚拟环境:
python -m venv env_name - 激活虚拟环境:
source env_name/bin/activate - 停止虚拟环境:
deactivate
项目
创建项目
从空白项目创建
- 创建项目
- 创建到 project_name 下:
django-admin.py startproject project_name - 直接在本级创建:
django-admin.py startproject project_name .
- 创建到 project_name 下:
- 导入 pymysql 模块,项目下
__init__.py中加入:(为防止部署时出错)
import pymysqlpymysql.install_as_MySQLdb()
- 创建数据库
- utf8mb4 & utf8mb4_unicode_ci
- SQL:
CREATE DATABASE database_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 设置数据库连接,项目下
settings.py中修改:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'database_name','USER': 'root','PASSWORD': '125690','HOST': '127.0.0.1','PORT': '3306','OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;', 'charset':'utf8mb4'}}}
- 测试数据库连接:
python manage.py dbshell - 创建和更新数据库:
python manage.py makemigrationspython manage.py migrate
- 创建超级用户:
python manage.py createsuperuser
应用
创建应用
- 创建应用:
python manage.py startapp app_name - 添加
'app_name.apps.AppnameConfig'到项目下settings.py的INSTALLED_APPS - 应用下添加文件:
urls.py
# -*- coding: utf-8 -*-"""inna URL调度器:前台后台在 adminlte.urls 设置Examples:Function views1. 引入: from my_app import views2. path('', views.home, name='home')Class-based views1. 引入: from other_app.views import Home2. path('', Home.as_view(), name='home')<int:id>, <str:name> 占位符.. _Django URL:https://docs.djangoproject.com/en/2.2/topics/http/urls/"""from django.urls import pathapp_name = 'inna'urlpatterns = [path('', fore.home, name='home'),]
- 创建模型
class ModelName(models.Model):"""模型名"""field_name = models.CharField('名称', max_length=100)pub_date = models.DateTimeField('创建时间', auto_now_add=True)update_date = models.DateTimeField('修改时间', auto_now=True)def __str__(self):return self.textclass Meta:verbose_name = '模型名'verbose_name_plural = '模型名'
- 创建和更新数据库:
python manage.py makemigrationspython manage.py migrate
删除应用
- 删除应用中的模型
- 检查有无其他引用模型文件
- 删除应用数据库:
python manage.py migrate app_name zero - 检查有无其他应用引用文件
- 删除应用文件夹
- 项目
settings.py中INSTALLED_APPS移除应用
Django 附加知识库
什么是应用?
应用是专门做某事的网络程序(博客、投票系统……),可以放在 manage.py 同级目录下,或者任何 Python path 定义的目录下。
一个项目可以包含多个应用,一个应用可以被多个项目使用。
迁移(migrate)的作用
迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。
原理:运行 python manage.py migrate 时,Django 会根据 INSTALLED_APPS 创建对应的数据库。
对应用中的模型做出更改后:
- 先激活:
python manage.py makemigrations - 再迁移:
python manage.py migrate
遇到的问题
AttributeError: ‘str’ object has no attribute ‘decode’
则找到 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/django/db/backends/mysql/operation.py ,把大约146行:query = query.decode(errors='replace') 修改为 query = query.encode(errors='replace')
