亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為用戶 auth django 創建用戶配置文件

為用戶 auth django 創建用戶配置文件

蠱毒傳說 2021-09-24 15:23:24
我正在嘗試使用 django rest auth 模型為我的用戶創建一個配置文件,但是當我將數據發送到用戶的創建時,用戶的圖像沒有被填充,也就是說,它變得空了,我試圖發送節點與圖像一樣多,與 profile.image 一樣多,但在我的代碼下面沒有成功:模型\配置文件.pyfrom django.conf import settingsfrom django.db import modelsclass Profile(models.Model):    image = models.ImageField(blank=True)    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)    def __str__(self):        return self.user.email序列化器\用戶.pyfrom rest_framework import serializersfrom rest_framework.validators import UniqueValidatorfrom django.contrib.auth.models import Userfrom src.v1.user.models.profile import Profilefrom .profile import ProfileSerializerclass UserSerializer(serializers.ModelSerializer):    profile = serializers.SerializerMethodField()    email = serializers.EmailField(        required=True,        validators=[UniqueValidator(queryset=User.objects.all())]    )    username = serializers.CharField(        max_length=32,        validators=[UniqueValidator(queryset=User.objects.all())]    )    password = serializers.CharField(min_length=6, write_only=True)    @staticmethod    def get_profile(user):        """        Get or create profile        """        profile, created = Profile.objects.get_or_create(user=user)        return ProfileSerializer(profile, read_only=True).data    def create(self, validated_data):        user = User(email=validated_data['email'],                    username=validated_data['username'])        user.set_password(validated_data['password'])        user.save()        return user    class Meta:        model = User        fields = ('id', 'username', 'email', 'password', 'profile')
查看完整描述

2 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

SerializerMethodField只能按設計讀取。因此,這不僅僅是圖像,個人資料上沒有發布任何內容。


此外,如果在 GET 請求期間不存在配置文件,則創建該配置文件是一種糟糕的設計,因為通常,GET 請求應該是安全的并且不會改變應用程序的狀態。


相反,您應該在用戶創建期間創建配置文件。由于配置文件中只有一個字段要發布,因此對發布數據使用平面表示可能更簡單、更有效。


這是你應該做的。


序列化程序/user.py


class UserSerializer(serializers.ModelSerializer):

    profile = ProfileSerializer(read_only=True)

    image = serializers.ImageField(write_only=True)


    email = serializers.EmailField(

        required=True,

        validators=[UniqueValidator(queryset=User.objects.all())]

    )


    username = serializers.CharField(

        max_length=32,

        validators=[UniqueValidator(queryset=User.objects.all())]

    )


    password = serializers.CharField(min_length=6, write_only=True)


    def create(self, validated_data):

        user = User(email=validated_data['email'], username=validated_data['username'])

        user.set_password(validated_data['password'])

        user.save()

        Profile.objects.create(user=user, image=validated_data['image')

        return user

現在您可以將您的圖像字段與其他用戶字段一起發布


查看完整回答
反對 回復 2021-09-24
  • 2 回答
  • 0 關注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號