2017-06-16 15 views
0

Django RESTアプリケーションにユーザー登録機能を追加しようとしています。Django REST Frameworkでユーザー登録ビューセットのパスワードをエンコードするにはどうすればいいですか?

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)とパスワードをエンコードします.ANDあなたは1をコード化するために、あなたの起源のパスワードを変更するmake_passwordを使用するか、使用することができますuser.set_password(request.data['pwd_new'])

from django.contrib.auth.hashers import make_password 

詳細here

関連する問題