Django передает данные профиля пользователя с клиента на сервер

Я использую пользовательскую модель пользователя с профилем пользователя, используя 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.

Есть идеи, как мне подойти к этому?

2 ответа

Решение

Если я правильно понял вашу проблему, вы можете найти для этого полезную структуру отдыха Django.

В структуре отдыха django есть представления, которые могут обрабатывать как данные json, так и данные форм и передавать их в один и тот же механизм проверки. В основном он использует заголовок Content-Type для выбора парсера для входящих данных (более подробно здесь). Может быть, вы можете посмотреть, что они сделали, или использовать библиотеку напрямую.

Надеюсь это поможет.

Может быть, вы можете написать ApiView с FormParser?

Смотрите: http://www.django-rest-framework.org/api-guide/parsers/

Другие вопросы по тегам