[英]Password validation not work in django-rest-framework
when I register new user at that time password validator not work.(eg When I enter admin123 and password is also admin123 at that time password validator not saw like this error: password must not same as username.)当我注册新用户时,密码验证器不起作用。(例如,当我输入 admin123 并且密码也是 admin123 时,密码验证器没有看到这样的错误:密码不能与用户名相同。)
serializer.py:序列化程序.py:
from rest_framework import serializers
from django.contrib.auth import get_user_model
User = get_user_model()
class SignUpSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username','email','password']
write_only_fields = ('password',)
read_only_fields = ('id',)
views.py:视图.py:
from rest_framework import status
from django.contrib.auth import get_user_model
from .serializers import SignUpSerializer
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from django.contrib.auth.password_validation import validate_password
from django.core.exceptions import ValidationError
User = get_user_model()
@api_view(['POST'])
@permission_classes([AllowAny,])
def signup(request):
serializer = SignUpSerializer(data=request.data)
if serializer.is_valid():
username = serializer.data['username']
try:
validate_password(serializer.data['password'], username)
except ValidationError as e:
return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
user = User(
username = username,
email = serializer.data['email']
)
user.set_password(serializer.data['password'])
user.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
settings.py设置.py
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
The second argument of validate_password
is User object, not username string. validate_password
的第二个参数是用户 object,而不是用户名字符串。
You can see that in docs here: https://docs.djangoproject.com/en/3.1/topics/auth/passwords/#django.contrib.auth.password_validation.validate_password您可以在此处的文档中看到: https://docs.djangoproject.com/en/3.1/topics/auth/passwords/#django.contrib.auth.password_validation.validate_password
Try this in your views.py
:在你的views.py
中试试这个:
from rest_framework import status
from django.contrib.auth import get_user_model
from .serializers import SignUpSerializer
from rest_framework.decorators import api_view, permission_classes
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from django.contrib.auth.password_validation import validate_password
from django.core.exceptions import ValidationError
User = get_user_model()
@api_view(['POST'])
@permission_classes([AllowAny,])
def signup(request):
serializer = SignUpSerializer(data=request.data)
if serializer.is_valid():
username = serializer.data['username']
user = User(
username = username,
email = serializer.data['email']
)
try:
validate_password(serializer.data['password'], user)
except ValidationError as e:
return Response(str(e), status=status.HTTP_400_BAD_REQUEST)
user.set_password(serializer.data['password'])
user.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.