如何https://example.com/some/path在没有Sites模块的情况下获取 Django中的完整/绝对URL(例如)?那真是太傻了......我不需要查询我的数据库来获取URL!
我想用它reverse().
我倾向于在进行Django 开发时使用SQLite,但在实时服务器上经常需要更强大的东西(例如MySQL/PostgreSQL).不变的是,Django设置还有其他变化:不同的记录位置/强度,媒体路径等.
如何管理所有这些更改以使部署成为一个简单的自动化流程?
我一直在寻找一种更好的方法来处理特定于站点的设置(在这种情况下,django settings.py文件).
settings.py结构和字段相当一致,但开发人员的框,集成,QA,测试和生产环境之间的值不同.
控制设置源同时仍然允许在不同框之间进行更改的优雅方法是什么?
我也担心在源代码管理中有敏感数据(例如数据库密码),但我确实想要自动部署.
我们使用过的例子:
settings.py设置公共值,然后根据主机名或用户名加载辅助设置文件.
使用部署脚本将值注入settings.py文件.但这只是将问题转移到管理部署脚本而不是settings.py脚本.
有人有一个特别优雅的方法吗?
可能重复:
如何在Django中管理本地vs生产设置?
我已经设法成功部署Django项目上的Apache的Web服务器使用mod_wsgi.
我想了解一些如何管理多个settings.py文件的建议.现在我有一个用于开发,一个完全不同于生产(关于数据库参数,静态内容本地化和类似的东西).我的settings.py文件是版本化的(不知道这是不是一个好习惯)我用以下内容部署它:
$ hg archive myproject.tbz2
$ cd /path/of/apache/web/project/location
$ bzip2 -db /home/myself/myproject/myproject.tbz2 | tar -xvf -
Run Code Online (Sandbox Code Playgroud)
它工作正常.但我发现自己在操纵多个settings.py文件.
我想我的问题是:在为多个文件版本部署DJANGO PROJECTS时,最佳做法是什么settings.py?
我正在尝试使用启用了Vagrant的虚拟机来设置本地Django开发环境但是我不确定什么是最好的方法.
我git clone从生产服务器做了一个Django文件,并安装了生产服务器在我本地虚拟机上的所有模块.我想避免在本地VM上安装数据库,但遇到了会话的一些问题.本地计算机正在使用SESSION_COOKIE_DOMAIN='localhost'并且正在使用生产,SESSION_COOKIE_DOMAIN='.mydomain.com'因此会产生一些混乱.
更不用说在我的开发环境中的setting.py上,我不得不将IP更改为指向数据库的公共IP地址(因此在安全性上挖了一个洞),而我的生产settings.py正在使用本地IP,所以我最终使用了不同的settings.py文件.
我可以继续尝试新的方法,但我真的必须开始使用这个项目,而且我很确定有些人已经知道了这个问题.
那么你是如何设置Django开发环境的呢?
我有 3 个设置文件:
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)
如何区分我的生产/开发环境之间已安装的应用程序?
我正在研究Django项目,该项目使用位于项目根目录中的几个"设置"文件中指定的几十个配置变量:
--> myproject
------> app folders
------> ...
--- settings.py
--- settings_global.py
--- settings_production.py
--- settings_development.py
Run Code Online (Sandbox Code Playgroud)
然后根据某些运行时参数(主机名等)在settings.py文件中导入来自不同settings_*文件的变量.这一切都运行得很好,但有时候仍然很难找到某个变量,所以我想重新组织设置变量并将它们分成几个类别:
另外我想将所有设置文件但settings.py文件移动到settings子目录:
--> myproject
------> app folders
------> ...
------> settings
---------- __init__.py
---------- common.py
---------- production.py
---------- development.py
---------- apps.py
---------- ...
--- settings.py
Run Code Online (Sandbox Code Playgroud)
我已经创建了settings子目录(以及空__init__.py文件)并复制/重命名了设置文件.然后我尝试在我的setting.py文件中导入这些变量,如下所示:
from settings.common import *
from settings.apps import *
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误(即使在settings/common.py文件中存在ROOT_URLCONF):
AttributeError: 'Settings' object has no attribute 'ROOT_URLCONF'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我将Django从1.8升级到1.9.之后,在Django管理员登录后,我在本地主机上收到此错误:
Referer checking failed - Referer is insecure while host is secure.
生产中的一切都很好.以下是我的settings.py文件的片段:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
Run Code Online (Sandbox Code Playgroud) 我有一个在 Heroku 上运行的项目,我的本地计算机上没有安装 PostgreSQL。我想使用 继续在本地计算机上运行该应用程序sqlite3,但是当我将其推送到 Heroku 时,它将转换为pg
我想做的就是有一个 IF 条件,如果这是开发,则运行 sqlite3 .. 但如果是生产运行,则执行以下命令。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': '',
'HOST': '',
'PORT': 5432,
'USER': '',
'PASSWORD': ''
}
}
Run Code Online (Sandbox Code Playgroud)
Heroku 正在与dj_database_url
import dj_database_url
DATABASES['default'] = dj_database_url.config()
Run Code Online (Sandbox Code Playgroud)
它基本上类似于Rails我们定义用于生产的 gem 以及用于测试和开发的另一个 gem。
django ×9
python ×4
apache ×1
deployment ×1
django-1.9 ×1
django-apps ×1
django-csrf ×1
heroku ×1
vagrant ×1