Django Web應用開發實戰第二章

一、基本配置信息

"""
Django settings for myblog project.

Generated by 'django-admin startproject' using Django 2.2.

For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""

import os
# 項目路徑
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# 密鑰配置
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'y#-jmza4^h1bq!wj&_8y0t8x1j+t@uzm)1-t816ln)g-7b@roh'

# SECURITY WARNING: don't run with debug turned on in production!
# 調試模式
DEBUG = True
# 域名訪問權限
ALLOWED_HOSTS = ['*']


# Application definition
# App列表
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'account',  # 用戶信息
    'album',  # 圖片牆信息
    'article',  # 文章信息
    'interflow',  # 留言板信息
]
  • 項目路徑BASE_DIR:主要通過os模塊讀取當前項目在計算機系統的具體路徑,該代碼在創建項目的時候自動生成,一般不需要更改。
  • 密鑰配置SECRET_KET:這是一個隨機值,在項目創建的時候自動生成,一般情況不需要更改。主要用於重要數據的加密處理,提高項目的安全性,避免遭到攻擊者的惡意破壞。密鑰主要用於用戶密碼、CSRF機制和會話Session等數據加密。
    •   用戶密碼:Django內置一套Auth認證系統,該系統具有用戶認證和存儲用戶信息等功能。在創建用戶的時候,將用戶密鑰進行加密處理,保證用戶安全性。
    • CSRF機制:該機制主要用於表單提交,防止竊取網站的用戶信息來製造惡意請求。
  • 會話Session:Session的信息存放在Cookie中,以一串隨機字符串表示,用於標識當前訪問網站的用戶的身份,記錄相關用戶信息。
  • 調試模式DEBUG:該值爲布爾值。如果在開發調試階段,那麼應該設置爲True,在開發調試過程中會自動檢測代碼是否更改,根據檢測結果執行是否刷新重啓系統。如果項目部署上線,那麼應該將其改爲False,否則會泄露項目的相關信息。
  • 域名訪問權限ALLOW_HOSTS:設置可訪問的域名,默認值爲空列表。當DEBUG=True並且ALLOW_HOSTS=[]時,項目只允許已localhost或127.0.0.1在瀏覽器上訪問。當DEBUG=False時,ALLOW_HOSTS是必填項,否則程序無法啓動,如果想允許所有域名訪問可設置ALLOW_HOSTS=['*']。
  • App列表INSTALLED_APPS:告訴Django有哪些App。在項目創建時,已有admin、auth和session等配置信息,這些都是Django內置的應用功能。如下:
    •   admin:內置的後臺管理系統。
    • auth:內置的用戶認證系統。
    • contenttypes:記錄項目中所有的model元數據(Django的ORM框架)。
    • sessions:Session會話功能,用於標識當前訪問網站的用戶身份,記錄相關用戶信息。
    • messages:消息提示功能。
    • staticfiles:查找靜態資源路徑。

 

二、資源文件配置

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

# 資源路由
STATIC_URL = '/static/'
# 資源集合
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'publicStatic')]
# 資源部署
# STATIC_ROOT = os.path.join(BASE_DIR, 'publicStatic')


# 設置媒體資源保存路徑
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

Django資源文件配置分爲靜態資源和媒體資源。

  • Debug模式下只能識別項目應用APP的static文件夾裏的靜態資源,如果文件夾改爲其他名字,Django就無法識別;若將static文件夾放在別的路徑下,Django也是無法識別的。
  • 若資源路由STATIC_URL的值爲/static/,則瀏覽器訪問靜態的網站必須爲static。
  • 由於STATIC_URL的特殊性,若靜態文件夾存放在項目的根目錄或定義多個靜態文件夾,可使用資源集合STATICFILES_DIRS列表。
  • STATIC_ROOT作用是在服務器上部署項目,實現服務器和項目之間的映射。收集(python manage.py collectstatic)整個項目的靜態資源並放在一個新的文件夾,然後由該文件夾與服務器之間構建映射關係。Debug=True時,Django提供靜態文件代理服務,無需設置。
  • 媒體資源和靜態資源可以共存,兩者可獨立運行,互不影響。
  • 配置媒體資源後,還需要將media文件夾註冊到Django裏
  • from django.contrib import admin
    from django.urls import path, re_path
    
    # 導入項目應用
    from .views import index
    # 配置媒體文件夾media
    from django.views.static import serve
    from django.conf import settings
    
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', index),
        # 配置媒體文件的路由地址
         re_path('meida/(?P<path>.*)', serve, ('document_root': settings.MEDIA_ROOT), name='media'),
    ]

     

三、模板文件配置

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')
                 ],
        '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:定義模板引擎,用於識別模板裏的變量和指令。內置模板引擎有DjangoTemplates和jinja2.jinja2,每個模板引擎都有自己的變量和指令語法。
  • DIRS:設置模板所在路徑。默認空列表。根目錄的templates存放共用的模板文件。
  • APP_DIRS:是否在app裏查找模板文件,默認True。
  • OPTIONS:用於填充在RequestContext的上下文(模板裏的變量和指令),一般情況下不做任何修改。

 

四、數據庫配置

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        # 'ENGINE': 'django.db.backends.mysql',
        #'NAME': DB_NAME,
        #'USER': DB_USER,
        #'PASSWORD': DB_PASSWORD,
        #'HOST': DB_HOST,
        #'PORT': DB_PORT,
    }
}
  • 不同數據庫需設置不同數據庫引擎,Django提供4種數據庫引擎
    • 'django.db.backends.mysql'
    • 'django.db.backends.postgresql'
    • 'django.db.backends.sqlite3'
    • 'django.db.backends.oracle'
  • 使用mysql需要做下適配mysqldb不支持python3,Django2.0以上版本不再使用mysqldb作爲MySQL的連接模塊,而選擇mysqlclient模塊,兩者使用上沒有太大差異。也可使用pymysql模塊連接MySQL,需在MyDjango的init文件裏設置數據庫連接模塊
    •   
      import pymysql
      
      pymysql.install_as_MySQLdb()

       

  • 數據庫配置列表可配置多個數據庫連接

 

五、中間件

  中間件(Middleware)是一個用來處理Django的請求(Reuqest)和響應(Response)的框架級別的鉤子,它是一個輕量級、低級別的插件系統,用於在全局範圍內改變Django的輸入和輸出。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.sessions.middleware.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'corsheaders.middleware.CorsMiddleware',
]

  

 

  •  每個中間件的設置順序是固定的,若隨意變更中間件很容易導致程序異常
  • SecurityMiddleware:內置的安全機制,保護網站和用戶的通信安全
  • SessionMiddleware:會話Session功能
  • LocaleMiddleware:國際化和本地化功能
  • CommonMiddleware:處理請求信息,規範化請求內容
  • CsrfViewMiddleware:開啓CSRF防護功能
  • AuthenticationMiddleware:開啓內置用戶認證系統
  • MessageMiddleware:開啓內置消息提示功能
  • XFrameOptionMiddleware:防止惡意程序單擊劫持
  • CorsMiddlware(django-cors_headers第三方庫):設置跨域訪問

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章