【Django学习】03 资源 模板 数据库 中间件

系列文章目录

【Django学习】00 系列文章目录



前言

接上一篇的settings,本文来看一看其中涉及到的几类常用配置。
主要涉及:
1)static静态资源;
2)媒体资源配置;
3)模板;
4)数据库配置;
5)中间件。


一、静态资源配置

1.1 STATIC_URL

settings.py中关于静态资源的默认配置如下:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/
STATIC_URL = '/static/'

STATIC_URL表示资源路由,具体理解就是静态资源需通过路由x.x.x.x:8000/static/去访问获取。URL中的路由地址就是此处STATIC_URL的配置内容。
静态资源默认(调试模式DEBUG=True)是只能访问到应用内的static目录(见下文示例1)中的资源。

示例:
1)新建index应用,在其中创建static目录,存放pic1.jpeg图片。
此时运行项目后可通过URLhttp://127.0.0.1:8000/static/pic1.jpeg访问到该图片资源。
2)项目根目录下同样也创建static目录,存放不同内容、但与pic1.jpeg同名的图片。
运行项目后依旧是访问http://127.0.0.1:8000/static/pic1.jpeg,其结果显示是访问到应用index/static/中的图片资源。

1.2 STATICFILES_DIRS

若要访问到项目根目录下的static目录,此时需要在settings中配置STATICFILES_DIRS
STATICFILES_DIRS表示资源集合,其以列表形式展示。
将项目根目录下的static和应用中的static目录(此时可命名为其他,如Mystatic)同时写入到STATICFILES_DIRS中,之后的访问依旧是以STATIC_URL为路由(STATIC_URL配置保持不变)。

import os     # 需要导入os模块,用于拼接路径

STATIC_URL = '/static/'

STATICFILES_DIRS = [
	os.path.join(BASE_DIR, 'static'), 
	os.path.join(BASE_DIR, 'index/Mystatic'),
]

此时,不管是根目录下的static目录,还是应用中的Mystatic目录,它们包含的图片等资源均可通过x.x.x.x:8000/static/访问到。

1.3 STATIC_ROOT

STATIC_ROOT主要用于项目在服务器上部署时,进行相关的资源部署,以实现服务器和项目之间的映射(收集整个项目的静态资源并存放在一个新的文件夹,由该文件夹与服务器之间构建映射关系)。
当项目的配置属性DEBUG=True(调试模式)时,Django会自动提供静态文件代理服务,此时无需使用STATIC_ROOT

当DEBUG=False时,即项目进入生产环境中,此时Django不再提供静态文件代理服务,那么就需要在配置文件settings中设置STATIC_ROOT

STATIC_ROOT = os.path.join(BASE_DIR, 'ALLStatic')  # 项目根目录下ALLStatic文件夹

设置STATIC_ROOT后需要使用Django操作指令collectstaticpython manage.py collectstatic)来收集所有的静态资源,这些静态资源将全部保存在STATIC_ROOT所设置的文件夹里(也就是ALLStatic)。

二、媒体资源

媒体资源和静态资源可以同时存在,独立运行,互不影响。
媒体资源的配置属性为:MEDIA_URLMEDIA_ROOT
MEDIA_URL = '/media/' 设置媒体路由地址信息,其作用与静态资源的STATIC_URL相同。
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 获取media文件夹的完整路径信息。

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

配置属性完成后,需将media文件夹注册到Django中,若不进行注册,则在项目运行后无法通过/media/访问到资源。
在项目同名目录中的urls.py路由文件里,注册添加媒体资源路由信息:

from django.views.static import serve
from django.conf import settings
from django.urls import re_path
urlpatterns = [
    ...
	re_path('media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
]

三、模板配置

模板配置的话主要是配置模板的Backend(引擎)和DIRS(目录)。
这里只放了DTL(Django Templates Language)的配置(项目初建时的默认引擎),此时只需配置下DIRS目录即可,将项目根目录下的templates文件夹(没有该文件夹可自己创建)加进来(列表形式)。
APP_DIRS: True表示在应用里查找模板文件,即项目会深入到应用中查找应用内部的模板文件。
OPTIONS表示模板的一些配置选项,此处先不做变动。

TEMPLATES = [
    {
        # 模板引擎,有DjangoTemplates和jinja2.Jinja2
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, "templates")],
        'APP_DIRS': True,   # 是否在APP里查找模板文件
        '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',
            ],
        },
    },
]

关于Jinja2模板引擎,准备在后面的博文中介绍。

四、数据库

关于数据库的配置,上一文在介绍settings时写到过,这里再做进一步的介绍。

4.1 sqlite3

Django连接数据库,默认是连接sqlite3,在项目运行后会自动生成db.sqlite3数据库文件。
关于sqlite3,可自行百度,这里不做过多的阐述。

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

4.2 连接mysql配置

此时若想将数据库改成MySQL,则需要做一些配置上的变动。
1)激活虚拟环境,安装mysqlclient模块

pip install mysqlclient

2)MySQL数据库中创建项目对应的数据库django_db
3)settings中配置对应属性

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

4)数据迁移

python manage.py makemigrations
python manage.py migrate

上面两个关于数据迁移的命令,前面博文中也有提到过,其实就是对项目中定义的models模型文件进行读取并生成迁移文件(里面包含作用到数据库的操作指令),然后将该文件中的操作在数据库中进行执行,最终在对应数据库中生成相应数据表。

4.3 多数据库连接

此外,还可以同时连接到多个数据库上。
具体配置如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }'MyDjango': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'MyDjango',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '192.168.11.1',
        'PORT': '3306',
    }
}

在项目应用的模型中,若模型没有指定相应的数据库,则默认在key=default的数据库中生成;
可通过db_table属性来指定到目标数据库(对应的key):

class UserInfo(models.Model):
	...
	
	class Meta:
		db_table = "MyDjango"

五、中间件

中间件部分,我就做些简单介绍,一般情况下不做改动。

中间件是浏览器请求和服务器响应之间的一道道“门”,当请求发来时,需依次经过这一个个中间件,最后到达程序的视图处理部分,然后返回响应;响应在返回给浏览器时,也会依次经过这些中间件(顺序和前面请求经过时相反),最终到达浏览器端。
后续我们可以自定义中间件,来对一些请求或响应进行拦截或过滤,这部分后面慢慢学习。

下文中是做了个添加LocaleMiddleware操作,以支持内置功能显示中文。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',                    # 内置安全机制,保护用户与网站的通信安全
    'django.contrib.sessions.middleware.SessionMiddleware',             # 会话Session功能
    # 添加中间件LocaleMiddleware,使得Django内置功能支持中文显示
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',                        # 处理请求信息,规范化请求内容
    'django.middleware.csrf.CsrfViewMiddleware',                        # 开启CSRF防护功能
    'django.contrib.auth.middleware.AuthenticationMiddleware',          # 开启内置的用户认证系统
    'django.contrib.messages.middleware.MessageMiddleware',             # 信息提供功能
    'django.middleware.clickjacking.XFrameOptionsMiddleware',           # 防止恶意程序单击劫持
]

总结

本文是对settings文件的进一步理解,涉及到静态资源、媒体资源、模板配置、数据库和中间件。
基本上Django项目在创建时,都需要先对以上配置做改动,所以需做到熟记于心。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值