python - Error when updating function-based views to class-based views in Django Rest Framework -
i've been in process of running through tutorials on django rest framework build simple todo list app.
when transitioned function-based view class-based view, started getting stack trace django , http calls started failing.
i'm using virtualenv isolate dependencies, , using python 3.5.2.
anyone have ideas what's going on, or how resolve error?
i'm chalking configuration error or version mismatch, i'm not sure start.
/views.py:
from django.http import http404 list.models import list list.serializers import listserializer rest_framework.views import apiview rest_framework.response import response rest_framework import status class listsview(apiview): """ list 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 rest_framework.urlpatterns import format_suffix_patterns 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) input:
curl http://localhost:8000/lists/ trace:
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 2 given [29/aug/2016 00:03:32] "get /lists/ http/1.1" 500 61615 env:
python 3.5.2 requirements:
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
@sergeygornostaev had right intuition @ , post urls.py.
in refactor function-based views class-based views, neglected call as_view() on views when updated routing.
before: url(<pattern>, views.listsview)
after: url(<pattern>, views.listview.as_view())
this resolved error.
full /urls.py before:
from django.conf.urls import url rest_framework.urlpatterns import format_suffix_patterns 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) full /urls.py after:
from django.conf.urls import url rest_framework.urlpatterns import format_suffix_patterns list import views urlpatterns = [ url(r'^lists/$', views.listsview.as_view()), url(r'^lists/(?p<pk>[0-9]+)/$', views.listview.as_view()), url(r'^lists/(?p<list>[0-9]+)/items/$', views.listitemsview.as_view()), url(r'^lists/(?p<list>[0-9]+)/items/(?p<pk>[0-9]+)/$', views.listitemview.as_view()), ] urlpatterns = format_suffix_patterns(urlpatterns)
Comments
Post a Comment