簡體   English   中英

從views.py獲取JSON格式的當前登錄用戶

[英]Get current logged in user in JSON Format from views.py

我正在嘗試構建一個關注和取消關注按鈕,我只想顯示該按鈕對於登錄的任何其他用戶,用戶不應該能夠關注自己。

如何從我的views.py 將當前登錄的用戶以JSON 格式返回到我的JS 文件中? 我在 JavaScript 文件中而不是在模板中構建按鈕,我試圖以 JSON 格式返回但沒有成功

視圖.py

def display_profile(request, profile):
    try:
        profile_to_display = User.objects.get(username=profile)
        profile_to_display_id = User.objects.get(pk=profile_to_display.id)
    except User.DoesNotExist:
        return JsonResponse({"error": "Profile not found."}, status=404)

    # Return profile contents
    if request.method == "GET":
        return JsonResponse(profile_to_display.profile.serialize(), safe=False)
    else:
        return JsonResponse({
            "error": "GET or PUT request required."
        }, status=400)

模型.py

from django.contrib.auth.models import AbstractUser
from django.db import models


class User(AbstractUser):
    pass


class NewPost(models.Model):
    poster = models.ForeignKey("User", on_delete=models.PROTECT, related_name="posts_posted")
    description = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
    likes = models.IntegerField(default=0)

    def serialize(self):
        return {
            "id": self.id,
            "poster": self.poster.username,
            "description": self.description,
            "date_added": self.date_added.strftime("%b %d %Y, %I:%M %p"),
            "likes": self.likes
        }


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    following = models.ManyToManyField(User, blank=True, related_name="following")
    followers = models.ManyToManyField(User, blank=True, related_name="followers")

    def serialize(self):
        return {
            "profileID": self.user.id,
            "following": int(self.following.all().count()),
            "followers": int(self.followers.all().count()),
        }

index.js

function load_user_info(user_clicked_on){
    document.querySelector('#page-view').style.display = 'none';
    document.querySelector('#posts-view').style.display = 'none';
    document.querySelector('#show-posts').style.display = 'none';
    document.querySelector('#load-profile').style.display = 'block';

    fetch(`/profile/${user_clicked_on}`)
        .then(response => response.json())
        .then(profile => {
            const profile_element = document.createElement('div');
            const followers = document.createElement('div');
            const following = document.createElement('div');
            const follow_button = document.createElement('button');
            followers.innerHTML = 'Followers: ' + profile.followers;
            following.innerHTML = 'Following: ' + profile.following;
            if (profile.profileID == ?? ){
               follow_button.innerHTML = 'Sameuser';
            }else{
                follow_button.innerHTML = 'Not same user';
            }
            profile_element.appendChild(followers);
            profile_element.appendChild(following);
            profile_element.appendChild(follow_button);
            profile_element.classList.add('profile_element');
            document.querySelector('#user-profile').appendChild(profile_element);
        });
    document.querySelector('#user-profile').innerHTML = `<h3>${user_clicked_on.charAt(0).toUpperCase() + user_clicked_on.slice(1)} Profile</h3>`;
}

我認為您需要的只是登錄用戶的詳細信息嗎? 可能您可以通過使用從請求 object 中獲取它

{{request.user}}

這將返回記錄的用戶實例

{{request.user.username}} {{request.user.email}}

這將返回用戶名和 email

我不知道您是否可以直接在 javascript 中使用它,但是您可以使用隱藏字段將其保存在模板中

<input type="hidden" value="{{request.user.username}}" id='user_detail'>

並使用 id 選擇器(getElementById 或 jquery)抓取它

$('#user_detail').val()

暫無
暫無

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

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