Django 将用户配置文件数据从客户端传递到服务器

Django passing user profile data from client to server

本文关键字:服务器 客户端 用户 配置文件 数据 Django      更新时间:2023-09-26

我正在使用具有此结构的OneToOneField的自定义用户模型和用户配置文件:

email
password
profile : {
    username
    avatar
}

它适用于移动设备,因为我基本上只是来回发送 json,但是每当我将我的 API 与网站一起使用时,这都是一个问题,因为 html 中无法发送类似 json 的数据,因此我无法在不使用 ajax 的情况下填写"配置文件"字段。

我更愿意有可能使用纯 html 表单,并且仅将 javascript 用于客户端验证和动画,而不是将其用于注册等批评功能。

我还可以使用以下结构,然后为配置文件服务器端重建字典,但我确实觉得这还不够通用。

email
password
username
avatar

UserSerializer.py

class UserSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)
    profile = ProfileSerializer(required=True)
    class Meta:
        model = get_user_model()
        fields = ('id', 'email', 'password', 'date_joined', 'profile')
    def create(self, validated_data):
        #profile_data = validated_data.pop('profile')
        password = validated_data.pop('password')
        user = get_user_model().objects.create_user(**validated_data)
        user.set_password(password)
        #user.save()
        print(user)
        #print(profile_data

ProfileSerializer.py

class ProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Profile
        fields = ('username',)

因此,无论我使用的是json还是表单数据,显然它都在等待配置文件(对象(数据。我希望能够使用 html 表单来做到这一点。

知道我应该如何处理吗?

如果我正确理解了你的问题,你可能会发现 Django rest 框架对此很有用。

django rest 框架具有可以处理 json 和表单数据的视图,并将它们馈送到相同的验证机制中。它基本上使用内容类型标头为传入数据选择解析器(更多详细信息在这里(。也许你可以看看他们做了什么或直接使用库。

希望这有帮助。

也许你可以用FormParser写一个ApiView

请参阅:http://www.django-rest-framework.org/api-guide/parsers/#formparser