替代已弃用的 setup_environ() 一次性 django 脚本?

     2023-02-24     144

关键词:

【中文标题】替代已弃用的 setup_environ() 一次性 django 脚本?【英文标题】:Alternative to the deprecated setup_environ() for one-off django scripts? 【发布时间】:2013-02-09 12:48:39 【问题描述】:

不久前我使用setup_environ() 编写了一个一次性的python 脚本,该脚本可以从命令行运行,但它根本不适合作为自定义manage.py 命令(我的首选)。它很好地设置了一切。我假设我们弃用了这个函数,因为非 django pythonistas 拿 djangonauts 取笑这种神奇的东西,我们厌倦了感觉肮脏。那么,如果它已被弃用,还有什么替代方案?也许这是一个懒惰的问题,但是我需要运行什么来代替 setup_environ 来达到相同的效果?我想我可以将函数复制/粘贴到我的脚本中,但我假设这不是弃用它的目的。 (显然我仍然可以使用已弃用的函数,但我希望我的脚本能够在几个版本的 django 中存活)

【问题讨论】:

【参考方案1】:

Django 1.4 发行说明官方推荐使用django.conf.settings.configure() 进行设置。这对于您需要以“pythonic”方式完成所有操作的小型脚本非常有用。但是,如果您有一个更大的项目,我喜欢使用 Django 方法,它有一个单独的设置模块/包,然后它的路径位于 DJANGO_SETTINGS_MODULE 环境变量中。这是manage.py中使用的方法:

# manage.py

# ...
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings")
# ...

可以在here找到发布文档。

【讨论】:

使用 Django 1.6,manage.py 现在有建议的行:os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings"),但是当我尝试启动 shell 时,它仍然抛出与原始问题相同的错误。【参考方案2】:

扩展 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 的解决方案。

【讨论】:

这不适用于 django 1.6 - 我已将项目路径(不是应用程序)添加到 sys.path,我已将设置模型添加到 DJANGO_SETTINGS_MODULE 然后从 django.conf 导入设置,但如果我随后尝试导入我的一个数据库模型(从 shoppinglist.models 导入 ShoppingList),则会出现错误“没有名为模型的模块”。相同的导入行在通过 manage.py 启动的 shell 中工作。有什么想法吗? 如果你不能导入模型,听起来你的路径值设置不正确,这超出了这个问题关于设置的范围。您应该尝试在使用“python”启动的常规 python shell 中进行测试,而不是使用“manage.py shell”启动的 django shell 来调试您的路径。【参考方案3】:

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)

【讨论】:

这在 1.7.3 django.setup() 上对我不起作用 AttributeError: 'module' object has no attribute 'setup' 仔细检查以确保您正确导入内容(并确保您的路径正确)。 1.7.3应该有设置功能:github.com/django/django/blob/1.7.3/django/__init__.py django.setup() 在 1.8 django 版本中添加。它在 1.7 中不起作用。 docs.djangoproject.com/en/1.8/topics/settings【参考方案4】:

免责声明:我使用的是 Django 1.8

只需加上我的 2 美分:我已经尝试了此页面中提供的一些解决方案,但它们根本不起作用。我刚刚想出了一个解决方案,我将在下面分享。

确保您位于项目的根文件夹中。与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', ... ]

【讨论】:

不在根目录下怎么办?【参考方案5】:

要添加 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。

【讨论】:

【参考方案6】:

我正在使用 Django 2.0,Ben Davis 很接近,但我无法让它工作。似乎对我有用的是

import os
import sys
import django

sys.path.append("/path/to/django/project") #only required if project not already in path
os.environ.setdefault('DJANGO_SETTINGS_MODULE','myapp.settings')

django.setup() #run django.setup BEFORE importing modules to setup the environ
from myapp.models import Thingy

t=Thingly.objects.all()

print(t)

【讨论】:

是否有快速替代已弃用的“SKPaymentTransaction.transactionReceipt”?

】是否有快速替代已弃用的“SKPaymentTransaction.transactionReceipt”?【英文标题】:Isthereafastreplacementfordeprecate`SKPaymentTransaction.transactionReceipt`?【发布时间】:2014-05-1513:41:45【问题描述】:是否有快速替代已弃用的SKPaymentTransaction.tran... 查看详情

BitmapDrawable 已弃用的替代方案

】BitmapDrawable已弃用的替代方案【英文标题】:BitmapDrawabledeprecatedalternative【发布时间】:2012-04-1606:11:56【问题描述】:我有以下代码可以将可绘制对象旋转一定的度数。publicDrawablerotateDrawable(floatangle,Contextcontext)BitmaparrowBitmap=Bitm... 查看详情

替代已弃用的 AudioManager.isWiredHeadsetOn?

】替代已弃用的AudioManager.isWiredHeadsetOn?【英文标题】:AlternativetothedeprecatedAudioManager.isWiredHeadsetOn?【发布时间】:2013-01-0207:43:44【问题描述】:方法AudioManager.isWiredHeadsetOn()从api级别14被弃用,我们现在如何检测是否连接了有线... 查看详情

已弃用的 AudioManger.setStreamMute 的替代方案?

】已弃用的AudioManger.setStreamMute的替代方案?【英文标题】:AlternativefordeprecatedAudioManger.setStreamMute?【发布时间】:2016-01-0812:48:11【问题描述】:AudioManger.setStreamMute现在被api23弃用,最好使用AudioManager.adjustStreamVolume和AudioManager.ADJU... 查看详情

已弃用的 NSURLConnection 方法,有替代方法吗?

】已弃用的NSURLConnection方法,有替代方法吗?【英文标题】:DeprecatedNSURLConnectionMethods,isthereanalternative?【发布时间】:2012-02-2814:12:26【问题描述】:我正在设置一个NSURLConnection来访问远程服务器:NSURL*url=[[NSURLalloc]initWithString:proj... 查看详情

寻找现在已弃用的 retryWhen 的替代方案

】寻找现在已弃用的retryWhen的替代方案【英文标题】:LookingforanalternativeofretryWhenwhichisnowDeprecated【发布时间】:2020-10-0616:34:43【问题描述】:我遇到了WebClient和reactor-extra的问题。确实,我有以下方法:publicEmployeegetEmployee(Stringemp... 查看详情

图像中已弃用的 Notification 类的替代方法是啥?

】图像中已弃用的Notification类的替代方法是啥?【英文标题】:WhatisthealternativeforthedeprecatedNotificationclassintheimage?图像中已弃用的Notification类的替代方法是什么?【发布时间】:2014-02-1811:14:20【问题描述】:我打算在android设备的... 查看详情

已弃用的 google plus api 的替代解决方案是啥?

】已弃用的googleplusapi的替代解决方案是啥?【英文标题】:Whatisthealternativesolutionofdeprecatedgoogleplusapi?已弃用的googleplusapi的替代解决方案是什么?【发布时间】:2019-06-2315:43:08【问题描述】:Google宣布在3月7日弃用所有googleplusapi... 查看详情

iOS 12.0 替代使用已弃用的 archiveRootObject:toFile:

】iOS12.0替代使用已弃用的archiveRootObject:toFile:【英文标题】:iOS12.0AlternativetoUsingDeprecatedarchiveRootObject:toFile:【发布时间】:2019-05-0322:47:12【问题描述】:在iOS12中,archiveRootObject:toFile:已被弃用。任何人都可以提出一种简化的替代... 查看详情

pymxs 替代已弃用的 MaxPlus 实用程序函数

】pymxs替代已弃用的MaxPlus实用程序函数【英文标题】:pymxsalternativestothedeprecatedMaxPlusutilityfunctions【发布时间】:2021-08-2400:11:17【问题描述】:随着Autodesk从3dsMax中删除MaxPlus,我现在不得不重新编写一些代码,并且想知道是否有... 查看详情

已弃用的 Hibernate.createClob(Reader reader, int length) 的替代方法是啥

】已弃用的Hibernate.createClob(Readerreader,intlength)的替代方法是啥【英文标题】:WhatisthealternatefordeprecatedHibernate.createClob(Readerreader,intlength)已弃用的Hibernate.createClob(Readerreader,intlength)的替代方法是什么【发布时间】:2012-02-1601:23:11【 查看详情

如何为已弃用的英特尔 IPP API 找到替代 API?

】如何为已弃用的英特尔IPPAPI找到替代API?【英文标题】:HowtofindalternativeAPIsfordeprecatedIntelIPPAPIs?【发布时间】:2014-11-0410:11:49【问题描述】:我正在与IntelIntegratedPerformancePrimitives(IntelIPP8.2)合作。我正在尝试使用来自UtilityFunction... 查看详情

Android:替代已弃用的 Context.MODE_WORLD_READABLE?

】Android:替代已弃用的Context.MODE_WORLD_READABLE?【英文标题】:Android:AlternativetothedeprecatedContext.MODE_WORLD_READABLE?【发布时间】:2012-12-0103:51:09【问题描述】:Fromhere我知道一种写入文件并可供其他应用程序和其他意图访问的方法,... 查看详情

[FFmpeg]啥是已弃用的 avpicture_alloc、avpicture::data 的替代品

】[FFmpeg]啥是已弃用的avpicture_alloc、avpicture::data的替代品【英文标题】:[FFmpeg]whatisreplacementsofavpicture_alloc,avpicture::datawhichweredeprecated[FFmpeg]什么是已弃用的avpicture_alloc、avpicture::data的替代品【发布时间】:2016-04-1204:47:35【问题描... 查看详情

channel 或 mutablesharedflow ,哪个是已弃用的 localbroadcastmanager 的更好替代品

...l或mutablesharedflow,哪个是已弃用的localbroadcastmanager的更好替代品【英文标题】:channelormutablesharedflow,whichoneisabetterreplacementfordeprecatedlocalbroadcastmanager【发布时间】:2021-04-0321:15:20【问题描述】:过去,我在聊天和出租车应用程序... 查看详情

OAuth2FeignRequestInterceptor 的替代方案,依赖于已弃用的类

】OAuth2FeignRequestInterceptor的替代方案,依赖于已弃用的类【英文标题】:AlternativeforOAuth2FeignRequestInterceptorthatdependsonadeprecatedclass【发布时间】:2020-05-0511:07:44【问题描述】:免责声明:老实说,我尝试在google/github上搜索,扫描了... 查看详情

macOS 10.8 (Mountain Lion) 之后已弃用的资源 'CurResfile'、'UseResFile' 等的替代 API

】macOS10.8(MountainLion)之后已弃用的资源\\\'CurResfile\\\'、\\\'UseResFile\\\'等的替代API【英文标题】:AlternativeAPIsforresources\'CurResfile\',\'UseResFile\',etc.whichhavebeendeprecatedaftermacOS10.8(MountainLion)macOS10.8(MountainLion)之后 查看详情

Alamofire 已弃用的代码

...我将其追溯到Alamofire中的以下语句。我没有看到任何关于替代品的提及。@available(*,deprecated=3.4.0)publicstaticfuncerrorWithCode( 查看详情