簡體   English   中英

如何將 Django 設置導入 python 獨立腳本

[英]How to import Django Settings to python standalone script

我很難調用 django 腳本。 這是我目前在我的根目錄中所做的事情:

>>> import os
>>> os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.py'
>>> from django.conf import settings
>>> settings.configure()
>>> settings.DATABASES
{}

settings.DATABASES不應該為空,所以我知道我沒有正確初始化項目。 我將如何在 django2.1 中執行此操作? 我以前可以使用import settings; setup_environ(settings) import settings; setup_environ(settings) ,但不再。

注意:我希望能夠從任何目錄運行上述內容。 這是嘗試從tmp導入我的項目的示例:

(V) david$ cd /tmp && python

>>> import django
>>> from django.conf import settings
>>> settings.configure()
>>> django.setup()
>>> from users.models import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'users'

2.1 文檔聲明您現在需要使用setup() 相關片段:

import django
from django.conf import settings

settings.configure()
django.setup()

# Now this script or any imported module can use any part of Django it needs.
from myapp import models

這是完整的文檔。

您不需要運行settings.configure() 要正確初始化,您可以執行以下操作:

if __name__ == '__main__':
    import sys, os
    sys.path.append(django_root)
    os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
    from django.conf import settings
    print (settings.DATABASES)

我遇到了這個問題,我的解決方案(腳本)是十年來數百個 Django 站點的結果。

一些解決方案可以禁止使用設置,這是我能夠編譯的用於運行 Django 的獨立腳本的最佳工作版本。 這通常比 Django shell 快(無需退出並重新進入)。

以上建議將在 98% 的時間內有效。 盡管如此,請考慮對此進行審查(和評論),以獲得更強大的運行 Django 腳本的方法。 一段時間以來,我每年都會遇到大約 1-2 次“異常”,直到我通過許多項目完全調試了這個腳本。

"""
scratch.py
----->note the no .py-----v
clear; echo 'import scratch' | python manage.py shell
"""
from django.conf import settings
from django.core.wsgi import get_wsgi_application  # turns on app, access to DB

print(f'- - - - - - - - - - - - - - - - - - - - ')
print(f'settings: {settings}') 
print('settings.DEBUG: {}'.format(settings.DEBUG))

# settings.DEBUG = True
# etc

if not settings.DEBUG:
    # keeps this off prod, usually on git ignore as well
    print('SETTINGS NOT IN DEBUG, set to:')
    print(settings.DEBUG)
    raise(RuntimeError('Can not be run on production or when debug is False'))

application = get_wsgi_application()


print('READY!')
print(f'- - - - - - - - - - - - - - - - - - - - ')

# App ready, code below. Add imports, calls, etc below here.

此外,此腳本可以無限循環運行,例如用於監視、調試和其他日常 Django 操作。 在文件的 ned 處添加以下內容,可能帶有sleep()和日志記錄。

while True:
    pass

從與manage.py相同的目錄中調用此腳本scratch.py​​ 。 使用以下語法調用:

echo 'import scratch' | python manage.py shell

如果更改文件名,則需要編輯import 此語法無需調用settings.configure()即可加載設置。 我們利用manage.py ,這似乎解決了邊緣情況。

注意:這不會隨着更改自動重新加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM