×
广告

Django基础配置介绍

96
全栈运维
2017.08.24 14:34* 字数 924

Abstract

在上一篇Django环境搭建完毕,默认会在生成一个和项目同名称的文件夹,Django入口的配置都是在该目录下的settings.py

比如项目名称为 simpleblog,则配置文件为simpleblog、simpleblog/settings.py


配置介绍

Debug

DEBUG 配置默认为 True, 设置为TRUE会暴露出一些出错信息或者配置信息以方便调试。所以一般在开发测试阶段我们设置其为TRUE, 上线之后设置其为FALSE,防止配置信息或者敏感出错信息泄露。

ALLOWED_HOSTS

ALLOWED_HOSTS 是为了限定请求中的host值,以防止黑客构造包来发送请求。只有在列表中的host才能访问。

强烈建议不要使用*通配符去配置,另外当DEBUG设置为False的时候必须配置这个配置,否则会抛出异常。

配置模板如下:

ALLOWED_HOSTS = [
    '.example.com',  # Allow domain and subdomains
    '.example.com.',  # Also allow FQDN and subdomains
    '139.198.xxx.xxx', # 测试环境我们一般允许自己的主机IP访问即可
]

Refer to https://docs.djangoproject.com/en/1.8/ref/settings/#allowed-hosts

INSTALLED_APPS

一般在项目中我们会通过python manage.py startapp appname 创建自己的APP,当然这个并不是必须的。如果创建了,则需要将其加入到 INSTALLED_APPS 数组中才可以被访问到。

配置模板如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # config your app here
    'appname',
]

数据库配置

Django 默认配置的sqlite数据库,如果只是我们测试用这个就够了,但是实际中我们大多项目都会选择使用MySQL等。

目前Django官网默认支持的数据库有

  • MySQL
  • PosgreSQL
  • Oracle
  • Sqlite

如果你的项目适合用MongoDB,你可以参考一下连接
https://staltz.com/djangoconfi-mongoengine/#/

这里给出MySQL配置的例子

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'simpleblog',
        'USER': 'blog',
        'PASSWORD': 'blog',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'OPTIONS' : {
            'init_command': 'SET storage_engine=INNODB', 
            'charset':'utf8',
        }
    }
}

Refer to: https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-DATABASES


模板配置

在setting.py中 关于模板的配置都在TEMPLATES 数组中,这个里面需要关于的有两个配置:

  • APP_DIRS
  • DIRS

APP_DIRS默认配置为True,表示会在APP的 template/myapp/ 下面寻找模板

DIRS默认为空,当需要配置一些多个应用之间公用的模板文件的时候,可以新增一个目录然后配置到这个配置中,比如:

在项目根目录下新增templates目录(和myapp同级)

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'),],
        'APP_DIRS': True,
        'OPTIONS': {
... ...
]

Refer to: https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-TEMPLATES


静态文件配置

静态文件相关常见的配置有一下三个

  • STATIC_URL
  • STATIC_ROOT
  • STATICFILES_DIRS

对于STATIC_URL 官网是这么介绍的:

  • 确保在INSTALLED_APPS 中添加了django.contrib.staticfiles
  • 在setting.py中配置STATIC_URL='/static/'
  • 在模板中访问静态资源

访问有两种方式,第一种直接绝对路径 /static/my_app/example.jpg ;第二种用Django的static语法

{% load static %}
![]({% static )

默认找到 my_app/static/my_app/example.jpg


另外一般我们如果有多个应用的时候,有些静态文件是多个应用之间可以互相公用的,这个时候就用到了STATICFILES_DIRS

比如我们在项目目录下新增一个STATIC目录(和APP目录同级)将其配置到STATICFILES_DIRS里面,或者其他地方。如下:

STATICFILES_DIRS = (
  os.path.join(BASE_DIR, 'static/'),
  '/opt/static/',
)

比如这里有个CSS文件static/css/blog.css,在模板中我们配置如下:{% static 'css/blog.css' %} 即可


对于STATIC_ROOT是为了方便项目发布的时候对外统一管理静态资源,可以使用命令collectstatic 把项目所有的静态资源收集起来存放到 STATIC_ROOT,然后在比如Nginx中配置静态资源访问路径

# in django setting
STATIC_ROOT = '/opt/nginx/static'

# in nginx config
location /static {
        # alias /project/django/simpleblog/static;
        alias /opt/nginx/static;
    }

Refer to:

----------------------------------------------更多精彩请关注-------------------------------------

公众号: DailyJobOps

Django
Web note ad 1