2013-11-26 2 views
2

장고 나머지 프레임 워크 ModelSerializer장고 나머지 프레임 워크 <a href="https://docs.djangoproject.com/en/1.6/ref/contrib/auth/" rel="nofollow">User</a>와 <a href="http://django-rest-framework.org/api-guide/serializers#modelserializer" rel="nofollow">ModelSerializer</a>를 사용하는 방법 ModelSerializer

.

난 그냥 quickstart을 시도했다.

그리고 그것은 좋았다. 그러나 암호는 일반 텍스트에 저장됩니다.

$ pip freeze 
Django==1.6 
argparse==1.2.1 
djangorestframework==2.3.9 
wsgiref==0.1.2 

$ curl -X post -d "username=lee&password=test" http://localhost:8081/users/ 
{"id": 4, "password": "test", "last_login": "2013-11-26T08:12:06.166Z", "is_superuser": false, "username": "lee", "first_name": "", "last_name": "", "email": "", "is_staff": false, "is_active": false, "date_joined": "2013-11-26T08:12:06.167Z", "groups": [], "user_permissions": []} 

$ python manage.py shell 
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> 
>>> 
>>> 
>>> from django.contrib.auth.models import User 
>>> user=User.objects.get(username='lee') 
>>> user.password 
u'test' 
>>> 

어쩌면 ModelSerializerset_password를 사용하지 않습니다.

그래서 ... 나는 ModelSerializerset_password를 사용하려면 어떻게해야합니까?


[편집]

이 응답 해 주셔서 감사합니다 ~!

은 BTW, 나는 질문이 있습니다.

나는 코드가 뭔가 잘못 생각합니다.

https://gist.github.com/meoooh/7659801#file-gistfile1-py-L17

사용자 개체가 아직 만들어지지 않습니다. 하지만 그래서 뭔가 조금 어색 생각

라인 (17)에 get_object 호출합니다.

답변

1

당신은 사용자 뷰셋을 사용하고 set_password 조치 (들 Marking extra methods for routing.) 제공 할 수있다 :

from django.contrib.auth.models import User 
from rest_framework import viewsets 
from rest_framework import status 
from rest_framework.decorators import action 
from rest_framework.response import Response 
from myapp.serializers import UserSerializer, PasswordSerializer 

class UserViewSet(viewsets.ModelViewSet): 
    """ 
    A viewset that provides the standard actions 
    """ 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

    @action() 
    def set_password(self, request, pk=None): 
     user = self.get_object() 
     serializer = PasswordSerializer(data=request.DATA) 
     if serializer.is_valid(): 
      user.set_password(serializer.data['password']) 
      user.save() 
      return Response({'status': 'password set'}) 
     else: 
      return Response(serializer.errors, 
          status=status.HTTP_400_BAD_REQUEST) 
+0

가 감사를! 다시 질문을 참조하십시오! – chobo

+0

오! 고마워요. 미안, 바보 야. 네가 옳아! – chobo

관련 문제