进入要创建项目的目录下,激活虚拟环境后,通过命令创建 Django项目
django-admin startproject 项目名
执行命令 django-admin startproject DjangoSite
创建了一个项目名为 DjangoSite
的Django项目
|DjangoSite 项目根目录
├── DjangoSite 项目名称
│ ├── __init__.py inti文件,标识当前所在的项目目录是一个 Python 包
│ ├── settings.py 项目配置文件
│ ├── urls.py url路径文件
│ └── wsgi.py WSGI服务器程序的入口文件
└── manage.py 命令行工具文件
manage.py文件:项目根目录下的 manage.py 文件是管理 Django 项目的重要命令行工具,它主要用于启动项目、创建应用和完成数据库的迁移等。
__init__.py文件
:DjangoSite根目录下DjangoSite的项目目录中,存在一个__init__.py
文件,该文件用于标识当前所在的目录是一个 Python 包,如果在此文件中,通过 import 导入其他方法或者包会被 Django 自动识别
settings.py 文件:settings.py 文件是 Django 项目的重要配置文件。项目启动时,settings.py 配置文件会被自动调用,而它定义的一些全局为 Django 运行提供参数,在此配置文件中也可以自定义一些变量,用于全局作用域的数据传递。
url.py 文件:url.py 文件用于记录 Django 项目的 URL 映射关系,它属于项目的基础路由配置文件,路由系统是在这个文件中完成相应配置的,项目中的动态路径必须先经过该文件匹配,才能实现 Web 站点上资源的访问功能。
wsgi.py文件:wsgi.py 是 WSGI(Web Server Gateway Interface)服务器程序的入口文件,主要用于启动应用程序。它遵守 WSGI 协议并负责网络通讯部分的实现,只有在项目部署的时候才会用到它。
settings.py 文件是 Django 项目的重要配置文件,在Django项目的编程过程中,需要根据自己的实际需求来修改这个文件,从而实现某些特定的要求,所以需要对settings.py 文件的内容进行一个深入的解析并熟知里面的内容
用于绑定当前项目 BookStore 所在的绝对路径,项目中的所有的文件都需要依赖此路径
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.path.abspath(__file__)
方法返回当前文件的绝对路径(也就是settings.py 文件的绝对路径);
而os.path.dirname(os.path.abspath(__file__))
则是将文件和目录进行剥离,返回文件所在的目录的绝对路径,也就是settings.py文件所在的DjangoSite项目目录的绝对路径;
再来一次os.path.dirname()
,再剥离一层,返回的就是DjangoSite项目根目录所在的绝对路径
如果不理解,可以使用print(BASE_DIR)
打印一下,对这行代码的理解就会更深刻
SECRET_KEY = 't!i%=ct7x@j*7+*fm-%x@5s@$rcm8n(+r246jf6%=yf5(3$odn'
这个变量的本质是一个字符串,可以理解为是一个秘钥,它一般配合加密算法 Hash、MD5 一起使用。例如用户密码的加密或者建立会话时用到的 sessionid 都需要用到 SECRET_KEY 。在实际的开发工作中,一般将它保存在系统的环境变量中以确保加密的安全。
DEBUG = True
用于配置 Django 项目的启用模式,有两种取值方式:
DEBUG = True
用于在开发环境中使用,属于调试模式,在项目的运行过程中会暴露一些错误信息以方便调试。DEBUG = False
用于生产环境,表示不启用调试模式。注意,项目发布时一定要改为DEBUG = False
ALLOWED_HOSTS = []
用于配置能够访问当前站点的域名(IP地址),当 DEBUG = False 时,必须填写,有以下三种使用方法:
如果是在局域网,让其它主机也能访问此站点,应使用 ALLOWED_HOSTS=['*']
的方式。比如本地用虚拟机跑项目,要用Windows系统访问;或者是前端同事要访问你电脑上的项目。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
这个参数是指当前项目中用来安装的应用(APP)的列表。
Django 把默认自带的应用放在这个列表里,比如 Admin 后台应用、Auth 用户管理系统等,在 Django 中把它们称之为“应用”。
可以根据自己的项目需求对其进行增加或删除,比如公司要单独开发一个后台管理系统,就可以把第一项 admin 注释掉。开发时自己编写的应用都必须在这个变量表中进行注册才能生效。所以这个列表需要经常的改动。
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
它用于注册中间件,Django 默认加载了一些中间件。例如,用于处理会话的 SessionMiddleware 等,同样我们可以对这些中间件进行添加或者注释。
ROOT_URLCONF = 'BookStore.urls'
它指定了当前项目的根 URL,是 Django 路由系统的入口。
它用于指定模板的配置信息,列表中每一元素都是一个字典。
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',
],
},
},
]
BACKEND
所示是 Django 默认自带模板引擎
WSGI_APPLICATION = 'DjangoSite.wsgi.application'
项目部署时,Django 的内置服务器将使用的 WSGI 应用程序对象的完整 Python 路径。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
它用于指定数据库配置信息,这里默认配置的是 Django 自带的 sqllite3 数据库。Django 支持多种数据库,在这个字典变量中更改数据库配置。常用的数据库有MySQL、oracle
DATABASES 中的字典元素:
Django.db.backends
来查看哪些数据库可以与 Django 配合使用;127.0.0.1
;DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'DjangoPro',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
这是一个支持插拔的密码验证器,且可以一次性配置多个,Django 通过这些内置组件来避免用户设置的密码等级不足的问题。
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 = 'en-us'
LANGUAGE_CODE 指语言配置,en-us
是英文 ,zh-Hans
则代表中文。
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
TIME_ZONE 指服务端时区配置, UTC
指的是世界时区,若需要配置为中国时区,则将值修改为Asia/Shanghai
。
项目开发完成后,可以选择向不同国家的用户提供服务,那么就需要支持国际化和本地化。USE_118N 和 USE_L10N 这两个变量值表示是否需要开启国际化和本地化功能。默认开启的状态。I18N
指的是国际化英文缩写,L10N
指的是本地化英文缩写。
USE_TZ 指对时区的处理方式,当设置为 True 的时候,存储到数据库的时间是世界时间 UTC
。
STATIC_URL = '/static/'
STATIC_URL 指的是静态资源的存放位置。静态资源包括 CSS、JS、Images这些前端的内容文件。比如我们要在项目中添加一些图片,通常这些静态图片被存放在 static 目录下,通过 STATIC_URL= '/static/'
路径对静态资源进行访问。
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
DEFAULT_AUTO_FIELD 指的是主键配置。
当没有将模型字段设置为该模型的主键时,Django 会自动在项目的模型添加一个名为 id
的字段,该字段将用作主键。这个自动添加的键通常是 AutoField
。Django 允许通过设置 AutoField
来设置用于这些自动生成的主键字段的 DEFAULT_AUTO_FIELD
类型。
从 Django 3.2 开始,主键的默认类型设置为BigAutoField
,这是一个64位整数(64 bit integer)。早期版本将隐式主键的类型设置为整数(integer)。如果没有在模型中设置主键,会弹出没有显式定义的主键类型的警告。
Django 项目就是基于 Django 框架开发的 Web 应用,它包含了一组配置和多个应用,我们把应用称之为 App。一个 App 就是一个 Python 包,通常一个 App 可以包含模型、视图、模板和 URL 配置文件,可以被应用到多个 Django 项目中,因为它们的本质就是可被重用的 Python 软件包。
利用 manage.py 提供的 startapp 命令创建APP
python manage.py startapp 应用名称
执行 cd DjangoSite
命令进入所创建的DjangoSite项目根目录下,再执行python manage.py startapp demo
命令创建了一个名为 demo的应用
|DjangoSite 项目根目录
├── demo 应用名称
│ ├── migrations 数据模型迁移记录目录
│ │ └── __init__.py inti文件,标识当前所在的数据模型迁移记录目录是一个 Python 包
│ ├── __init__.py inti文件,标识当前所在的应用目录是一个 Python 包
│ ├── admin.py Django Admin 应用的配置文件
│ ├── apps.py 应用程序本身的属性配置文件
│ ├── models.py 用于定义应用中所需要的数据表的配置文件
│ ├── tests.py 用于编写当前应用程序的单元测试的测试文件
│ └── views.py 用来定义视图处理函数的文件
├── DjangoSite 项目名称
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
migrations 数据模型迁移记录目录:migrations 目录用于存储数据库迁移时生成的文件,该目录下的 __init__.py
文件标识 migrations 是一个 Python 包。
admin.py 文件:admin.py 用于将 Model 定义的数据表注册到管理后台,是 Django Admin 应用的配置文件;
apps.py 文件:apps.py 用于应用程序本身的属性配置文件;
models.py 文件:models.py 用于定义应用中所需要的数据表;
tests.py 文件:tests.py 用于编写当前应用程序的单元测试;
views.py 文件:views.py 用来定义视图处理函数的文件;
在实际的开发工作中,应用目录下的文件不是一成不变的,开发者根据自己的需要增加文件或者子目录,比如 urls.py 文件或者存储静态文件的 static 目录等
应用创建完成后,还需要在 settings.py 配置文件中对其进行添加,在上面settings.py文件
中介绍了 INSTALLED_APPS参数,创建完应用,需要将应用添加到这个列表里,添加完成后,demo应用才算和整个项目融为一体
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demo', # 添加应用
]