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 方式”。
但是您在操作过程中询问了错误消息的原因。
如果您研究完整的错误跟踪,您还会发现它从导入命令开始。
终端说我没有定义 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 方式”。
但是您在操作过程中询问了错误消息的原因。
如果您研究完整的错误跟踪,您还会发现它从导入命令开始。