目录
一、基础命令
1.1 初始化命令
-
项目初始化
- 写法:
django-admin startproject 项目名称
- 功能:项目初始化,生成项目文件夹,生成主应用文件夹,下图中的两个main文件夹
- 写法:
-
应用初始化
- 写法:
python manage.py startapp 应用名称
,每个项目至少有一个应用 - 功能:实现某种专有功能的应用,下图中的api文件夹
项目和应用区别:应用是一个专门做某件事的网络应用程序——比如博客系统,或者公共记录的数据库,或者小型的投票程序。项目则是一个网站使用的配置和应用的集合。项目可以包含很多个应用。应用可以被很多个项目使用
- 写法:
1.2 测试命令
- 启动测试服务器(最常用)
- 写法:
python manage.py runserver
- 功能:启动一个测试服务器,用于接收处理网络请求
- 写法:
1.3 数据库命令
- 生成数据库表关系结构 过渡文件
- 写法:
python manage.py makemigrations
- 功能:在应用文件夹的migrations文件夹中,生成操作数据库表头、表数据限制的中间文件
- 写法:
- 生成数据库表关系结构
- 写法:
python manage.py migrate
- 功能:在数据库文件中,生成表头、表数据限制等表初始化操作,非表数据输入
- 写法:
1.4 命令失效
- 检查是否激活虚拟环境
- 标识:命令行前有
(venv)
标识 - 激活方法:进入
...\venv\Scripts
文件夹,终端中运行activate
命令,取消激活运行deactivate
命令
二、目录释义
- 文件夹目录
2.1 主应用main
- settings.py:项目的所有运行设置
- wsgi.py:简易http服务器,用于debug,生产环境可在此文件中修改为uwsgi
- urls.py:主路由分发,接收wsgi转发的请求,并根据路由映射到相应的views文件中的函数
2.2 自定义功能应用api
- 高频应用文件
- views.py :用来定义视图处理函数的文件,接收请求,逻辑操作;
- models.py :用于定义应用中所需要的数据表,初始化以及变更数据表,非表中的数据;
- migrations :目录用于存储数据库迁移时生成的中间文件,该目录下的 init.py 文件标识 migrations 是一个 Python 包
- 不常用
- admin.py :用于将 Model 定义的数据表注册到管理后台,是 Django Admin 应用的配置文件;
- apps.py :用于应用程序本身的属性配置文件;
- tests.py :文件用于编写当前应用程序的单元测试;
- init.py:标识 index 应用是一个 Python 包;
2.3 venv文件夹
- 功能:虚拟环境中所有下载的软件都保存在此文件夹
三、请求流转顺序
3.1 宏观请求流转过程
3.2 django内部请求流转过程
- 顺序执行
- 请求发起:浏览器发起请求request,发给服务器django
- Django模块:
- 中间件:setting.py中的MIDDLEWARE,功能为过滤请求和修改请求和响应
- URL分发:urls.py文件(实现路由与views.py中的功能函数的映射),负责根据路由将请求分发给相应应用文件夹中的views.py文件中的功能函数
- model操作请求:请求若需要操作数据库,则需要model.py文件初始化或修改数据库属性==参数
- 响应发起:由view.py功能函数return数据,响应(response)再经由中间件返回给浏览器
- 图示
四、项目设置文件setting.py
- 文件内容
from pathlib import Path # 设置根目录,此处为manage.py所在的目录,即django_dir/main # 项目内目录写法:BASE_DIR/子目录,导包用 BASE_DIR = Path(__file__).resolve().parent.parent SECRET_KEY = '&r9r+5tk!0x1xgk=ad*bdh4s@b^r3y0&$bezpm+@&^x044ezw=' # 调试时:True,生产环境:False DEBUG = True # 限制可访问IP白名单 ALLOWED_HOSTS = ['*'] # 注册app应用,startapp命令生成的应用也要在此注册 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'api', # 一定记得这里注册自己的app,新手经常会忘 ] # 中间件:有顺序,自定义中间件也需在此处注册 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # 会话框架 'django.middleware.common.CommonMiddleware', # 常规中间件 'django.middleware.csrf.CsrfViewMiddleware', # csrf,防止跨站攻击 'django.contrib.auth.middleware.AuthenticationMiddleware', # 身份认证系统 'django.contrib.messages.middleware.MessageMiddleware', # 消息框架 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'main.urls' # Django模板系统:此处今后前后端分离,用vue顶替,保持默认 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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', ], }, }, ] # 设置简易web服务器,用于测试用 WSGI_APPLICATION = 'main.wsgi.application' # 数据库设置:默认用sqlite,以后可改为mysql数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # 语言设置 LANGUAGE_CODE = 'zh-hans' # 时区设置 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True USE_TZ = True # 静态文件设置:配合Django模板系统,用前后端分离,此处保持默认 STATIC_URL = '/static/'