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
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.
# 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 ...
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With