簡體   English   中英

在iOS應用上獲取Django當前用戶

[英]getting Django current user on iOS app

我是Django的新手,正在啟動Django應用程序,正在使用注冊應用程序和Django rest框架,該應用程序還將用作iOS應用程序的后端,我已經設法從iOS應用程序創建用戶並從瀏覽器編輯用戶配置文件,我需要幫助來找到一種方法,該方法可以讓用戶在登錄后編輯其配置文件詳細信息。我嘗試將諸如“ user.username”之類的lookup_field設置為UserProfileViewSet,以便可以訪問UserProfile對象並對其進行編輯,但這沒有用。

我還以為我可以在登錄后以某種方式返回用戶ID,並使用該ID引用我要編輯的用戶個人資料,但這似乎並不實際。 你怎么看??

我發現執行此操作的另一種方法是調用user.get_profile(),但是我不知道如何從iOS應用程序中完成此工作。

這是我的UserProfile模型和序列化程序,任何幫助都將非常有用。 謝謝

class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
# Extra attribuets
pagetitle = models.TextField(null=False)
location = models.TextField(null=True)
website = models.TextField(null=True)
bio = models.TextField(null=True)
sex = models.TextField(null=True)
birthdate = models.DateField(null=True)
def __unicode__(self):
    return "%s's profile" % self.user

def create_profile(sender, instance, created, **kwargs):
    if created:
        profile, created= UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_profile, sender=User)


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('username','email','password')

class UserProfileSerializer(serializers.HyperlinkedModelSerializer):
    user = UserSerializer(many=False)
    class Meta:
        model = UserProfile
        fields = ('user','bio')

我使用這樣的信號創建UserProfile

def create_profile(sender, instance, created, **kwargs):
    if created:
        profile, created= UserProfile.objects.get_or_create(user=instance)

post_save.connect(create_profile, sender=User)

您沒有發布ViewSet代碼,所以我不得不猜測。 但是您的model應該設置為Userlookup_field應該設置為username

就像是:

class UserViewSet(ModelViewSet):
    model = User
    lookup_field = "username"

對於每個想要為用戶獲取個人資料的人,這都是我在凱文的幫助下設法做到的。

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        depth = 1
        fields = ('id','username','email','profile')



class CurrentUserView(APIView):
    def get(self, request):
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

使用這樣的網址

url(r'^api/current-user',CurrentUserView.as_view(),
        name="current_user"),

你會得到這樣的答案

"id": 1, 
    "username": "username", 
    "email": "email@email.com", 
    "profile": {
        "id": 1, 
        "user": 1, 
        "bio": "My Bio", 
        "sex": "M", 
        "birthdate": "1987-12-02"
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM