TypeError同时使用django休息框架教程 [英] TypeError while using django rest framework tutorial

查看:131
本文介绍了TypeError同时使用django休息框架教程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚使用Django Rest框架,我正在关注本教程
Django-Rest-Framework



而不是片段,我的模型由以下给出的用户配置文件组成:

 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
$ model.IntegerField(max_length = 1,default = 0,choices = USER_TYPE)
group = models.ForeignKey(Group,null = True,blank = True)
status = models.SmallIntegerField(max_length = default = 0)
added_on = models.DateTimeField(auto_now_add = True)

第一部分的教程运行正常,得到所需的输出json格式,但是第二个教程开始,我得到类型错误:

  TypeError at / authentication / userprofile / 
'type'objec t不是可迭代的
请求方法:GET
请求URL:http://*****.com/authentication/userprofile/
Django版本:1.6
异常类型: TypeError
异常值:
'type'对象不可迭代
异常位置:/home/web/cptm_venv/lib/python2.7/site- packages / rest_framework / views.py in get_permissions ,line 226
Python可执行文件:/ usr / bin / python
Python版本:2.7.3
Python路径:
['/ 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']
服务器时间:星期三, 11 Dec 2013 17:33:54 +0530
T回车切换到复制粘贴视图

/home/web/cptm_venv/lib/python2.7/site-packages/django/core/handlers/base.py在get_response
响应中= wrapped_callback(request,* callback_args,** callback_kwargs)...
▶本地vars
/home/web/cptm_venv/lib/python2.7/site-packages/django/views/generic/base .py in view
return self.dispatch(request,* args,** kwargs)...
▶本地vars
/home/web/cptm_venv/lib/python2.7/site -packages / django / views / decorators / csrf.py in wrapped_view
return view_func(* args,** kwargs)...
▶本地vars
/ home / web / cptm_venv / lib /python2.7/site-packages/rest_framework/views.py在调度
response = self.handle_exception(exc)...
▶本地vars
/ home / web / cptm_venv / lib /python2.7/site-packages/rest_framework/views.py在调度
self.initial(request,* args,** kwargs)...
▶本地vars
/ home /网络/ cptm_venv / lib中/ python2.7 / site-packages中/ rest_framewor k / views.py在初始
self.check_permissions(请求)...
▶本地vars
/home/web/cptm_venv/lib/python2.7/site-packages/rest_framework/ views.py在check_permissions
中的self.get_permissions()中的权限:...
▶本地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] ...
▶本地vars

其余的代码与第二部分和第三部分的上述链接中给出的几乎相同:
views.py


$ b $从apps.authentication.models导入UserProfile
从apps.authentication.serializers导入UserProfileSerializer
从rest_framework import mixins
从rest_framework import import ... $ $ $ $ $

class UserProfileList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = UserProfile.o bjects.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)

我很遗漏一些非常明显的东西,尝试搜索上下文中的不可迭代的类型对象是什么意思,哪个对象导致问题,但是没有运气。我正在使用Django Rest Framework 2.3版。



提前感谢

解决方案

正如Daniel上面指出的,我在设置文件中有这个愚蠢的片段,导致问题,

  #REST_FRAMEWORK = {
# '''
#'''仅在视图''上设置了serializer_class属性'''
#'DEFAULT_MODEL_SERIALIZER_CLASS'时才使用超链接样式:
#'rest_framkework.serializers
#'DEFAULT_PERMISSION_CLASSES'
#'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
#}

恭喜这一点,它的工作。


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

解决方案

As pointed out by Daniel above, i had this stupid snippet in the settings file, which was causing the problem,

#REST_FRAMEWORK = {
#   '''Use hyperlinked styles by default'''
#   '''only used if serializer_class attribute is not set on a view'''
#   'DEFAULT_MODEL_SERIALIZER_CLASS':
#         'rest_framkework.serializers.HyperLinkedModelSerializer',
#   'DEFAULT_PERMISSION_CLASSES':
#          'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
# }

Commmented this and it worked.

这篇关于TypeError同时使用django休息框架教程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆