javascript - 从views.py 获取JSON 格式的当前登录用户
问题描述
我正在尝试构建一个关注和取消关注按钮,我只想显示该按钮对于登录的任何其他用户,用户不应该能够关注自己。
如何从我的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>`;
}
解决方案
我认为您需要的只是登录用户的详细信息吗?可能您可以通过使用从请求对象中获取它
{{request.user}}
这将返回记录的用户实例
{{request.user.username}} {{request.user.email}}
这将返回用户名和电子邮件
我不知道您是否可以直接在 javascript 中使用它,但您可以使用隐藏字段将其保存在模板中
<input type="hidden" value="{{request.user.username}}" id='user_detail'>
并使用 id 选择器(getElementById 或 jquery)抓取它
$('#user_detail').val()
推荐阅读
- log4j - Hazelcast IMDG 3.12.5 添加 log4j 依赖以支持日志记录
- symfony - 如何在 webpack encore 中设置 config.node
- google-chrome - 在 WSL Ubuntu 上运行“google-chrome”作为 --headless --no 沙箱会产生多个错误 - 如何在 WSL 中使用无头截屏?
- c - 在计算文本文件程序的字符时出现未定义的行为?
- python - 两个张量之间的Pytorch差异
- lua - 使用lua更改属性名称的xml标记
- postgresql - 使用 AWS Aurora PostgreSQL 数据库集群连接到哪个终端节点进行读/写操作
- php - 按 SKU 数字对 WooCommerce 产品进行排序 (1.2.3.4.5.6.......)
- python - 如何使用 python 和 matplotlib 为矩形内的颜色填充设置动画?
- azure - 我们如何在 Azure 应用程序洞察中显示数据库查询