2017-06-16 53 views
0

我想向我的Django REST應用程序添加用戶註冊功能。如何在Django REST框架中爲我的用戶註冊視圖集編碼密碼?

這裏是我的串行:

from django.contrib.auth.models import User 
from rest_framework import serializers 

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

    class Meta: 
     model = User 
     fields = ('url', 'id', 'username', 'password', 'email', 'snippets') 

這是我的觀點:

from snippets.serializers import UserSerializer 
from django.contrib.auth.models import User 
from rest_framework import viewsets 

class UserViewSet(viewsets.ModelViewSet): 
    """ 
    This viewset automatically provides `list` and `detail` actions. 
    """ 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

現在它採用明文存儲的密碼。我如何編碼密碼?

我寧願繼續使用ViewSet類,因爲它們非常乾淨和方便。

+0

@ e4c5該問題不使用ViewSet類。這個問題特別要求如何使用ViewSet類來完成。 –

+0

夠公平的。撤銷 – e4c5

回答

2
class UserCreateSerializer(ModelSerializer): 
    def create(self, validated_data): 
     instance = User.objects.create_user(**validated_data) 
     return instance 

    class Meta: 
     model = User 
     fields = ('username', 'email', 'password') 



class UserViewSet(ModelViewSet): 
    queryset = User.objects.all() 
    serializer_class = UserCreateSerializer 
    permission_classes = (IsAuthenticated) 

    def get_permissions(self): 
     if self.action in ('create',): 
      self.permission_classes = [AllowAny, ] 
     return super(self.__class__, self).get_permissions() 

    def create(self, request, *args, **kwargs): 
     serializer = UserCreateSerializer(data=request.data) 
     if serializer.is_valid(): 
      user = serializer.create(serializer.validated_data) 
      return Response('success') 
     else: 
      return Response(serializer.errors) 

User.objects.create_user()將編碼和Django默認的加密算法(PBKDF2)您的密碼。而且你可以使用make_password改變你的出身密碼編碼,或者你可以使用user.set_password(request.data['pwd_new'])

from django.contrib.auth.hashers import make_password 

更多信息here

相關問題