के साथ django पासवर्ड सत्यापनकर्ताओं को एकीकृत करें मैं dzango आराम फ्रेमवर्क serializers के साथ django validators 1.9 को एकीकृत करने की कोशिश कर रहा हूं। लेकिन serialized 'उपयोगकर्ता' (django आराम ढांचे का) django मान्यताओं के साथ संगत नहीं है।django rest framework validate_password
यहाँ serializers.py
import django.contrib.auth.password_validation as validators
from rest_framework import serializers
class RegisterUserSerializer(serializers.ModelSerializer):
password = serializers.CharField(style={'input_type': 'password'}, write_only=True)
class Meta:
model = User
fields = ('id', 'username', 'email, 'password')
def validate_password(self, data):
validators.validate_password(password=data, user=User)
return data
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
user.is_active = False
user.save()
return user
मैं MinimumLengthValidator और NumericPasswordValidator सही पाने के लिए है क्योंकि दोनों समारोह सत्यापित करें सत्यापित करने में 'उपयोगकर्ता का उपयोग नहीं करते कामयाब रहे है।
def validate(self, password, user=None):
if password.isdigit():
raise ValidationError(
_("This password is entirely numeric."),
code='password_entirely_numeric',
)
UserAttributeSimilarityValidator जैसे अन्य प्रमाणकों के लिए, समारोह ('उपयोगकर्ता को सत्यापित करने में एक और एक तर्क' उपयोगकर्ता 'का उपयोग करता है Django उपयोगकर्ता मॉडल है, अगर मैं: स्रोत कोड Django स्रोत कोड से here
अंश है मीटर गलत नहीं) Django स्रोत कोड से
अंश:
def validate(self, password, user=None):
if not user:
return
for attribute_name in self.user_attributes:
value = getattr(user, attribute_name, None)
मैं serializ कैसे बदल सकता हूँ क्या django प्रमाणकों (UserAttributeSimilarityValidator) में एड उपयोगकर्ता Django स्रोत कोड से
अंश देख सकते हैं:
def validate(self, password, user=None):
if not user:
return
for attribute_name in self.user_attributes:
value = getattr(user, attribute_name, None)
if not value or not isinstance(value, string_types):
continue
संपादित
Django बाकी फ्रेमवर्क Django के के सभी प्राप्त कर सकते हैं में निर्मित पासवर्ड सत्यापन (लेकिन यह एक हैक की तरह है)। यहाँ एक समस्या है:
validationError की तरह इस
[ValidationError ([ 'यह पासवर्ड बहुत छोटा है यह से कम 8 अक्षर में होना चाहिए।।']), ValidationError ([ 'यह पासवर्ड है पूरी तरह से संख्यात्मक। '])]
सत्यापन में फ़ील्ड नहीं है। Django बाकी ढांचे
{
"non_field_errors": [
"This password is too short. It must contain at least 8 characters.",
"This password is entirely numeric."
]
}
रूप में देखते हैं मैं raise ValidationError
अपने कोड में कुछ टाइपो रहे हैं की जरूरत है। वैसे, आपका समाधान मान्य करने पर ठीक काम करता है लेकिन django आराम ढांचे को फ़ील्ड नाम नहीं मिल सकता है इसलिए non_field_errors ---> { "non_field_errors": [ "पासवर्ड ईमेल के समान ही है।", " यह पासवर्ड बहुत छोटा है। इसमें कम से कम 8 वर्ण होने चाहिए। " ] } – momokjaaaaa
मैंने वास्तव में कोड का परीक्षण नहीं किया है, इसलिए यहां कुछ और टाइप हो सकते हैं लेकिन आपको इस कोड का सही उपयोग करने और परीक्षण करने से नहीं रोकना चाहिए। 'NON_FIELD_ERRORS' के बारे में मैंने अपना उत्तर अपडेट किया और अब उठाए गए त्रुटियों में उन त्रुटियों के लिए कुंजी के रूप में 'password' फ़ील्ड नाम होना चाहिए। – AKS
ध्यान रखें कि '** डेटा' में आंशिक ('पैच') अपडेट करते समय उपयोगकर्ता ऑब्जेक्ट बनाने के लिए सभी आवश्यक फ़ील्ड शामिल नहीं हो सकते हैं। – faph