Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError while using django rest framework tutorial

I am new to using Django Rest framework, i am following this tutorial Django-Rest-Framework

Instead of snippets my model consists of a userprofile as given below:

class UserProfile(models.Model):       user = models.OneToOneField(User)       emp_code = models.CharField(max_length=10, blank=True)       user_type = models.IntegerField(max_length=1, default=0, choices=USER_TYPE)       group = models.ForeignKey(Group, null=True, blank=True)       status = models.SmallIntegerField(max_length=1,default=0)       added_on = models.DateTimeField(auto_now_add=True) 

The first part of the tutorial ran fine, got the desired output in json format as mentioned, however the second tutorial onwards i am getting type error:

TypeError at /authentication/userprofile/ 'type' object is not iterable Request Method: GET Request URL:    http://*****.com/authentication/userprofile/ Django Version: 1.6 Exception Type: TypeError Exception Value:     'type' object is not iterable Exception Location: /home/web/cptm_venv/lib/python2.7/site-     packages/rest_framework/views.py in get_permissions, line 226 Python Executable:  /usr/bin/python Python Version: 2.7.3 Python Path:     ['/home/web/cptm_venv/lib/python2.7/site-packages',  '/home/web/cptm',  '/home/web/cptm_venv/lib/python2.7/site-packages',  '/usr/lib/python2.7',  '/usr/lib/python2.7/plat-linux2',  '/usr/lib/python2.7/lib-tk',  '/usr/lib/python2.7/lib-old',  '/usr/lib/python2.7/lib-dynload',  '/usr/local/lib/python2.7/dist-packages',  '/usr/lib/python2.7/dist-packages',  '/usr/lib/pymodules/python2.7']  Server time:   Wed, 11 Dec 2013 17:33:54 +0530  Traceback Switch to copy-and-paste view  /home/web/cptm_venv/lib/python2.7/site-packages/django/core/handlers/base.py in get_response                 response = wrapped_callback(request, *callback_args, **callback_kwargs) ... ▶ Local vars /home/web/cptm_venv/lib/python2.7/site-packages/django/views/generic/base.py in view         return self.dispatch(request, *args, **kwargs) ... ▶ Local vars /home/web/cptm_venv/lib/python2.7/site-packages/django/views/decorators/csrf.py in    wrapped_view     return view_func(*args, **kwargs) ... ▶ Local vars /home/web/cptm_venv/lib/python2.7/site-packages/rest_framework/views.py in dispatch         response = self.handle_exception(exc) ... ▶ Local vars /home/web/cptm_venv/lib/python2.7/site-packages/rest_framework/views.py in dispatch         self.initial(request, *args, **kwargs) ... ▶ Local vars /home/web/cptm_venv/lib/python2.7/site-packages/rest_framework/views.py in initial     self.check_permissions(request) ... ▶ Local vars /home/web/cptm_venv/lib/python2.7/site-packages/rest_framework/views.py in   check_permissions      for permission in self.get_permissions(): ... ▶ Local vars /home/web/cptm_venv/lib/python2.7/site-packages/rest_framework/views.py in get_permissions     return [permission() for permission in self.permission_classes] ... ▶ Local vars 

The rest of the code is almost same as given in the above link in 2nd part and 3rd part: views.py

from apps.authentication.models import UserProfile from apps.authentication.serializers import UserProfileSerializer from rest_framework import mixins from rest_framework import generics  class UserProfileList(mixins.ListModelMixin,               mixins.CreateModelMixin,               generics.GenericAPIView):     queryset = UserProfile.objects.all()     serializer_class = UserProfileSerializer      def get(self, request, *args, **kwargs):         return self.list(request, *args, **kwargs)      def post(self, request, *args, **kwargs):         return self.create(request, *args, **kwargs)   class UserProfileDetail(mixins.RetrieveModelMixin,                 mixins.UpdateModelMixin,                 mixins.DestroyModelMixin,                 generics.GenericAPIView):     queryset = UserProfile.objects.all()     serializer_class = UserProfileSerializer      def get(self, request, *args, **kwargs):         return self.retrieve(request, *args, **kwargs)      def put(self, request, *args, **kwargs):         return self.update(request, *args, **kwargs)      def delete(self, request, *args, **kwargs):         return self.destroy(request, *args, **kwargs) 

urls.py

from django.conf.urls import patterns, url from rest_framework.urlpatterns import format_suffix_patterns from apps.authentication import views  urlpatterns = patterns('',     url(r'^userprofile/$', views.UserProfileList.as_view()),     url(r'^userprofile/(?P<pk>[0-9]+)/$', views.UserProfileDetail.as_view()), )  urlpatterns = format_suffix_patterns(urlpatterns) 

I am missing something very obvious, tried a lot to search what exactly the "type object not iterable" means in this context, and which object is causing the problem, but no luck. I am using Django Rest Framework version 2.3.

Thanks in advance

like image 329
Sirius Avatar asked Dec 11 '13 12:12

Sirius


People also ask

How do I create a custom exception in Django REST framework?

Custom exception handlingThe exception handler function should either return a Response object, or return None if the exception cannot be handled. If the handler returns None then the exception will be re-raised and Django will return a standard HTTP 500 'server error' response.

How do I start a Django REST framework?

# Create the project directory mkdir tutorial cd tutorial # Create a virtual environment to isolate our package dependencies locally python3 -m venv env source env/bin/activate # On Windows use `env\Scripts\activate` # Install Django and Django REST framework into the virtual environment pip install django pip install ...

Can we use Django for REST API?

Django REST framework (DRF) is a powerful and flexible toolkit for building Web APIs. Its main benefit is that it makes serialization much easier. Django REST framework is based on Django's class-based views, so it's an excellent option if you're familiar with Django.


1 Answers

Just to let others know, I kept getting this same error and found that I forgot to include a comma in my REST_FRAMEWORK. I had this:

'DEFAULT_PERMISSION_CLASSES': (     'rest_framework.permissions.IsAuthenticated' ), 

instead of this:

'DEFAULT_PERMISSION_CLASSES': (     'rest_framework.permissions.IsAuthenticated', ), 

The comma defines this as a one-element tuple

like image 112
dbryant4 Avatar answered Sep 30 '22 20:09

dbryant4