zoukankan      html  css  js  c++  java
  • 配置Django框架为生产环境的注意事项(DEBUG=False)

    问题描述:

    Django1.10版本中框架中settings.py配置文件

    配置文件settings.py配置了下面两项:

    DEBUG= False
    
    ALLOWED_HOSTS = ['*'] #这样可以让所有来源的ip访问到后台

    使用 python3 manager.py runserver后访问,发现没有css,js样式。

    网上查询得知:Django 关闭DEBUG模式后,就相当于是生产环境了,Django官网上指出如果是django框架一旦作为生产环境,那么它的静态文件访问接口就不应该从Django框架中走了,应该有独立的web环境,首推nginx 。

    我们知道在开发过程中,开发人员都喜欢在框架的根目录下创建一个statics目录,目录在根据里面有几个APP创建对应APP程序静态文件目录。

    举例如图:

    但是一旦放到生产环境(也就是关闭掉DEBUG模式),你在nginx中就要单独做访问/static/目录的路由。nginx配置如下:

    server {
        listen         80;
        server_name    127.0.0.1
        charset UTF-8;
        access_log      /var/log/nginx/django_pro01_access.log;
        error_log       /var/log/nginx/django_pro01_error.log;
    
        client_max_body_size 75M;
    
        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8000;
            uwsgi_read_timeout 2;
        }
        location /static {  #这里做了访问静态目录不走uwsgi
            expires 30d;
            autoindex on;
            add_header Cache-Control private;
            alias /usr/share/nginx/TengLan/TengLan/staticfiles; #
            #alias /usr/share/nginx/django_pro01/static/;
         }
     }

    看到没有,这一个Django框架中的所有静态文件都应该从这个 “/usr/share/nginx/TengLan/dTengLan/staticfiles” 目录中获取。

    那么我们就应该把开发人员在开发过程中所创建的所有静态目录放到一个目录下。

    于是人性化的Django框架,就想到这一步。就是让你配置一个静态目录的根目录:STATIC_ROOT,

    配置如下:

    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
    
    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/1.9/howto/static-files/
    STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
    STATIC_URL = '/static/'
    
    # Extra places for collectstatic to find static files.
    STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    )

    然后配置好后,再执行

    python3 manage.py collectstatic

    这个命令的执行目的,就是将在开发模式中定义的静态目录,统一拿到STATIC_ROOT目录下。

      1.首先从Django的扩展包中,将admin管理后台的jss 和css等静态文件拷贝到配置文件中的STATIC_ROOT目录下。

      2.然后将STATICFILES_DIRS 列表中所有目录下的内容也拷贝到STATIC_ROOT目录下

    静态目录拷贝后的结果如图:

    对是拷贝,不是剪切,所以生产中最好把开发测试目录过滤掉在放到生产环境。

    网上有很多关于 STATIC_ROOT目录 和 STATICFILES_DIRS的错误理解:有说是STATICFILES_DIRS列表中的目录是放多个APP共用的静态目录列表。而STATIC_ROOT是APP独享静态目录。这种事错误的说法。

    正确的解释是:

      STATICFILES_DIRS 列表中的目录是开发时创建的静态目录。

      STATIC_ROOT 是Django框架放到生产环境中的唯一的一个静态目录  

      而当你设置DEBUG=False时,就必须在Django框架前端部署nginx或者其他web服务器来提供静态访问入口

    看看官网的说明如下链接https://devcenter.heroku.com/articles/django-assets

  • 相关阅读:
    现在分词做状语,到,非谓语动词
    成功和失败因素收集
    退拽原理2
    分享到(事件冒泡实例)
    滚动公告(纵向)
    RabbitMQ消息队列(一): Detailed Introduction 详细介绍
    在IDEA中实战Git
    深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
    MySQL中日期和时间戳互相转换的函数和方法
    【Docker】 windows10 docker 使用
  • 原文地址:https://www.cnblogs.com/zhming26/p/6163952.html
Copyright © 2011-2022 走看看