0
我一直在運行Django Rest Framework上的教程來構建簡單的待辦事項列表應用程序。在Django Rest Framework中將基於功能的視圖更新爲基於類的視圖時出錯
當我從基於函數的視圖轉換到基於類的視圖時,我開始獲取到Django的堆棧跟蹤,並且所有http調用都開始失敗。
我使用virtualenv
來隔離依賴關係,並使用Python 3.5.2。
任何人對發生了什麼事情有任何想法,或者如何解決這個錯誤?
我正在粉化這個配置錯誤或版本不匹配,但我不知道從哪裏開始。
/views.py:
from django.http import Http404
from list.models import List
from list.serializers import ListSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
class ListsView(APIView):
"""
List all lists.
"""
def get(self, request, format=None):
lists = List.objects.all()
serializer = ListSerializer(lists, many=True)
return Response(serializer.data)
...
/urls.py
from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from list import views
urlpatterns = [
url(r'^lists/$', views.ListsView),
url(r'^lists/(?P<pk>[0-9]+)/$', views.ListView),
url(r'^lists/(?P<list>[0-9]+)/items/$', views.ListItemsView),
url(r'^lists/(?P<list>[0-9]+)/items/(?P<pk>[0-9]+)/$', views.ListItemView),
]
urlpatterns = format_suffix_patterns(urlpatterns)
輸入:
curl http://localhost:8000/lists/
跟蹤:
Internal Server Error: /lists/
Traceback (most recent call last):
File "<pwd>/env/lib/python3.5/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "<pwd>/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
response = self._get_response(request)
File "<pwd>/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "<pwd>/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: __init__() takes 1 positional argument but 2 were given
[29/Aug/2016 00:03:32] "GET /lists/ HTTP/1.1" 500 61615
ENV:
python 3.5.2
要求:
Django==1.10
django-lint==2.0.4
djangorestframework==3.4.6
logilab-astng==0.24.3
logilab-common==1.2.2
psycopg2==2.6.2
Pygments==2.1.3
pylint==0.28.0
six==1.10.0
顯示urls.py –
它看起來像你必須在定義了一些中間件' MIDDLEWARE「,它不是作爲Django 1.10的新型中間件編寫的。請發佈你的MIDDLEWARE設置。 – solarissmoke
@SergeyGornostaev你是對的。這個問題在'urls.py'中。在這種情況下,我忽略了在路由中調用'as_view()'。將使用正確的響應和代碼進行更新。 – sjhcockrell