Python 脚本在 Django 环境中不是 运行

Python script not run in Django environment

终端说我没有定义 DJANGO_SETTINGS_MODULE 但我试过了,因为我认为每一种方法都可以做到这一点,但到目前为止没有任何帮助(在 windows 上编码) 有人可以帮我吗?我被困住了,不知道该怎么办 Maby 这会有所帮助 - 我 运行 我的虚拟环境通过 Anaconda -

conda activate djangoenv





raise ImproperlyConfigured(django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
from faker import Faker
from app.models import AccessRecrod, Webpage, Topic
import random
import django
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')


django.setup()


fakegen = Faker()
topics = ['Search', 'Social', 'Marketplace', 'News', 'Games']


def add_topic():
    t = Topic.objects.get_or_create(top_name=random.choice(topics))[0]
    t.save()
    return t


def populate(N=5):

    for entry in range(N):

        # get topic for entry

        top = add_topic()

        # create fake data for entry

        fake_url = fakegen.url()
        fake_date = fakegen.date()
        fake_name = fakegen.company()

        # create new webpage entry

        webpg = Webpage.objects.get_or_create(
            topic=top, url=fake_url, name=fake_name)[0]

        # create fake access record

        acc_rec = AccessRecrod.objects.get_or_create(
            name=webpg, date=fake_date)[0]


if __name__ == '__main__':
    print('populating script!')
    populate(20)
    print('populating complete!')

我建议您创建一个可以 运行 和 ./manage.py 的命令,而不是像这样尝试将常规 python 脚本硬塞进 Django 环境。您可以了解如何创建自己的自定义命令 here。正确执行此操作后,您可以 运行 类似 ./manage.py create_topics 的命令或您为命令指定的任何名称。这允许 manage.py 为您加载 Django 环境。

或者,您可以考虑使用 ./manage.py dumpdata./manage.py loaddata 创建 fixtures。这些命令将允许您创建数据并将它们保存到 .json 文件中,您可以随时将其加载到数据库中。

问题只是您导入的模型。在导入与 django 相关的任何内容之前,您只需要设置 django:

import django
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
django.setup()


from faker import Faker
from app.models import AccessRecrod, Webpage, Topic
import random

rest of your code

如果您检查 manage.py 中的代码和 github 中的 django 代码,当您 运行 a管理命令由“python manage.py your_command”

如@Code-Apprentice 的回答中所述直接使用管理命令将是集成脚本的另一种“正常”或“更多 django 方式”。

但是您在操作过程中询问了错误消息的原因。

如果您研究完整的错误跟踪,您还会发现它从导入命令开始。