簡體   English   中英

當我運行服務器時,如何讓我的 Django 應用程序*做*一些事情?

[英]How can I make my Django App *do* something when I run the server?

這里的第一個問題。 我是 Python 的初學者,對於我的最終項目,我正在 Django 中制作一個抓取應用程序。 當我運行我的服務器時,我希望它啟動一個BackgroundScheduler ,它每 10 分鍾調用一次我的抓取應用程序。 現在我的調度程序在一個按鈕上,但我不希望它在一個按鈕上,我希望它在我運行服務器時正常工作,這可能嗎?

我試過的:

  • 將我的邏輯寫入apps.py,然后將appconfig添加到INSTALLED_APPS的設置中,但我得到:

ModuleNotFoundError:沒有名為“finance_app.apps.FinanceAppConfig”的模塊; 'finance_app.apps' 不是 package

  • 在我的邏輯所在的地方創建一個 scheduler.py 文件並將其添加到 INSTALLED_APPS 但仍然無法正常工作

apps.py 及其邏輯

from apscheduler.schedulers.background import BackgroundScheduler
from django.apps import AppConfig

from finance_app.scraper import scrape


class FinanceAppConfig(AppConfig):
    name = 'finance_app'

    def ready(self):
        print('Initializing scheduler')
        scheduler = BackgroundScheduler()
        scheduler.add_job(scrape, 'interval', second=30)
        scheduler.start()

有效的 BackgroundScheduler:

        scheduler = BackgroundScheduler()
        scheduler.add_job(scrape, 'interval', second=30)
        scheduler.start()

在我的視圖中調用刮板的調度程序

def scraper_view(request):
    scrape()

    scheduler = BackgroundScheduler()
    scheduler.add_job(scrape, 'interval', minutes=10)
    scheduler.start()

    return redirect("../")

帶有我想擺脫的視圖的按鈕

<div style="text-align: center;"><h2 class="subtitlu">
    <a href="{% url 'scraper' %}">Scrape News</a>
</h2>
</div>

ModuleNotFoundError:沒有名為“finance_app.apps.FinanceAppConfig”的模塊

請查看發生錯誤的回溯。 例如。

Traceback (most recent call last):
  ...
  File ".\app\urls.py", line 18, in <module>
    from app import something
ModuleNotFoundError: No module named 'app'

您可以將回溯放在這里。

如果將應用添加到 settings.py INSTALLED_APPS 后出現錯誤,則應檢查添加方式。 它應該只是'finance_app':

INSTALLED_APPS = [
    'finance_app',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

我終於想通了,我的刮板文件中有 django_setup(),這就是為什么它不起作用的原因,也供將來參考,在來自 apps.py 的 ready() function 中,如果您有除 AppConfig 之外的任何導入,請導入它們在您的 ready() function 中,它應該可以工作。

暫無
暫無

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

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