是否可以仅在我的项目中使用 Django 模型模块?
Posted
技术标签:
【中文标题】是否可以仅在我的项目中使用 Django 模型模块?【英文标题】:Is it possible to use Django models module only in my project? 【发布时间】:2017-01-07 09:45:49 【问题描述】:我正在开发一个使用 Celery 的小型独立 python 应用程序。我已经使用 django 框架构建了这个,但我的应用程序只是后端。这意味着用户不需要访问我的站点,并且我的应用程序仅用于从 celery 接收任务队列并对数据库执行操作。为了对数据库执行操作,我需要使用 Django 模块。
我想要做的是消除我的 django 应用程序的其余部分,并仅使用 celery 和 django 模型模块(包括运行这些模块所需的依赖项)。
简而言之,我的简单 celery 应用程序将运行,接收来自我的 redis 代理的指令,并使用 django 模型在数据库中执行操作。
有可能做到这一点吗?如果有,怎么做?
这是我的项目结构:
myproject/
--manage.py
--myproject/
----celery.py
----models.py
----settings.py
----tasks.py
----urls.py
----wsgi.py
这是我的 settings.py:
【问题讨论】:
【参考方案1】:您有一个需要一些 celery 任务的 python 脚本,并且您还需要 Django ORM 来进行数据库交互。
您可以设置 django 项目
为您的目的创建一个应用程序,包括在 settings.py 中,并在您的应用程序中的 models.py 中创建所需的模型。 参考:What minimal files i need to use django ORM
设置执行 celery 的环境。即redis服务器。将“djcelery”与 django 项目集成。用于芹菜任务目的。 您可以将 celery beat 用于周期性任务。或延迟。 参考:http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html
您可以像往常一样在 celery 任务中导入和使用 django 模型。
你可以使用 celery 任务来运行
我。 celery -A 任务工作者 --loglevel=info
二。芹菜 -A 任务节拍 -l 信息。如果您想要为定期执行而编写的任务,请使用节拍。
如果任务需要立即或在一段时间后异步执行,您可以使用 task_name.delay() 使用 delay() 调用 python 脚本中的任务 我认为要在脚本中使用 djcelery,您可能需要在脚本中设置 django env。 只需执行 django.setup()。
我认为这将帮助您解决问题。
【讨论】:
【参考方案2】:在您项目的 settings.py 中,只需在开头添加即可。
import django
import os
sys.path.insert(0, your_project_path) # Ensure python can find your project
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
django.setup()
然后就可以使用django orm了,记得在django设置中删除不需要的中间件。
【讨论】:
【参考方案3】:你只需要
env['DJANGO_SETTING_MODULE'] = 'myproject.settings'
django.setup()
(假设您在 settings.py 中设置了数据库和 installed_apps 内容)
【讨论】:
你能再解释一下吗,我不明白。我需要在哪里使用它?以上是关于是否可以仅在我的项目中使用 Django 模型模块?的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:仅在 django 中没有名为“bs4”的模块