• 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第三方库):设置跨域访问
    实践出真知~
  • 相关阅读:
    vfork与fork的区别
    常见的六种设计模式以及应用场景
    Java中常见的集合类比较
    排序——总结
    排序——交换排序
    排序——选择排序
    排序——归并排序
    排序——基数排序
    排序——插入排序
    设计模式
  • 原文地址:https://www.cnblogs.com/NolaLi/p/13754952.html
Copyright © 2020-2023  润新知