• Django项目目录及项目文件介绍


    创建项目

    进入要创建项目的目录下,激活虚拟环境后,通过命令创建 Django项目

    django-admin startproject 项目名
    
    • 1

    执行命令 django-admin startproject DjangoSite 创建了一个项目名为 DjangoSite 的Django项目

    项目目录说明

    |DjangoSite							项目根目录
    ├── DjangoSite						项目名称
    │   ├── __init__.py					inti文件,标识当前所在的项目目录是一个 Python 包
    │   ├── settings.py					项目配置文件
    │   ├── urls.py						url路径文件
    │   └── wsgi.py						WSGI服务器程序的入口文件
    └── manage.py						命令行工具文件
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    项目文件说明

    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 文件

    settings.py 文件是 Django 项目的重要配置文件,在Django项目的编程过程中,需要根据自己的实际需求来修改这个文件,从而实现某些特定的要求,所以需要对settings.py 文件的内容进行一个深入的解析并熟知里面的内容

    1、BASE_DIR

    用于绑定当前项目 BookStore 所在的绝对路径,项目中的所有的文件都需要依赖此路径

    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    • 1

    os.path.abspath(__file__) 方法返回当前文件的绝对路径(也就是settings.py 文件的绝对路径);

    os.path.dirname(os.path.abspath(__file__))则是将文件和目录进行剥离,返回文件所在的目录的绝对路径,也就是settings.py文件所在的DjangoSite项目目录的绝对路径;

    再来一次os.path.dirname(),再剥离一层,返回的就是DjangoSite项目根目录所在的绝对路径

    如果不理解,可以使用print(BASE_DIR)打印一下,对这行代码的理解就会更深刻

    2、SECRET_KEY
    SECRET_KEY = 't!i%=ct7x@j*7+*fm-%x@5s@$rcm8n(+r246jf6%=yf5(3$odn'
    
    • 1

    这个变量的本质是一个字符串,可以理解为是一个秘钥,它一般配合加密算法 Hash、MD5 一起使用。例如用户密码的加密或者建立会话时用到的 sessionid 都需要用到 SECRET_KEY 。在实际的开发工作中,一般将它保存在系统的环境变量中以确保加密的安全。

    3、DEBUG
    DEBUG = True
    
    • 1

    用于配置 Django 项目的启用模式,有两种取值方式:

    • DEBUG = True用于在开发环境中使用,属于调试模式,在项目的运行过程中会暴露一些错误信息以方便调试。
    • DEBUG = False用于生产环境,表示不启用调试模式。注意,项目发布时一定要改为DEBUG = False
    4、ALLOWED_HOSTS
    ALLOWED_HOSTS = []
    
    • 1

    用于配置能够访问当前站点的域名(IP地址),当 DEBUG = False 时,必须填写,有以下三种使用方法:

    • [],空列表,表示只有127.0.0.1,localhost能访问本项目;
    • [‘*’],表示任何网络地址都能访问到当前项目;
    • [‘192.168.1.3’, ‘192.168.2.134’] 表示只有当前两个主机能访问当前项目。

    如果是在局域网,让其它主机也能访问此站点,应使用 ALLOWED_HOSTS=['*'] 的方式。比如本地用虚拟机跑项目,要用Windows系统访问;或者是前端同事要访问你电脑上的项目。

    5、INSTALLED_APPS
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这个参数是指当前项目中用来安装的应用(APP)的列表。

    Django 把默认自带的应用放在这个列表里,比如 Admin 后台应用、Auth 用户管理系统等,在 Django 中把它们称之为“应用”。

    可以根据自己的项目需求对其进行增加或删除,比如公司要单独开发一个后台管理系统,就可以把第一项 admin 注释掉。开发时自己编写的应用都必须在这个变量表中进行注册才能生效。所以这个列表需要经常的改动。

    6、MIDDLEWARE
    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',
    ]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    它用于注册中间件,Django 默认加载了一些中间件。例如,用于处理会话的 SessionMiddleware 等,同样我们可以对这些中间件进行添加或者注释。

    7、ROOT_URLCONF
    ROOT_URLCONF = 'BookStore.urls'
    
    • 1

    它指定了当前项目的根 URL,是 Django 路由系统的入口。

    8、TEMPLATES

    它用于指定模板的配置信息,列表中每一元素都是一个字典。

    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',
                ],
            },
        },
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    BACKEND所示是 Django 默认自带模板引擎

    9、WSGI_APPLICATION
    WSGI_APPLICATION = 'DjangoSite.wsgi.application'
    
    • 1

    项目部署时,Django 的内置服务器将使用的 WSGI 应用程序对象的完整 Python 路径。

    10、DATABASES
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    它用于指定数据库配置信息,这里默认配置的是 Django 自带的 sqllite3 数据库。Django 支持多种数据库,在这个字典变量中更改数据库配置。常用的数据库有MySQL、oracle

    DATABASES 中的字典元素:

    • ENGINE:指定使用的数据库引擎,可以通过 Django.db.backends 来查看哪些数据库可以与 Django 配合使用;
    • NAME:指定项目所用的数据库名;
    • USER:数据库用户名;
    • PASSWORD:数据库的密码;
    • HOST:数据库服务器地址,本地环境开发为 127.0.0.1
    • PORT:数据库的端口号,如 MySQL 默认端口是 3306。
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'DjangoPro',
            'USER': 'root',
            'PASSWORD': '123456',
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    11、AUTH_PASSWORD_VALIDATORS

    这是一个支持插拔的密码验证器,且可以一次性配置多个,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',
        },
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    12、语言配置项
    LANGUAGE_CODE = 'en-us'
    
    • 1

    LANGUAGE_CODE 指语言配置,en-us是英文 ,zh-Hans 则代表中文。

    13、时区配置项
    TIME_ZONE = 'UTC'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    TIME_ZONE 指服务端时区配置, UTC指的是世界时区,若需要配置为中国时区,则将值修改为Asia/Shanghai

    项目开发完成后,可以选择向不同国家的用户提供服务,那么就需要支持国际化和本地化。USE_118NUSE_L10N 这两个变量值表示是否需要开启国际化和本地化功能。默认开启的状态。I18N 指的是国际化英文缩写,L10N 指的是本地化英文缩写。

    USE_TZ 指对时区的处理方式,当设置为 True 的时候,存储到数据库的时间是世界时间 UTC

    14、STATIC_URL
    STATIC_URL = '/static/'
    
    • 1

    STATIC_URL 指的是静态资源的存放位置。静态资源包括 CSS、JS、Images这些前端的内容文件。比如我们要在项目中添加一些图片,通常这些静态图片被存放在 static 目录下,通过 STATIC_URL= '/static/' 路径对静态资源进行访问。

    15、DEFAULT_AUTO_FIELD
    DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
    
    • 1

    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 应用名称
    
    • 1

    执行 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						
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    应用文件说明

    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',     # 添加应用
    ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    不认识docker,怎么好意思说自己是干IT的
    Springboot的自动配置原理
    PC业务校验(已有该名称,已有该编码)
    Python爬虫编程思想(156):使用Scrapy抓取天气预报数据
    Android 10.0 framework层设置后台运行app进程最大数功能实现
    Transformer论文精读
    Neo4j学习笔记(三) 导入数据
    Sermant类隔离架构:解决JavaAgent场景类冲突的实践
    英文PDF怎么翻译成中文?两分钟让你学会翻译PDF
    ES6中的Promise基础讲解
  • 原文地址:https://blog.csdn.net/qq_44614026/article/details/126256308