Python程序在shell中工作,但在控制台中

时间:2017-07-30 02:38:53

标签: python django python-3.x shell django-models

我正在编写一个程序,使我的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)

datesmid_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

1 个答案:

答案 0 :(得分:0)

我的问题可能是我在原生python环境中使用Django资源。正如Chris在评论中指出的那样,创建custom manage.py command代替.py启动文件就足够了。