我想在服务器端创建密码并将其发送回用户。以下是我写的代码:
class ASCreateSerializer(serializers.Serializer):
name = serializers.CharField(write_only = True)
password = serializers.SerializerMethodField()
def get_password(self, obj):
from django.utils.crypto import get_random_string
password = get_random_string(length=16)
return password
def create(self, validated_data):
name = validated_data['name']
as = AS.objects.get_or_create(name = name,
password = validated_data['password']
)
我收到密码'的密钥错误。如何在SerializerMethodField
中访问create()
的值?
答案 0 :(得分:0)
SerializerMethodField
(Doc)是一个只读字段。当您想要计算给定对象的字段时使用此字段,因此如果您正在接收输入(写例),则不需要此字段。因此,在您的情况下,您可以在create方法中生成密码,并且在序列化程序中只有name
。
答案 1 :(得分:0)
您可以通过@Andrey Shipilov提到的get_password()
来访问self.get_password()
方法。但是从obj
的定义中删除了不必要的第二个参数get_password()
。
如果您需要将随机密码保存到数据库并将其作为响应返回,请考虑执行以下操作:
def create_password():
from django.utils.crypto import get_random_string
password = get_random_string(length=16)
return password
class ASCreateSerializer(serializers.Serializer):
name = serializers.CharField(write_only = True)
password = serializers.CharField()
def create(self, validated_data):
name = validated_data['name']
as = AS.objects.get_or_create(
name = name,
password = create_password()
)