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

soat7uwm  于 2023-03-09  发布在  Go
关注(0)|答案(1)|浏览(248)

django.core.exceptions.ImproperlyConfigured:已请求设置INSTALLED_APPS,但尚未配置设置。您必须定义环境变量DJANGO_SETTINGS_MODULE或在访问设置之前调用settings.configure()。
当我运行testapscheduler.py文件时,我得到了上面的错误。是否因为我只运行了Dajngo框架中的一个文件,所以我得到了上面的错误?我该如何测试它?

测试应用调度程序.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()

型号.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

w6mmgewl

w6mmgewl1#

我建议使用标准的方法从命令行执行命令,但是要在django的上下文中:django管理命令。
请参阅此问题的答案this is the code for my manage.py script i would like someone to explain each line please i barely understand it
在您的情况下,start()中的代码需要进入管理命令的handle()函数。

file: app_name/management/command/start.py
--------------

class Command(BaseCommand):

    def add_arguments(self, parser):
        return

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

def notify_todo():
 .....

然后调用命令

> python manage.py start

相关问题