Is it possible to use Django models module only in my project?

匆匆过客 提交于 2019-12-24 06:36:37

问题


I am developing a small independent python application which uses Celery. I have built this using django framework but my application is back end only. This means that the users do not need to visit my site and my application is built only for the purpose of receiving tasks queue from celery and performing operations on the database. In order to perform operations on the database, I need to use Django modules.

What I am trying to do is eliminate the rest of my django application and use ONLY celery and django models modules (including the dependencies required to run these).

In short, my simple celery application will be running receiving instructions from my redis broker and perform operations in database using django models.

Is is possible to do this? If so, how?

Here is my project structure:

myproject/
--manage.py
--myproject/
----celery.py
----models.py
----settings.py
----tasks.py
----urls.py
----wsgi.py

Here is my settings.py:


回答1:


In your project's settings.py, just add this at beginning.

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()

Then you can use django orm, remember to delete the middleware you don't need in django settings.




回答2:


you just need

env['DJANGO_SETTING_MODULE'] = 'myproject.settings'
django.setup()

(assuming you setup your database and installed_apps stuff in settings.py)




回答3:


You have have a python script that requires some celery tasks and you need Django ORM too for the database interactions.

  1. You can setup the django project

  2. create an app for your purpose, include in settings.py and inside your app in models.py create the required models. ref : What minimal files i need to use django ORM

  3. Set up the environment for executing celery. Ie, redis server. integrate "djcelery" with django project. for the celery task purpose. you can use celery beats for the periodic tasks. or delay. ref: http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html

  4. You can import and use the django models like normal inside the celery tasks.

  5. And The celery tasks you can run using

    i. celery -A tasks worker --loglevel=info

    ii. celery -A tasks beat -l info. use beats if you want the tasks which are written for periodic execution.

  6. If the tasks need to be executed asynchronously just immediately or after a time interval , you can use task_name.delay() call the tasks inside the python script using delay() i think to use djcelery in your script you may need to set up the django env inside the script. just Do django.setup().

i think this will help you to solve your problem.



来源:https://stackoverflow.com/questions/39238812/is-it-possible-to-use-django-models-module-only-in-my-project

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!