标签: django-settings

在开发与生产之间分离 Django 安装的应用程序

我有 3 个设置文件:

  • base.py(共享)
  • 开发.py
  • 生产.py

base.py 有:

INSTALLED_APPS = (

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes'
    ...
Run Code Online (Sandbox Code Playgroud)

但是我有一些只需要在我的开发环境中使用的应用程序,例如,debug-toolbar.

我在 development.py 中试过这个:

INSTALLED_APPS += (
    'debug_toolbar',
)
Run Code Online (Sandbox Code Playgroud)

但得到错误: NameError: name 'INSTALLED_APPS' is not defined

设置文件的连接方式如下:

__init__.py

from .base import *

try:
    from .production import *
except:
    from .development import *
Run Code Online (Sandbox Code Playgroud)

如何区分我的生产/开发环境之间已安装的应用程序?

python django django-apps django-settings

8
推荐指数
2
解决办法
1475
查看次数

django STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置

我正在 heroku 上部署一个 Django 应用程序。

在我的设置模块中,我已配置为托管静态文件,例如

STATIC_ROOT = os.path.join(BASE_DIR, 'static_my_project')
STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_my_project')
]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'media_root')
Run Code Online (Sandbox Code Playgroud)

urls.py

urlpatterns = urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

但是在部署到heroku时,它给出了错误

SystemCheckError: System check identified some issues:

ERRORS:
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
Run Code Online (Sandbox Code Playgroud)

django django-settings django-staticfiles

8
推荐指数
1
解决办法
1万
查看次数

在中间件中动态更改SITE_ID被认为是个好主意吗?

(这不是"基于对多个站点的请求动态更改Django设置变量"的重复,因为之前的问题包括在运行时进行更严肃的重新配置)

sites.Site用来将内容绑定到我的项目中的域/主机(通过外键).选择适当的Site基于request.META['HTTP_HOST']我的自定义中间件.

但是,我知道sites框架的这种使用并不完全是Canonical Way(我有一个应用程序实例为不同的域提供不同的数据,而sites- AFAIK - 设计用于多个实例,每个域一个).

困扰我的元素是settings.SITE_ID- 静态设置,将当前的应用程序实例与一个Site(域)联系起来.这在几个地方使用,即contrib.auth(在密码重置电子邮件中组成完整的绝对URL).因此,SITE_ID基于动态改变会很酷request.META['HTTP_HOST'].

所以我的问题是:

动态地改变SITE_ID(即在中间件中)被认为是个好主意?

文档声明在运行时更改设置通常是坏主意(这里),但在这种情况下(在中间件调用足够早的时候)也许这样做很好.

(编辑):

它在本地工作(Django测试客户端),但我正在考虑具有多个线程和/或进程的生产环境中的并发请求.

django settings middleware django-middleware django-settings

7
推荐指数
1
解决办法
2040
查看次数

Django - 使用不同的电子邮件后端管理错误电子邮件

我在我的Django应用程序中使用自定义电子邮件后端(在本例中为CeleryEmailBackend):

EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'
Run Code Online (Sandbox Code Playgroud)

我的日志配置:

LOGGING = {
    # ...
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler',
    },
    # ...
}
Run Code Online (Sandbox Code Playgroud)

管理员错误电子邮件也会由同一电子邮件后端发送.
因此,如果电子邮件后端出现问题(例如Celery未运行).然后我将不会收到服务器错误电子邮件.

有没有办法AdminEmailHandler使用自定义电子邮件后端?

python django logging django-email django-settings

7
推荐指数
1
解决办法
1223
查看次数

Django @override_settings不允许字典?

我是Python装饰者的新手,所以也许我错过了一些简单的东西,这是我的情况:

这对我有用:

def test_something(self):
    settings.SETTING_DICT['key'] = True #no error
    ...
Run Code Online (Sandbox Code Playgroud)

但这会抛出"SyntaxError:关键字不能是表达式":

@override_settings(SETTING_DICT['key'] = True) #error
def test_something(self):
   ...
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,正常使用覆盖设置有效:

@override_settings(SETTING_VAR = True) #no error
def test_something(self):
   ...
Run Code Online (Sandbox Code Playgroud)

有没有办法将装饰器与设置字典一起使用,或者我做错了什么?

提前致谢!

python testing django unit-testing django-settings

7
推荐指数
2
解决办法
2403
查看次数

Django ImportError:没有名为midware的模块

我使用的是Django 1.8和python 2.7.运行我的项目后,我收到以下错误.

Traceback (most recent call last):
  File "C:\Python27\lib\wsgiref\handlers.py", line 85, in run
    self.result = application(self.environ, self.start_response)
  File "C:\Python27\lib\site-packages\django\contrib\staticfiles\handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "C:\Python27\lib\site-packages\django\core\handlers\wsgi.py", line 170, in __call__
    self.load_middleware()
  File "C:\Python27\lib\site-packages\django\core\handlers\base.py", line 50, in load_middleware
    mw_class = import_string(middleware_path)
  File "C:\Python27\lib\site-packages\django\utils\module_loading.py", line 26, in import_string
    module = import_module(module_path)
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named middleware
[26/Aug/2015 20:34:29] "GET /favicon.ico HTTP/1.1" 500 59
Run Code Online (Sandbox Code Playgroud)

这是我的settings.py文件

"""
Django settings for collageapp project.

Generated by …
Run Code Online (Sandbox Code Playgroud)

python django django-middleware django-settings

7
推荐指数
1
解决办法
1万
查看次数

Django Debug=False 白噪声不起作用

我正在尝试将功能齐全(当本地且 Debug=True 时)站点部署到 Heroku。当我使用默认的 Django staticfile_storage 设置时,我的网站显示为活动状态,但没有任何静态文件(css、图像等)。管理面板可以工作,但也没有任何样式。

但是,当我尝试使用 Whitenoise(这正是我最初的意图)时,我收到服务器 500 错误。届时管理面板将无法工作。我一生都无法弄清楚我做错了什么。

我尝试按照 Heroku 的模板来建模我的 settings.py 文件: https://github.com/heroku/heroku-django-template和 Whitenoise 的文档http://whitenoise.evans.io/en/latest/django.html

当我查看最近的 Heroku 日志时,我看到

at=info method=GET path="/static/css/styles.css" host=www.mysite.net request_id=826280da-21ba-48a1-8a05-679c92871d38 dyno=web.1 connect=0ms service=3ms status=404 bytes=361
Run Code Online (Sandbox Code Playgroud)

当我推送到 Heroku 时,部署成功,但是当我运行时

heroku run python3 manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)

它说我必须覆盖预先存在的文件(是/否),当我说是时,我收到一条错误消息,指出找不到 app/static 目录。

我非常困惑——我可能做错了什么?如果我的静态文件目录不正确,我该如何找到它?

项目结构

mysite/
    blog/
        static/
            css/
                styles.css
            images/
                favicon.png
        templates/
            blog/
                blog_list.html
                blog_detail.html
            index.html
            bio.html
            resume.html
        models.py
        views.py
        urls.py
    media/
        portfoliopieces/
             1.png
             2.png
             3.png
             4.png
    mysite/
        settings.py
        urls.py
        wsgi.py
    portfolio/
        templates/
            portfolio_list.html
            portfolio_detail.html
        models.py …
Run Code Online (Sandbox Code Playgroud)

django heroku django-settings django-staticfiles

7
推荐指数
1
解决办法
5469
查看次数

DJANGO_SETTINGS_MODULE 未命名模块

我正在尝试为我的数据库创建一个填充脚本,但我收到一个 No module named 错误。

Project Structure:
staticone/
    manage.py
    mysite/
      populate_rango
      settings
      urls
      __init__
      wsgi
      rango/    
Run Code Online (Sandbox Code Playgroud)

追溯:

Traceback (most recent call last):
File "populate_rango.py", line 8, in <module>
django.setup()
File "/home/ubuntu/virtenv/webstatic/lib/python3.5/site-
packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/ubuntu/virtenv/webstatic/lib/python3.5/site-
packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/home/ubuntu/virtenv/webstatic/lib/python3.5/site-
packages/django/apps/config.py", line 116, in create
mod = import_module(mod_path)
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in …
Run Code Online (Sandbox Code Playgroud)

django django-settings python-3.x

7
推荐指数
1
解决办法
5249
查看次数

用于 SMTP 的 G Suite 和 Django

我正在让 G Suite 与我的 django 站点一起工作,以便它将替换我主机的 SMTP 服务器。我在我的虚拟主机的配置面板中配置了我的域。结果,当我向 support@mysite.com 发送电子邮件时,我可以看到它已成功发送到 Google 帐户,这很棒。

我的应用程序设置为在有人尝试注册后发送确认电子邮件。

我已经完成了我认为使用 django 项目设置 G Suite 所需的所有步骤,但是当我的项目在有人注册后尝试发送确认电子邮件时,我仍然收到错误消息。具体来说,我在 Django 错误页面上看到以下内容:

SMTPServerDisconnected at /access/register/ Connection unexpectedly closed
Run Code Online (Sandbox Code Playgroud)

我已经完成了以下步骤:

1.我已经设置了 SMTP 中继服务 ( https://support.google.com/a/answer/2956491 ),这意味着我已经:

2.在我的 django 设置文件中,我使用了以下设置:

EMAIL_HOST = 'smtp-relay.gmail.com'
EMAIL_HOST_USER = 'support@mysite.com'
EMAIL_HOST_PASSWORD = '********'
DEFAULT_FROM_EMAIL = 'support@mysite.com'
SERVER_EMAIL = 'support@mysite.com'
EMAIL_PORT = 465 
EMAIL_USE_TLS = False
Run Code Online (Sandbox Code Playgroud)

我还应该提到,通过以下设置,在我开始实施 G Suite 之前,我的应用程序能够在向虚拟主机的 SMTP 服务器注册后发送验证电子邮件,以便我知道应用程序的那部分工作正常。

EMAIL_HOST = 'smtp.mywebhost.com'
EMAIL_HOST_USER = 'admin'
EMAIL_HOST_PASSWORD = …
Run Code Online (Sandbox Code Playgroud)

django django-settings google-workspace

7
推荐指数
1
解决办法
3614
查看次数

Django Allauth - ModuleNotFoundError:即使正确安装了 django-allauth,也没有名为“allauth.account.middleware”的模块

“ModuleNotFoundError:没有名为“allauth.account.middleware”的模块”

即使 django-allauth 已全部安装和设置,我仍然在 django 项目中收到此错误???

我什至尝试重新安装并将我的 python 更改为 python3 但没有更改任何内容,无法弄清楚为什么所有其他导入都可以工作,但中间件导入......

请帮忙?

设置.py:

"""
Django settings for youtube2blog2 project.

Generated by 'django-admin startproject' using Django 4.2.4.

For more information on this file, see

For the full list of settings and their values, see
"""

from pathlib import Path
import django
import os
import logging
import pyfiglet

import allauth

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production …
Run Code Online (Sandbox Code Playgroud)

python django django-settings python-3.x django-allauth

7
推荐指数
2
解决办法
9349
查看次数