我正在编写一个程序,使我的Django应用程序能够使用REST API。我的问题是Django拒绝该程序,如果我将其作为.py
文件运行,但通过shell接受它。该程序分为两个文件:一个与API交互,另一个与Django交互。主文件夹结构如下:
/root folder
[rest of Django project]
-__init__.py
-test.py
-mid_side.py
-teamup_api/
-__init__.py
-teamup.py
其中test.py
是启动程序的文件,mid_side.py
是Django端部分,teamup.py
是API端部分。以下是我遇到问题的具体代码。
test.py
import django
from mid_side import dates
from datetime import datetime
start = datetime(2017,7,28)
end = datetime(2017,8,19)
test = dates(start,end)
print(test)
dates
是mid_side
中接受两个datetime
个对象作为参数的方法。
根据Django的说法,问题出现在mid_side.py
中,因为它从主Django项目中的应用程序导入模型。 Django遇到问题的具体行是from events.models import Service
,其中events
是Django使用的应用程序,Services
是模型。回溯是
Traceback (most recent call last):
File "test.py", line 2, in <module>
from mid_side import dates
File "/home/brian/Github/nydkc11/nydkcd11/mid_side.py", line 3, in <module>
from events.models import Service
File "/home/brian/Github/nydkc11/nydkcd11/events/models.py", line 1, in <module>
from embed_video.fields import EmbedVideoField
File "/home/brian/anaconda3/envs/server/lib/python3.6/site-packages/embed_video/fields.py", line 6, in <module>
from .backends import detect_backend, UnknownIdException, \
File "/home/brian/anaconda3/envs/server/lib/python3.6/site-packages/embed_video/backends.py", line 17, in <module>
from .settings import EMBED_VIDEO_BACKENDS, EMBED_VIDEO_TIMEOUT, \
File "/home/brian/anaconda3/envs/server/lib/python3.6/site-packages/embed_video/settings.py", line 7, in <module>
'embed_video.backends.SoundCloudBackend',
File "/home/brian/anaconda3/envs/server/lib/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/home/brian/anaconda3/envs/server/lib/python3.6/site-packages/django/conf/__init__.py", line 39, in _setup
% (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting EMBED_VIDEO_BACKENDS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
我知道回溯涉及我的项目使用的应用程序django-embed-video。我不明白为什么Django表示这是一个问题,考虑到a)Service
没有使用django-embed-video
中的字段,b)我之前成功地在我的项目上部署了应用程序。我的问题如下:
1)为什么.py
文件中出现此问题而不是shell?
2)是什么导致Django输出回溯?
以下是该计划的相关代码。如果需要进一步说明,请通知我。谢谢!
*我决定不包括teamup.py
,因为这更像是一个Django方面的问题,但如果请求我会包含它。
mid_side.py
from dateutil.parser import parse
from events.models import Service
import datetime
from teamup_api.teamup import *
def dates(start,end):
event_list = day_query(start.year, start.month, start.day, end.year, end.month, end.day)['events']
service_objects = []
for event in event_list:
service_objects.append(Service(
title=event['title'],
school=none_parse(event['who']),
location=none_parse(event['location']),
start_time=parse(event['start_dt']),
end_time=parse(event['end_dt']),
all_day=event['all_day'],
description=none_parse(event['notes'])
))
return service_objects
models.py
class Service(models.Model):
title = models.CharField(max_length=100)
school = models.CharField(max_length=100)
location = models.CharField(max_length=100)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
all_day = models.BooleanField()
description = models.TextField()
def __str__(self):
return self.title
更新:我一直在运行&#39; shell&#39;通过manage.py shell
和&#39; console&#39;通过本机运行python文件(例如python [file].py
)
答案 0 :(得分:0)
我的问题可能是我在原生python
环境中使用Django资源。正如Chris在评论中指出的那样,创建custom manage.py
command代替.py
启动文件就足够了。