zoukankan      html  css  js  c++  java
  • Django settings.py配置文件注解(含静态文件和上传文件配置)

    基于Django1.11配置文件settings.py

    import os
    import sys
    
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    # 这里用到了python中一个神奇的变量"__file__",这个变量可以获取到当前文件的路径(含文件名)
    # 再来一个os.path.dirname()就是获得上一级目录
    # "BASE_DIR"就是工程根目录
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    # 如果包含外部的App或者多个App放在一个目录里,一般需要把这个目录右键Mark成Source Root后,可能还需要将其添加到Python路径中,否则运行manage.py会报错No module named 'xx'.
    # 比如"extraapps"是外部APP上级目录Python包(需Mark成Source Root)
    # 1)sys.path.insert(0, 'path'):定义搜索路径的优先顺序,序号从0开始,表示最大优先级,属于临时搜索路径,程序退出后失效
    # 2)sys.path.append('path'):与insert()类似,只不过这是追加方式
    # 如:sys.path.append(os.path.join(BASE_DIR, 'extraapps'))
    
    # Quick-start development settings - unsuitable for production
    # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/
    
    # 产品密钥。创建Django项目时自动分配的产品密钥,请使用原自动分配的产品密钥替换此行!!
    SECRET_KEY = 'ug4o-53gk-tuxn@@69g_jr8aqq%&e183kr=xw6reg7247&jam='
    
    # 上线时必须将DEBUG设为False
    DEBUG = True
    
    # 指定被访问的主机。若元素为'*',表示所有同一局域网内的网络均可被访问
    ALLOWED_HOSTS = ['localhost', '127.0.0.1']
    
    # App注册。新建的app务必在此注册!
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # 'polls',                        # 我的APP
        # 'django.contrib.humanize',      # 人类可读性过滤器
        # 'django.contrib.sitemaps',      # 网站地图
    ]
    
    # 自定义的auth APP的User模型,继承抽象模型AbstractUser
    # AUTH_USER_MODEL = 'appname.UserModelName'
    
    # 自定义的用户登录验证后端,继承ModelBackend类,重写authenticate()方法
    # AUTHENTICATION_BACKENDS = ['apps.myuser.views.CustomBackend', ]
    
    # 中间件
    MIDDLEWARE = [
        # 'django.middleware.cache.UpdateCacheMiddleware',           # 缓存更新,必须在第一个!(缓存全站时)
        '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',     # 依赖于会话Session
        'django.middleware.clickjacking.XFrameOptionsMiddleware',   # 防止点击劫持
        # 'django.middleware.cache.FetchFromCacheMiddleware',        # 缓存读取,必须在最后一个!(缓存全站时)
    ]
    
    ROOT_URLCONF = 'mysite.urls'  # URL路由主文件,这里需要据实修改
    
    TEMPLATES = [
        {
            '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',
                ],
            },
        },
    ]
    
    WSGI_APPLICATION = 'mysite.wsgi.application'  # 这里需要据实修改
    
    # 数据库。可配置多个,"default"为必须,但可以为空
    # https://docs.djangoproject.com/en/1.11/ref/settings/#databases
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    # 多数据库路由。写入自定义的路由Router类路径,为空则使用"default"数据库
    DATABASE_ROUTERS = []
    
    # 密码验证
    # https://docs.djangoproject.com/en/1.11/ref/settings/#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',
        },
    ]
    
    # 国际化
    # https://docs.djangoproject.com/en/1.11/topics/i18n/
    LANGUAGE_CODE = 'en-us'       # 系统语言。中文简体是'zh-hans'(此时USE_I18N必须为True),Admin后台管理系统的页面语言随之改变
    TIME_ZONE = 'Asia/Shanghai'   # 时区
    USE_I18N = True               # 国际翻译
    USE_L10N = True               # 本地化
    USE_TZ = False                # 若使用了本地时间,必须设为False!!(默认值True)
    
    # 邮箱服务配置
    EMAIL_HOST = 'xxx.com.cn'   # 发送者邮箱服务器
    EMAIL_PORT = 25
    EMAIL_HOST_USER = ''        # 发送者用户名(邮箱地址)
    EMAIL_HOST_PASSWORD = ''    # 发送者密码
    EMAIL_USE_SSL = False    # 默认值False
    
    # 静态文件配置 (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/1.11/howto/static-files/
    # 静态文件的访问目录,自动指向"STATIC_ROOT"或"STATICFILES_DIRS"的目录值。用于程序中,如{% static '静态文件指向目录下的子路径' %}
    # 这里的静态文件URL,即/static/通常用于模板中调用,另外也用于Apache或Nginx配置文件中的静态文件访问配置(生产策略!)
    # 模板调用示例:{% static 'images/123.jpg' %}
    STATIC_URL = '/static/'
    # 这里的静态文件ROOT是生产环境根目录!仅用于生产!当运行"python manage.py collectstatic"的时候,会自动将STATICFILES_DIRS以及各APP中static的所有的文件复制收集到STATIC_ROOT
    # 把这些文件放到一起是为了用Apache、Nginx等上线部署的时候更方便
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
    # 多个APP的静态文件配置。不能与STATIC_ROOT冲突!先在各个APP下新建static文件夹,然后把JS、CSS、Image等静态文件放在该文件夹下,例如:apps/app1/static/js(css,images)、apps/app2/static/js(css,images)等
    # STATICFILES_DIRS = [os.path.join(BASE_DIR, 'apps', 'app1', 'static'), os.path.join(BASE_DIR, 'apps', 'app2', 'static'), ]
    
    # 媒体文件(用户上传的文件)配置,类似于上面的静态文件配置
    # 不能像静态文件那样调用,而是先在settings中进行模板配置,即在"TEMPLATES"中的"context_processors"里添加'django.template.context_processors.media'
    # (调试策略!手动指定视图访问media文件目录,部署生产请注释掉) 添加URL路由,如:url(r'^media/(?P<path>.*)$', static.serve, {'document_root': settings.MEDIA_ROOT})
    # 模板调用示例:{{ MEDIA_URL }}{{ modelobj.fieldname }}
    MEDIA_URL = '/media/'
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    
    # 缓存后端配置(Django支持许多开箱即用的缓存后端)
    # Django默认缓存后端是本地内存(LocMemCache)。虚拟DummyCache用于开发(实际上并不缓存,它只是实现缓存接口而不做任何事情。)
    # Django支持的缓存类型:Memcached(MemcachedCache)、本地内存(LocMemCache)、数据库(DatabaseCache)、文件(FileBasedCache)、虚拟(DummyCache)
    # Memcached缓存数据库下载与安装教程:http://www.runoob.com/memcached/window-install-memcached.html(菜鸟教程提供)
    # 下载安装Memcached本身后,您还需要安装其依赖模块。最常见的两个依赖模块是python-memcached和pylibmc(pip安装)
    # 设置缓存后端后,使用缓存的方式:最简单是缓存整个站点(如下)、缓存每个视图(使用装饰器@cache_page(expire, cache='default'))等
    # 在中间件列表中的[开头]和[末尾]添加如下2个中间件:'django.middleware.cache.UpdateCacheMiddleware'和'django.middleware.cache.FetchFromCacheMiddleware'
    # 测试,进入Python shell:
    # >>> from django.core.cache import cache
    # >>> cache.set('test', 'successful', 60)       第一个参数是key,第二个参数value,第三个参数是过期时间(秒)
    # >>> cache.get('test')               其他方法:set_many(),get_many(),delete(),delete_many(),clear()
    # CACHES = {
    #     'default': {
    #         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',  # 取决于您选择的Memcached绑定
    #         'LOCATION': ['127.0.0.1:11211', ],  # 缓存后端服务器位置,支持分布式,可多个
    #         'TIMEOUT': 5 * 60,  # 缓存超时,默认300s
    #         'OPTIONS': {
    #             'server_max_value_length': 2 * 1024 * 1024,  # 缓存最大值(这里的键值根据缓存类型不同而变化,一般默认也可)
    #         },
    #         'CACHE_MIDDLEWARE_ALIAS': 'DJCACHE',  # 用于存储的缓存别名
    #         'CACHE_MIDDLEWARE_SECONDS': 5 * 60,   # 每个页面应缓存的秒数
    #         'CACHE_MIDDLEWARE_KEY_PREFIX': '',    # 缓存键前缀。如果使用相同的Django在多个站点之间共享缓存,将其设置为站点名称(或其他)以防止发生密钥冲突
    #     }
    # }
    
    # 会话使用的缓存(CACHES),默认"default"
    # SESSION_CACHE_ALIAS = "default"
    # 会话缓存期限,默认2周
    # SESSION_COOKIE_AGE = 1209600
    # 会话生存期设置,浏览器关闭,则会话失效(可能对Chrome浏览器无效)。在登录视图get请求中添加语句"request.session.set_expiry(0)",对Chrome会有效
    SESSION_EXPIRE_AT_BROWSER_CLOSE = True  # 默认False

      至此,转载请注明出处。

    [ 本站相关链接:>>Django部署 ]

  • 相关阅读:
    Android开发之基本控件和详解四种布局方式
    Android开发之Activity的创建跳转及传值
    设计模式(十三):从“FQ”中来认识代理模式(Proxy Pattern)
    设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
    设计模式(十一):从文Finder中认识"组合模式"(Composite Pattern)
    设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)
    设计模式(八): 从“小弟”中来类比"外观模式"(Facade Pattern)
    设计模式(六):控制台中的“命令模式”(Command Pattern)
    设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
    设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
  • 原文地址:https://www.cnblogs.com/wcwnina/p/8540330.html
Copyright © 2011-2022 走看看