2014-12-08 3 views
9

django-rest-framework에서 작업하고 있습니다. 튜토리얼의 하이퍼 링크 된 API 부분 인 &의 관계에 도착할 때까지 모든 것이 잘 진행되었습니다. 나는 조금을 위해 덤비는 후 지금 점점 오전 오류 :Django-Rest-Framework 관계 및 하이퍼 링크 된 API 문제

ImproperlyConfigured at /api/users/ "^\.(?P<format>[a-z0-9]+)\.(?P<format>[a-z0-9]+)$" is not a valid regular expression: redefinition of group name u'format' as group2; was group 1

내가 이것으로 어떤 연구를하고 시도했지만 더가 잘못되면 그것으로 무엇보다 나는 혼란을 찾을 수 없습니다

Heres는 내 코드 :

modules.py

class Home(models.Model): 
    user = models.ForeignKey(User) 
    #address ect 

serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    username = serializers.HyperlinkedRelatedField(many=True, read_only=True, view_name='home-detail') 

    class Meta: 
     model = User 
     fields = ('url', 'username', 'home') 


class HomeSerializer(serializers.HyperlinkedModelSerializer): 
    owner = serializers.Field(source='owner.username') 
    highlight = serializers.HyperlinkedIdentityField(view_name='home-highlight', read_only=True, format='html') 

    class Meta: 
     model = Home 
     fields = ('url', 'owner', 'postcode') 

api.py

urlpatterns = format_suffix_patterns([ 
    url(r'^$', api.api_root), 

    url(r'^users/$', 
     api.UserList.as_view(), 
     name='user-list'), 
    url(r'^users/(?P<pk>[0-9]+)/$', 
     api.UserDetail.as_view(), 
     name='user-detail'), 
    url(r'^home/$', 
     api.HomeList.as_view(), 
     name='home-list'), 
    url(r'^home/(?P<pk>[0-9]+)/$', 
     api.HomeDetail.as_view(), 
     name='home-detail'), 
    url(r'^home/(?P<pk>[0-9]+)/highlight/$', 
     api.HomeHighlight.as_view(), 
     name='home-highlight') 
]) 

urlpatterns += [ 
    url(r'^api-auth/', include('rest_framework.urls', 
           namespace='rest_framework')), 
] 

urlpatterns = format_suffix_patterns(urlpatterns) 

답변

21

당신은 두 번 format_suffix_patterns를 호출

@api_view(('GET',)) 
def api_root(request, format=None): 
    return Response({ 
     'users': reverse('user-list', request=request, format=format), 
     'homes': reverse('home-list', request=request, format=format) 
    }) 


class UserList(generics.ListCreateAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 


class UserDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 


class HomeList(generics.ListCreateAPIView): 
    queryset = Home.objects.all() 
    serializer_class = HomeSerializer 


class HomeDetail(generics.RetrieveUpdateDestroyAPIView): 
    queryset = Home.objects.all() 
    serializer_class = HomeSerializer 


class HomeHighlight(generics.GenericAPIView): 
    queryset = Home.objects.all() 
    renderer_classes = (renderers.StaticHTMLRenderer,) 

    def get(self, request, *args, **kwargs): 
     snippet = self.get_object() 
     return Response(snippet.highlighted) 

urls.py, 장고 두 format 그룹이 때문에 URL을 구문 분석하는 방법을 모르고있다 그래서.

첫 번째 호출이 필요하지 않습니다. 두 번째 호출이 사용자를 대신하여 처리하므로 (TokenAuthentication에는 여전히 접미어가 있습니다).

+7

'DefaultRouter'가 구현시'format_suffix_patterns'를 호출하기 때문에 동일한 오류가 발생했습니다. – Seth

+5

@Seth 'router = routers.DefaultRouter()'다음에'router.include_format_suffixes = False'를 추가하여 해결할 수 있습니다. –

+0

urls.php에서이 문제를 일으킨 urlpatterns = format_suffix_patterns (urlpatterns)가 있습니다. – shubhendu