Django项目解读(结构,settings,APP)

目录

1.django项目基本结构

2.settings.py

BASE_DIR

SECRET_KEY

DEBUG

ALLOWED_HOST

INSTALLED_APPS

MIDDLEWARE

ROOT_URLCONF

TEMPLATES

WSGI_APPLICATION

DATABASES

AUTH_PASSWORD_VALIDATORS

LANGUAGE_CODE

TIME_ZONE

USE_I18N

USE_TZ

STATIC_URL

DEFAULT_AUTO_FIELD

3.关于APP

4.参考文章


1.django项目基本结构

PycharmProjects                 
    django_blog
        -django_blog
            -_init_.py
            -asgi.py
            -settings.py
            -urls.py
            -wsgi.py
        -manage.py
    my_env
        Include
        Lib
        Scripts
        pyvenv.cfg

1.PycharmProjects - PyCharm 用户的主项目目录,用于存放所有的 Python 项目

2.django_blog - 这是 Django 项目的主要文件夹,包含了项目的所有文件和子文件夹。

3.-django_blog - 这是项目根目录下的子文件夹,通常与项目名称相同。它包含了 Django 项目的核心文件。

4.-__init__.py - 这是一个空文件,用于告诉 Python 解释器这个目录应该被视为一个 Python 包。

5.-asgi.py - 底层请求处理入口【异步】。在 Django 3.1 及以上版本中,这个文件用于配置 ASGI 服务器,ASGI 是异步服务器网关接口,用于与 Web 服务器通信。

6.-settings.py - 这个文件包含了 Django 项目的配置和设置,如数据库配置、中间件定义、模板设置等。

7.-urls.py - URL和函数对应关系。

8.-wsgi.py - 底层请求处理入口【同步】。在 Django 3.0 及以下版本中,这个文件用于配置 WSGI 服务器,WSGI 是 Web 服务器网关接口,用于与 Web 服务器通信。

9.-manage.py - 这是一个命令行工具,用于管理 Django 项目的生命周期。通过运行 manage.py 后面的不同命令,可以执行如数据库迁移、运行开发服务器、创建超级用户等操作。

10.my_env - 这个文件夹代表了一个虚拟环境。

11.Include - Include文件夹是Python虚拟环境的一部分,提供必要的头文件以支持C语言编写的Python模块。激活虚拟环境时,Python解释器会在此文件夹中查找.h头文件和相应的库文件(.pyd.so),以运行C扩展。

12.Lib - 这个文件夹可能用于存放项目依赖的 Python 库或第三方包,但它不是 Django 标准项目结构的一部分。

13.Scripts - 这个文件夹通常包含用于执行脚本的批处理文件或 shell 脚本,用于 Windows 系统上的命令行操作。

14.pyvenv.cfg - 这个文件是 Python 虚拟环境的配置文件,定义了虚拟环境的路径和特性。当你通过 python -m venv 命令创建虚拟环境时,这个文件会被自动生成。

补充:

django_blog/static-这个目录用于存储项目中的静态文件,如CSS、JavaScript和图像。这些文件不会被动态生成,而是直接提供给浏览器。 django_blog/templates-这个目录用于存储项目的HTML模板文件。这些模板通常包含HTML结构和Django模板标记,用于渲染动态内容。 django_blog/apps.py-这个文件定义了Django应用程序的配置,包括应用程序的名称和其他元数据。 django_blog/migrations-这个目录包含数据库迁移文件。Django使用迁移来管理数据库模式的变化,使你可以轻松地更新数据库结构。 django_blog/pycache-这个目录包含Python编译的缓存文件,用于提高导入速度。

这些文件和目录是一个标准的Django项目的基本组成部分,可以根据项目的需要添加其他文件和目录。它们共同构建了我们的Web应用程序,提供了项目的配置、路由、模板、静态文件等功能。通过编辑这些文件,可以定制和扩展我们的Django应用程序。

2.settings.py

BASE_DIR

BASE_DIR = Path(__file__).resolve().parent.parent

定义项目根目录,它通过获取当前文件(__file__)的目录路径,然后向上移动两个目录层次来确定。这通常是为了确保无论项目结构如何变化,BASE_DIR 都能正确指向项目的根目录。

SECRET_KEY

SECRET_KEY = '*************************'

SECRET_KEY 是Django的一个关键设置,用于签署cookies、加密密码等。在开发环境中,这里给出的是一个示例密钥,它以"django-insecure-"开头,表明这个密钥是不安全的。在生产环境中,应该生成一个强随机性的密钥,并确保它不被泄露。

DEBUG

DEBUG = True

调试设置。EBUG 设置为True表示开启了开发模式。在开发模式下,Django会提供额外的调试信息,如错误页面的详细追踪信息。出于安全考虑,生产环境应该关闭调试模式(设置为False)。

ALLOWED_HOST

ALLOWED_HOSTS = []

ALLOWED_HOSTS 是一个列表,用于定义允许访问该Django应用的主机名。在生产环境中,你需要将部署应用的服务器的域名或IP地址添加到这个列表中。在开发环境中,通常保持为空列表或者设置为['*']来允许所有主机访问。

INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    #在此处添加加自己的应用或第三方模块应用
]
IN

STALLED_APPS是 Django 框架中的一个设置,用于指定项目中激活的应用程序列表。

'django.contrib.admin'

这是 Django 的内置后台管理,管理员可以进行简单数据库的增删改查。

'django.contrib.auth'

这个应用程序提供了用户登录和用户认证功能。

'django.contrib.contenttypes'

它提供了对内容类型的管理功能。这个应用的核心是一个名为 ContentType 的模型,它可以记录Django项目中所有模型的元数据(metadata),包括每个模型的名称、应用和字段等信息。

'django.contrib.sessions'

这个应用程序提供了会话框架,用于跟踪用户在浏览器中的会话。会话是临时存储用户特定数据的一种方式。

'django.contrib.messages'

这个应用程序提供了一个小工具,用于在用户之间发送消息。这可以用于创建简单的通知系统,或者作为用户之间通信的一种方式。

'django.contrib.staticfiles'

静态文件处理,如CSS、JavaScript和图片。它允许你将这些文件与你的应用程序分离,并在生产环境中高效地提供这些文件。

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',
    
]

中间件的配置。(中间件是Django框架中的一种机制,它允许你在请求的生命周期中注入自定义的处理逻辑。每个中间件组件负责处理请求和响应的特定方面,例如安全性、会话管理、跨站请求伪造(CSRF)保护等。)

'django.middleware.security.SecurityMiddleware' 提供了一些安全增强的功能,例如设置HTTP响应头来防止点击劫持和内容嗅探等攻击。它还负责处理一些安全相关的HTTP头部,如X-Content-Type-OptionsX-XSS-Protection

'django.contrib.sessions.middleware.SessionMiddleware' 负责处理用户会话。它允许你存储和访问用户特定的数据,这些数据在用户浏览网站时保持不变。会话数据可以存储在客户端的cookies中,或者服务器端的数据库中。

'django.middleware.common.CommonMiddleware' 提供了一些常见的功能,如URL重写、app名称的解析以及对HTTP请求方法的规范化处理。

'django.middleware.csrf.CsrfViewMiddleware' 提供了跨站请求伪造(CSRF)的保护。它会确保所有状态改变的请求都包含了正确的CSRF令牌。这是一个重要的安全特性,用于防止恶意网站利用用户的登录状态进行攻击。

'django.contrib.auth.middleware.AuthenticationMiddleware' 处理用户认证。它将用户对象关联到请求中,使得在处理视图时可以访问到当前认证的用户信息。如果请求来自未经认证的用户,request.user 将会是匿名用户(AnonymousUser)。

'django.contrib.messages.middleware.MessageMiddleware' 负责处理用户消息。它允许你在视图中创建消息,并通过cookies或其他机制将这些消息传递给用户。用户可以在页面上显示这些消息,以便提供反馈或通知。

'django.middleware.clickjacking.XFrameOptionsMiddleware' 用于防止点击劫持攻击。它设置HTTP响应头X-Frame-Options,这个头部可以告诉浏览器是否允许在除了发起请求的那个域之外的地方嵌入当前页面。

这些中间件按照它们在MIDDLEWARE列表中的顺序执行。每个中间件都有能力对请求或响应进行修改,或者决定是否继续执行下一个中间件。正确配置中间件对于确保Django应用的安全性、功能性和性能至关重要。

ROOT_URLCONF

ROOT_URLCONF = 'django_blog.urls'

根路由。指向项目总路由。

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. 模板后端: 'BACKEND': 'django.template.backends.django.DjangoTemplates' 指定了Django使用的模板引擎后端。这里使用的是Django内置的模板系统,DjangoTemplates

  2. 模板目录: 'DIRS': [] 是一个空列表,表示除了Django默认的模板目录外,项目中没有额外定义模板目录。如果需要添加自定义的模板目录,可以在该列表中添加对应的路径。

  3. 应用的模板目录: 'APP_DIRS': True 表示启用应用的模板目录。当设置为True时,Django会自动在每个应用的templates子目录中查找模板文件。

  4. 模板选项: 'OPTIONS' 是一个字典,包含了模板引擎的一些额外选项。

  5. 上下文处理器: 'context_processors' 是一个列表,包含了一系列的上下文处理器。上下文处理器是Django模板系统中的一个功能,它允许你在每个模板渲染之前自动添加一些变量到模板的上下文中。

    • 'django.template.context_processors.debug':添加debug变量到模板上下文中,用于显示是否开启了调试模式。

    • 'django.template.context_processors.request':添加request变量到模板上下文中,它包含了当前的请求对象,可以用来获取请求相关的信息。

    • 'django.contrib.auth.context_processors.auth':添加auth相关的上下文处理器,它提供了userperms等变量,用于处理用户认证相关的信息。

    • 'django.contrib.messages.context_processors.messages':添加messages变量到模板上下文中,它提供了一个消息框架,用于在不同的模板之间传递消息。

这个模板配置确保了Django模板引擎的正常工作,并且通过一系列的上下文处理器,为模板提供了丰富的上下文变量,方便在模板中使用。开发者可以根据项目的需要,添加或修改这些配置,以达到预期的功能和效果。

WSGI_APPLICATION

WSGI_APPLICATION = 'django_blog.wsgi.application'

WSGI_APPLICATION 设置是Django项目与WSGI兼容服务器通信的关键配置,确保了Web服务器能够正确地将请求传递给Django应用程序,并获取响应。

DATABASES

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

数据库配置。Django默认自带使用sqlite3数据库。

配置为MySQL数据库

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   
        'NAME': '数据库名字',   
        'USER': '用户名',  #默认为root
        'PASSWORD': '密码',  
        'HOST': 主机地址;   
        'PORT': '3306',      
    }
}

AUTH_PASSWORD_VALIDATORS

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',
    },
]

密码器验证配置。

'django.contrib.auth.password_validation.UserAttributeSimilarityValidator' 这个验证器检查新密码是否与用户的其他个人信息(如用户名、电子邮件等)相似。如果相似,它将拒绝这个密码,以防止用户选择容易猜到的密码。

'django.contrib.auth.password_validation.MinimumLengthValidator' 这个验证器确保密码达到一定的最小长度。默认情况下,它要求密码至少有9个字符长。这是为了提高密码的安全性,因为较长的密码更难被破解。

'django.contrib.auth.password_validation.CommonPasswordValidator' 这个验证器检查密码是否是一个常见的密码。它通常会有一个预定义的常见密码列表,如果新密码在这个列表中,验证器将拒绝这个密码。

'django.contrib.auth.password_validation.NumericPasswordValidator' 这个验证器确保密码至少包含一个数字。这是为了增加密码的复杂性,使得密码不仅仅由字母组成,从而更难被猜测。

LANGUAGE_CODE

LANGUAGE_CODE = 'en-us'

语言配置。'en-us'-默认语言为英文

TIME_ZONE

TIME_ZONE = 'UTC'

时区配置。'UTC'-默认为协调世界时,是目前国际上最广泛采用的时间标准。中国大陆的标准时间是UTC+8,即比UTC时间快8个小时。

USE_I18N

USE_I18N = True

用于指示Django是否应该启用国际化(Internationalization,简称 i18n)功能。国际化是指使软件能够支持多种语言和文化环境的过程。

USE_TZ

USE_TZ = True

指示Django是否应该启用时区支持。

STATIC_URL

STATIC_URL = 'static/'

用于指定静态文件的基本URL。通过设置STATIC_URL,可以告诉Django如何访问和提供这些静态文件。默认也是从应用下进行查找。

DEFAULT_AUTO_FIELD

 DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

指定在模型中创建自动增长的字段(AutoField)时默认使用的字段类型。

DEFAULT_AUTO_FIELD 设置为 'django.db.models.BigAutoField' 时,Django 会在模型中自动创建使用 BigAutoField 类型的字段作为自增主键。BigAutoField 是Django 3.0引入的一个新字段类型,它是 AutoField 的一个子类,用于创建自动增长的整数字段,其大小为64位。

使用 BigAutoField 可以确保在需要存储非常大的整数值时,字段有足够的空间来存储这些值。这对于预计会有大量数据插入的应用程序来说尤其重要,因为它可以防止在将来因为字段大小限制而导致的问题。

3.关于APP

PycharmProjects                 
    django_blog
        -django_blog
            -_init_.py
            -asgi.py
            -settings.py
            -urls.py
            -wsgi.py
        -manage.py
        -app01
            -migrations  
                -..
                -...
            -models.py   
            -apps.py     
            -admin.py    
            -test.py     
            -views.py 
        - app02
            -migrations  
            -models.py
            -apps.py
            -admin.py
            -test.py
            -views.py
    my_env
        Include
        Lib
        Scripts
        pyvenv.cfg
 

-migrations: 这个目录包含与数据库迁移相关的文件。Django使用迁移来跟踪您的模型(在models.py中定义的数据结构)随时间的变化,并将这些变化应用于数据库。

-models.py: 这个文件定义了应用程序的数据模型。它使用Django的ORM(对象关系映射)来创建与数据库表相对应的Python类。

-apps.py: 这个文件定义了Django应用程序的配置。它通常包含元数据,如应用程序的名称和版本。

-admin.py: 这个文件用于配置Django的管理界面。您可以在这里注册模型,以便它们出现在Django的后台管理界面中,从而可以轻松地管理数据。

-test.py: 这个文件通常用于存放应用程序的测试用例。Django鼓励编写测试来确保代码的稳定性和可靠性。

-views.py: 这个文件包含视图函数或类,它们处理用户的请求并返回响应。视图可以返回HTML页面、重定向、JSON数据等。

4.参考文章

  • 37
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值