首页 > 解决方案 > Django REST Framework:创建用户不需要密码,发送时密码不保存

问题描述

我正在使用 DRF 创建一个简单的注册/登录应用程序,并且在创建新用户时无法输入密码。

我一直潜伏在 SO 和文档中,但无法弄清楚这一点。

序列化程序.py

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


class UserSerializer(HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 
                  'groups', 'first_name', 'last_name',
                  'date_joined', 'last_login'
                 )
        write_only_fields = ('password',)

视图.py

from django.contrib.auth.models import User, Group
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.viewsets import ModelViewSet, ReadOnlyModelViewSet
from rest_framework.generics import CreateAPIView
from .serializers import UserSerializer


class UserReadOnlyViewSet(ReadOnlyModelViewSet):
    """
    API endpoint that allows users to be viewed.
    """
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)

    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class UserCreateView(CreateAPIView):
    """
    API endpoint that allows users to be created.
    """
    serializer_class = UserSerializer

网址.py

from django.urls import path, include
from rest_framework import routers
from .views import UserReadOnlyViewSet, UserCreateView

router = routers.DefaultRouter()
router.register(r'users', UserReadOnlyViewSet)


urlpatterns = [
    path('', include(router.urls)),
    path('signup/', UserCreateView.as_view()),
]

我能够在端点列出用户users/| users/<pk>/,并且我可以通过signup/使用以下 JSON 数据发布到 来创建用户:

{
    "username": "new_user",
    "password": "12345678",
    "email": "fulano@dominio.com"
}

我还可以通过仅username在请求正文中发送来创建用户,并且我需要密码,就像用户名一样。

所以,总而言之,我遇到的问题是

  1. 发帖时不需要密码signup/
  2. 当我发送密码时没有保存,既不是散列也不是纯文本。

谢谢你。

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读