当我 运行 服务器时,如何让我的 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: No module named 'finance_app.apps.FinanceAppConfig'; 'finance_app.apps' is not a 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: No module named '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.pyINSTALLED_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() 函数中,如果您有 AppConfig 以外的任何导入,请将它们导入到您的 ready() 函数中,它应该可以工作。
这里是第一个问题。
我是 Python 的初学者,在我的期末项目中,我正在用 Django 制作一个抓取应用程序。当我 运行 我的服务器时,我希望它启动一个 BackgroundScheduler
每 10 分钟调用一次我的抓取应用程序。现在我有一个按钮上的调度程序,但我不希望它在一个按钮上,我希望它在我 运行 我的服务器时正常工作,这可能吗?
我尝试过的:
- 将我的逻辑写入 apps.py 然后将 appconfig 添加到设置 到 INSTALLED_APPS 但我得到:
ModuleNotFoundError: No module named 'finance_app.apps.FinanceAppConfig'; 'finance_app.apps' is not a 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: No module named '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.pyINSTALLED_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() 函数中,如果您有 AppConfig 以外的任何导入,请将它们导入到您的 ready() 函数中,它应该可以工作。