创建虚拟环境

  • 切换到离项目近的位置
  • 创建虚拟环境:python -m venv env_name
  • 激活虚拟环境:source env_name/bin/activate
  • 停止虚拟环境:deactivate

项目

创建项目

从空白项目创建

  1. 创建项目
    1. 创建到 project_name 下:django-admin.py startproject project_name
    2. 直接在本级创建:django-admin.py startproject project_name .
  2. 导入 pymysql 模块,项目下 __init__.py 中加入:(为防止部署时出错)
  1. import pymysql
  2. pymysql.install_as_MySQLdb()
  1. 创建数据库
    1. utf8mb4 & utf8mb4_unicode_ci
    2. SQL:CREATE DATABASE database_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  2. 设置数据库连接,项目下 settings.py 中修改:
  1. DATABASES = {
  2. 'default': {
  3. 'ENGINE': 'django.db.backends.mysql',
  4. 'NAME': 'database_name',
  5. 'USER': 'root',
  6. 'PASSWORD': '125690',
  7. 'HOST': '127.0.0.1',
  8. 'PORT': '3306',
  9. 'OPTIONS': {'init_command': 'SET default_storage_engine=INNODB;', 'charset':'utf8mb4'}
  10. }
  11. }
  1. 测试数据库连接:python manage.py dbshell
  2. 创建和更新数据库:
    1. python manage.py makemigrations
    2. python manage.py migrate
  3. 创建超级用户:python manage.py createsuperuser

应用

创建应用

  1. 创建应用:python manage.py startapp app_name
  2. 添加 'app_name.apps.AppnameConfig' 到项目下 settings.pyINSTALLED_APPS
  3. 应用下添加文件:urls.py
  1. # -*- coding: utf-8 -*-
  2. """inna URL调度器:前台
  3. 后台在 adminlte.urls 设置
  4. Examples:
  5. Function views
  6. 1. 引入: from my_app import views
  7. 2. path('', views.home, name='home')
  8. Class-based views
  9. 1. 引入: from other_app.views import Home
  10. 2. path('', Home.as_view(), name='home')
  11. <int:id>, <str:name> 占位符
  12. .. _Django URL:
  13. https://docs.djangoproject.com/en/2.2/topics/http/urls/
  14. """
  15. from django.urls import path
  16. app_name = 'inna'
  17. urlpatterns = [
  18. path('', fore.home, name='home'),
  19. ]
  1. 创建模型
  1. class ModelName(models.Model):
  2. """模型名"""
  3. field_name = models.CharField('名称', max_length=100)
  4. pub_date = models.DateTimeField('创建时间', auto_now_add=True)
  5. update_date = models.DateTimeField('修改时间', auto_now=True)
  6. def __str__(self):
  7. return self.text
  8. class Meta:
  9. verbose_name = '模型名'
  10. verbose_name_plural = '模型名'
  1. 创建和更新数据库:
    1. python manage.py makemigrations
    2. python manage.py migrate

删除应用

  1. 删除应用中的模型
  2. 检查有无其他引用模型文件
  3. 删除应用数据库:python manage.py migrate app_name zero
  4. 检查有无其他应用引用文件
  5. 删除应用文件夹
  6. 项目 settings.pyINSTALLED_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')