2013-12-07 4 views
5

Я хочу, чтобы сделать API для моего проекта, и я нашел Django REST Framework - http://django-rest-framework.org/Django REST Framework учебник не работает

Я попытался их учебник здесь http://django-rest-framework.org/tutorial/quickstart. Единственное отличие заключается в том, что мое приложение называется api. Моя проблема заключается в том, что, когда я логин с моим администратором пользователем Я получаю следующее сообщение об ошибке:

Exception Type: NoReverseMatch 
Exception Value:  
Reverse for 'user-list' with arguments '()' and keyword arguments '{}' not found. 

Я пытался найти решение, но результат в том, что я прошу здесь, если кто-нибудь есть идея :)

urls.py

from django.conf.urls import patterns, include, url 
from django.conf.urls.static import static 
from django.conf import settings 

#not sure 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

from dajaxice.core import dajaxice_autodiscover, dajaxice_config 
dajaxice_autodiscover() 

js_info_dict = { 
    'packages': ('cards',), 
} 

urlpatterns = patterns('', 
    # Examples: 
    url(r'^$', include('cards.urls', namespace='cards')), 
    # url(r'^giftycards/', include('giftycards.foo.urls')), 
    url(r'^cards/', include('cards.urls', namespace='cards')), 
    url(r'^api/', include('api.urls', namespace='api')), 


    # Uncomment the admin/doc line below to enable admin documentation: 
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
    url(r'^admin/', include(admin.site.urls)), 
    url(dajaxice_config.dajaxice_url, include('dajaxice.urls')), 

    # REST API 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), 

    # Internationalization urls 
    url(r'^i18n/', include('django.conf.urls.i18n')), 
    url(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', js_info_dict), 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

urlpatterns += staticfiles_urlpatterns() 

urlpatterns += patterns('', 
    url(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
    {'document_root': settings.STATIC_ROOT }), 

) 

апи/urls.py

from django.conf.urls import patterns, url, include 
from rest_framework import routers 
from api import views 

router = routers.DefaultRouter() 
router.register(r'users', views.UserViewSet) 
router.register(r'groups', views.GroupViewSet) 

# Wire up our API using automatic URL routing. 
# Additionally, we include login URLs for the browseable API. 
urlpatterns = patterns('', 
    url(r'^', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
) 

Здесь это полный трассировки стека:

Environment: 


Request Method: GET 
Request URL: http://localhost:1238/api/ 

Django Version: 1.5.4 
Python Version: 2.7.3 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'django.contrib.admindocs', 
'dajaxice', 
'rest_framework', 
'api', 
'cards') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.locale.LocaleMiddleware') 


Traceback: 
File "/home/valentin/Documents/Dev/giftycards/libs/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/valentin/Documents/Dev/giftycards/libs/django/views/generic/base.py" in view 
    68.    return self.dispatch(request, *args, **kwargs) 
File "/home/valentin/Documents/Dev/giftycards/libs/django/views/decorators/csrf.py" in wrapped_view 
    77.   return view_func(*args, **kwargs) 
File "/home/valentin/Documents/Dev/giftycards/libs/rest_framework/views.py" in dispatch 
    399.    response = self.handle_exception(exc) 
File "/home/valentin/Documents/Dev/giftycards/libs/rest_framework/views.py" in dispatch 
    396.    response = handler(request, *args, **kwargs) 
File "/home/valentin/Documents/Dev/giftycards/libs/rest_framework/routers.py" in get 
    254.      ret[key] = reverse(url_name, request=request, format=format) 
File "/home/valentin/Documents/Dev/giftycards/libs/rest_framework/reverse.py" in reverse 
    17.  url = django_reverse(viewname, args=args, kwargs=kwargs, **extra) 
File "/home/valentin/Documents/Dev/giftycards/libs/django/core/urlresolvers.py" in reverse 
    496.  return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) 
File "/home/valentin/Documents/Dev/giftycards/libs/django/core/urlresolvers.py" in _reverse_with_prefix 
    416.     "arguments '%s' not found." % (lookup_view_s, args, kwargs)) 

Exception Type: NoReverseMatch at /api/ 
Exception Value: Reverse for 'user-list' with arguments '()' and keyword arguments '{}' not found. 
+0

Можете ли вы разместить свой urls.py? Похоже, что вы оставили маршрут для своего «списка пользователей». – Fiver

+0

Я добавил его к основному сообщению. Я упомянул, что отличие от учебника заключается в том, что мое имя приложения - api, а не quickstart. – valkirilov

+0

Думаю, вам нужно перенести образец uri-auth url из файла urls.py на уровне приложения и в файл urls.py на уровне проекта. – highpost

ответ

7

Это проблема с ФПИ не обрабатывает правильно пространств имён URLs и, следовательно, не позволяет обрабатывать ваш случай использования, пожалуйста, проверьте this thread для более подробной информации.

+0

спасибо! Я обтягивал волосы. – Setheron

4

У меня была такая же проблема с урока, я решил, что задав в URL pattern name для URL (обратите внимание на параметр name):

url(r'^users/$', views.UserList.as_view(), name='users') 

А затем с помощью того, что вместо пути питона:

def api_root(request, format=None): 
return Response({ 
    'users': reverse('users', request=request, format=format) 
}) 
Смежные вопросы