首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python通过扩展manage.py的视图导致AppRegistryNotReady异常

python通过扩展manage.py的视图导致AppRegistryNotReady异常
EN

Stack Overflow用户
提问于 2014-11-07 22:22:46
回答 1查看 468关注 0票数 0

环境:

  • Ubuntu GNOME 14.04
  • Python2.7.6(使用虚拟环境)
  • Django 1.7.1 (在虚拟环境中)
  • 自定义用户模型
  • django-oauth工具包0.7.2 (通过pip安装) (https://github.com/evonove/django-oauth-toolkit)
  • 日食开普勒SR2 (构建id 20140224-0627)
  • PyDev 3.8.0.201409251235

我正在使用Django和django-oauth工具包为iOS和安卓应用程序创建一个iOS后端API。我以前在CentOS 6.5上使用Python2.6.6和Django 1.4.8成功地完成了不同的移动应用程序,但是在当前的环境中遇到了麻烦。

我有一个类扩展了django-oauth-工具箱的ProtectedResourceView (http://django-oauth-toolkit.readthedocs.org/en/0.7.2/views/details.html#generic):

代码语言:javascript
复制
from oauth2_provider.views.generic import ProtectedResourceView
from django.http.response import HttpResponse

class TestEndpoint(ProtectedResourceView):

    def get(self, request, *args, **kwargs):
        return HttpResponse("Hello World!")

此视图的文件位于/home/user/workspace/MyProject/MyApp/views/test_endpoint.py中。它被导入到/home/user/workspace/MyProject/MyApp/views/__init__.py中的视图包中。

端点映射到我的urls.py中:

代码语言:javascript
复制
from django.conf.urls import patterns, url
from MyApp.views import UnprotectedEndpoint
from MyApp.views.test_endpoint import TestEndpoint

urlpatterns = patterns('api_v1',
    url(r'^account/create/', UnprotectedEndpoint.as_view()),
    url(r'^test/', TestEndpoint.as_view()),
)

输入virtualenv后,我运行python manage.py runserver并获得以下错误:

代码语言:javascript
复制
(MyVirtualEnv)user@ubuntu-laptop:~/workspace/MyProject$ python manage.py runserver
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/django/apps/config.py", line 87, in create
    module = import_module(entry)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/user/workspace/MyProject/MyApp/__init__.py", line 1, in <module>
    import urls
  File "/home/user/workspace/MyProject/MyApp/urls.py", line 2, in <module>
    from MyApp.views import UnprotectedEndpoint
  File "/home/user/workspace/MyProject/MyApp/views/__init__.py", line 3, in <module>
    from test_endpoint import TestEndpoint
  File "/home/user/workspace/MyProject/MyApp/views/test_endpoint.py", line 1, in <module>
    from oauth2_provider.views.generic import ProtectedResourceView
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/oauth2_provider/views/__init__.py", line 1, in <module>
    from .base import AuthorizationView, TokenView
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/oauth2_provider/views/base.py", line 13, in <module>
    from ..forms import AllowForm
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/oauth2_provider/forms.py", line 22, in <module>
    class RegistrationForm(forms.ModelForm):
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/oauth2_provider/forms.py", line 26, in RegistrationForm
    class Meta:
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/oauth2_provider/forms.py", line 27, in Meta
    model = get_application_model()
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/oauth2_provider/models.py", line 241, in get_application_model
    app_model = get_model(app_label, model_name)
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/django/apps/registry.py", line 199, in get_model
    self.check_models_ready()
  File "/home/user/virtualenvs/MyVirtualEnv/local/lib/python2.7/site-packages/django/apps/registry.py", line 131, in check_models_ready
    raise AppRegistryNotReady("Models aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.

当我将TestEndpoint__init__.pyurls.py中删除时,服务器就会正常启动。但是,当我导入扩展ProtectedResourceView的视图时,将引发AppRegistryNotReady异常。为什么Django不喜欢那样的景色?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-08 09:53:28

这是与Django 1.7一起使用的django-oauth-toolkit中的一个bug,参见此处:https://github.com/evonove/django-oauth-toolkit/issues/151

您可以使用发布到该问题的解决方案,或者只需切换回Django 1.6并等待django-oauth-toolkit的修复。

==========

从OP更新

此问题已在django-oauth工具包0.8中得到解决,并于2015年3月27日发布到PyPI。我已经用原问题中描述的项目测试并证实了这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26811093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档