错误:django.core.exceptions.ImproperlyConfigured:请求设置 INSTALLED_APPS,但未配置设置

问题描述 投票:0回答:1

django.core.exceptions.ImproperlyConfigured:请求设置 INSTALLED_APPS,但未配置设置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。

当我运行 testapscheduler.py 文件时,出现上述错误。 是因为我在Dajngo框架中只运行了一个文件,所以出现了上面的错误吗? 我该如何测试它?

testapscheduler.py:

import logging
from models import Todo
from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime, timedelta
import pytz
import requests


def notify_todo():
    # 現在の日時を取得
    now = datetime.now(pytz.timezone('Asia/Tokyo'))

    # 締め切りが30分以内のTODOリストを取得
    todos = Todo.objects.filter(
        deadline__gt=now - timedelta(minutes=30),
        deadline__lt=now + timedelta(minutes=30),
        ttime__isnull=False,
        ttime__gt=now.time()
    )

# 30分以内のTODOリストの数を出力
    # ログの出力名を設定
    logger = logging.getLogger('mylog')

    #ログレベルを設定
    logger.setLevel(logging.DEBUG)

    #ログをコンソール出力するための設定
    sh = logging.StreamHandler()
    logger.addHandler(sh)

    logger.debug(f'{len(todos)}個のTODOリストが締め切り30分以内にあります。')


    for todo in todos:
        #LINE NotifyのAPIトークンを取得
        api_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        
        # 通知メッセージの作成
        message = f"【{todo.title}】\n締切時間:{todo.deadline.strftime('%Y/%m/%d %H:%M')}\n詳細:{todo.description}"

        # LINE Notifyに通知を送信
        headers = {'Authorization': f'Bearer {api_token}'}
        payload = {'message': message}
        requests.post('https://notify-api.line.me/api/notify', headers=headers, data=payload)

def start():
    scheduler =BackgroundScheduler(timezone='Asia/Tokyo')
    scheduler.add_job(notify_todo, 'interval', seconds=2) # 2秒ごとに実行
    scheduler.start()

models.py

from django.db import models


class Todo(models.Model):
    title = models.CharField("タスク名", max_length=30)
    description = models.TextField("詳細", blank=True)
    deadline = models.DateField("締切")
    ttime = models.TimeField("")

    def __str__(self):
        return self.title

python django apscheduler
1个回答
0
投票

我建议使用标准方式从命令行执行命令,但在 django 上下文中:django 管理命令。请参阅此问题的答案这是我的 manage.py 脚本的代码我希望有人解释每一行我几乎看不懂

在您的情况下,start() 中的代码需要进入管理命令的 handle() 函数。

© www.soinside.com 2019 - 2024. All rights reserved.