2015-12-15 3 views
0

Я использую пользовательскую модель пользователя с профилем пользователя, используя OneToOneField с этой структурой:Джанго передачи данных профиля пользователя от клиента к серверу

email 
password 
profile : { 
    username 
    avatar 
} 

Она работает довольно хорошо для мобильного телефона, потому что я только в основном отправить JSON назад и в-четвертых, но это проблема, когда я использую свой API с веб-сайтом, потому что в html нет способа отправить json-подобные данные, поэтому я не могу заполнить поле «profile», не используя 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-формы.

Любая идея, как я должен подходить к этому?

ответ

0

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

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

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

+0

Я уже использую рамки Джанго отдыха. Я собираюсь обновить свой вопрос с помощью своих сериализаторов, возможно, это станет более ясным. – soueuls