• 配置Django


    一、简述

      settings.py文件本质上是一个Python模块,带有模块级别的变量。

      下面是一些示例设置:

    ALLOWED_HOSTS = ['www.example.com']
    DEBUG = False
    DEFAULT_FROM_EMAIL = 'webmaster@example.com'

      注:当DEBUG为False时,必须设置ALLOWED_HOSTS的值。

      配置settings.py时:

       ·不允许出现Python层面的语法错误;

       ·可以使用普通的Python语法动态地设置,例如:MY_SETTING = [str(i) for i in range(30)]

       ·可以从其它设置文件导入值。

    二、指定配置文件

      当使用Django时,必须告诉它要使用哪个配置文件来启动服务。也就是给环境变量DJANGO_SETTINGS_MODULE赋值。这个值要使用Python路径的语法,例如mysite.settings,而不是操作系统的文件路径语法。注意,被设置的配置文件应该在Python的导入查找路径中。

      默认情况下,我们是不需要设置这个变量的,直接启动项目就可以。但是,有时候就会有需要使用别的配置启动项目的情形。

      django-admin命令:

      当使用django-admin命令时, 可以设置临时环境变量,或者每次运行该工具时显式地指定配置文件。

      例如在Unix Bash shell下:

    export DJANGO_SETTINGS_MODULE=mysite.settings
    django-admin runserver

      在Windows shell下,也就是cmd环境:

    set DJANGO_SETTINGS_MODULE=mysite.settings
    django-admin runserver

      使用--settings命令行参数可以手工指定:

    django-admin runserver --settings=mysite.settings

      如果是在服务器环境中,比如mod_wsgi网关接口,需要告诉WSGI,准备使用哪个设置文件。这可以使用os.environ实现:

    import os
    
    os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

      再次强调,所有上面的操作都要求mysite.settings必须在查找路径中,否则要用绝对路径。

    三、默认配置

      Django的配置文件并不需要定义所有的选项,每个选项都有一个默认值,这些默认值位于django/conf/global_settings.py模块中。

      Django加载配置的顺序是这样的:

       1.从global_settings.py中加载默认配置;

       2.从指定的配置文件中加载(通常是settings.py),如有必要则覆盖global_settings.py中的默认配置。

      有一个简单的方法可以查看当前有哪些设置与默认的设置不一样了,也就是python manage.py diffsettings命令。

    四、在Django环境中使用settings

      所谓的在Django环境中,指的是要使用settings的模块(可以简单的理解为局域网内主机),必须是Django工作状态中能够链接的模块,不能是孤零零,额外的一个Python脚本(外部主机)。这时,可以通过导入django.conf.settings来使用配置文件。 例如:

    from django.conf import settings
    
    if settings.DEBUG:
        # Do something

      注意,django.conf.settings不是一个模块,而是一个对象。 所以不可以单独导入每个配置项:

    from django.conf.settings import DEBUG  # 这是错误的做法

    五、不要在运行时更改设置

      请不要在Django项目运行时改变设置。 例如,不要在视图中这样做:

    from django.conf import settings
    
    settings.DEBUG = True   # 不要这么做

    六、注意安全

      因为settings.py经常会包含敏感的信息,例如管理员、远程主机、数据库的用户名或密码,应该尽一切可能来限制对它的访问。 例如,修改它的文件权限使得只有你和Web服务器使用者可以读取它。

    七、添加自己的配置项

      如果要添加自己的配置项,需遵循以下准则:

       ·配置项名称必须全为大写。

       ·不要使用一个已经存在的设置

    八、自定义默认配置

      如果想让默认值来自其它地方而不是django.conf.global_settings,可以传递一个提供默认设置的模块或类作为default_settings参数(或第一个位置参数)给configure()方法调用。

      在下面的示例中,默认的设置来自myapp_defaults,并且单独设置DEBUG为True,而不论它在myapp_defaults中的值是什么:

    from django.conf import settings
    from myapp import myapp_defaults
    
    settings.configure(default_settings=myapp_defaults, DEBUG=True)

      下面的示例和上面一样,只是使用myapp_defaults作为一个位置参数:

    settings.configure(myapp_defaults, DEBUG=True)

      正常情况下,还是不要用这种方式覆盖默认值。Django的默认配置文件还是很可靠的,你可以安全地使用它们。 注意,如果使用自己写的默认模块,它将完全取代Django的默认模块,必须指定每个可能用到的配置项的值。 完整的配置项清单,参考django.conf.settings.global_settings模块。

    九、configure()或DJANGO_SETTINGS_MODULE二者只能用一

      如果没有设置DJANGO_SETTINGS_MODULE环境变量,必须使用configure()方法来加载配置。。

      如果没有设置DJANGO_SETTINGS_MODULE,也没有调用configure(),在首次调用配置文件时Django 将引发一个ImportError异常。也就是我们最常见的问题:为啥我启动不了Django?为什么我的脚本不能调用Django的功能?为什么我的代码无法链接到Django内部?

      如果设置了DJANGO_SETTINGS_MODULE,并访问了一下设置,然后又调用configure(),Django 将引发一个RuntimeError异常,表示已经有配置,不要重复配置。

      有个属性正好可以用于种情况,防止出现异常:

    from django.conf import settings
    if not settings.configured:
        settings.configure(myapp_defaults, DEBUG=True)

      总结:configure()DJANGO_SETTINGS_MODULE只能用一个,并且只能用一次。不可以两个都用和都不用。

  • 相关阅读:
    es6-14 Promise
    微信公众号支付 出现的问题
    RedisDesktopManager 打开报0xc000007b程序错误
    easyui 下对radio的选中操作
    谷歌浏览器(Chrome)禁止浏览器缓存 设置
    oracle 中start with 的用法
    Spring JdbcTemplate 调用存储过程
    Object 转化为String时的一个问题 null->"null"
    android/ios js 启动apk
    nexus2.1.2的配置
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12560271.html
Copyright © 2020-2023  润新知