一次性Django脚本替代弃用的setup_environ()?
我用setup_environ()
写了一个从命令行运行的一次性python脚本,作为一个自定义的manage.py命令(我的首选),实际上并不适合。 它build立了一切很好。 我认为我们不赞成这个function,因为非Django pythonistas嘲笑djangonauts像这样的magicky的东西,我们厌倦了感觉肮脏。 所以,如果它被弃用,有什么select? 也许这是一个懒惰的问题,但我需要在setup_environ的地方运行,以达到相同的效果? 我想我可以复制/粘贴到我的脚本的function,但我认为这不是它的废弃点。 (显然,我仍然可以使用已弃用的函数,但是我希望我的脚本可以在django的几个版本中生存)
这在Django 1.7中已经改变了
import os import django from myapp import models os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") django.setup() print models.MyModel.objects.get(pk=1)
为了扩大miki725的答案,如果你之前
from django.core.management import setup_environ import fooproject.settings as settings setup_environ(settings)
只需更换
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings") from django.conf import settings
您的设置将作为设置加载。
对于Django 1.7+,请参阅Ben Davis的解决scheme。
Django 1.4发行说明正式推荐使用django.conf.settings.configure()
来设置设置。 对于需要做所有“pythonic”的小脚本来说,这是很好的select。 如果你有一个更大的项目,我喜欢使用Django的方法,它有一个单独的设置模块/包,然后在DJANGO_SETTINGS_MODULE
环境variables中的path。 这是manage.py
使用的方法:
# manage.py # ... os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings") # ...
发布文档可以在这里find。
为了增加Leandro N所说的(谢谢你,Leandro!),你必须添加django.setup()。
例如,我的代码:
import os, django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') django.setup() from app.models import ModelA, ModelB
仅供参考,我在Django 1.10上。
免责声明:我正在使用Django 1.8
只要加上我的2美分:我已经尝试了一些在这个页面提出的解决scheme,但他们根本没有工作。 我刚刚提出了一个我在下面分享的解决scheme。
确保你在你的项目的根文件夹。 manage.py
所在的位置相同。
#make sure basic imports are in place >>> import os,django #set the specific django settings file >>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings.base") # import your modules and use them just like you do in your # web apps >>> from apps.customers import models as c # normal usage... for instance: >>> dir(c) ['You', 'Will', 'See', 'Your', 'Models', ... ]