我想散列我的密码,但有些字段不应该是必需的



在django验证中,当我注册时,我不想验证一些字段,因为它们不是必需的,但如果我从另一个页面创建用户,我需要这些字段,那么如何执行未必需的一些字段

**Serializers.py**
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "username", "password" ,"first_name", "last_name","email", "User_Type","url","sign_up_count", "facebook", "twitter", "linkedin", "instagram", "telegram", "discord", "snapchat"]
def create(self, validated_data):
user = User(
email=validated_data['email'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
username=validated_data['email'],
User_Type=validated_data['User_Type'],
facebook=validated_data['facebook'],
twitter=validated_data['twitter'],
linkedin=validated_data['linkedin'],
instagram=validated_data['instagram'],
telegram=validated_data['telegram'],
discord=validated_data['discord'],
snapchat=validated_data['snapchat'],
)
user.set_password(validated_data['password'])
user.save()
return user
**view.py**
class CreateUserByAdmin(APIView):
def post(self, request):
data = request.data
data.update(username = data.get('email'))
try:
if User.objects.filter(email=data.get('email')).exists():
return Response({'details' : 'User Already Exists'}, 403)
else:
serializer = UserSerializer(data=data)
print("serializer Data == > ", serializer.data)
if serializer.is_valid():
serializer.save()            
return Response({'details' : 'User Created'})
else:
return Response({'details' : 'Somthing went Wrong'}, 403)
except:
return Response({'details' : 'Somthing went Wrong1'}, 403)
**view.py**
def post(self, request):
params = request.query_params.get("refer")
try:
refer_by=User.objects.get(url=params)
data = json.dumps(request.data)
data = json.loads(data)
username=AddUser(request,data)
SendAccountVerifcationEmail(data)
refer_by=User.objects.get(url=params)
refer_to=User.objects.get(username=username)
ReferLink(refer_by,refer_to)
return Response({"ok":"ok"})
except:
data = json.dumps(request.data)
data = json.loads(data)
username=AddUser(request,data)
SendAccountVerifcationEmail(data)
return Response({"ok":"ok"})
**helpers.py**
def AddUser(request,data):
serializer = UserSerializer(data=data)
if serializer.is_valid():
serializer.save()
username=request.data["email"]
# user_email=request.data["email"]
user = User.objects.get(email=username)
user.username = username
user.save()
token, created = Token.objects.get_or_create(user=user)
if username:
return username
else:
return "Ok"

当我注册一个帐户时,我不想要facebook、telegram等。。。,但是如果我在另一个页面上创建用户,我需要它。那么如何设置验证的非必需字段

目前您有一个序列化程序:UserSerializer,该序列化程序需要所有字段,如linkedin等。

你应该保持原样,甚至将其重命名为WebsiteRegistrationUserSerializer,以更清楚这个序列化程序的用途

下一步是像这样声明AdminRegistrationUserSerializer:

class AdminRegistrationUserSerializer (serializers.ModelSerializer):
class Meta:
model = User
fields = ["id", "username", "password" ,"first_name", "last_name","email", "User_Type", <all_fields_you_want_to_include>]
def create(self, validated_data):
password = validated_data.pop('password')
user = User(**validated_data)
user.set_password(password)
user.save()
return user

之后,您可以将CreateUserByAdmin中的序列化程序更改为AdminRegistrationUserSerializer

最新更新