gpt4 book ai didi

django - 在 Django 中,限制用户访问特定的 url

转载 作者:行者123 更新时间:2023-12-04 04:02:55 24 4
gpt4 key购买 nike

我的 Django 应用程序中有以下 url:

path('rooms/<room_id>',views.home,name='home'),

模型:

class ChatRoom(models.Model):
eid = models.CharField(max_length=64, unique=True)
name = models.CharField(max_length=25)

观看次数

def rooms(request):
room = UserProfile.objects.filter(user=request.user).values()[0]['room_id']
rooms = ChatRoom.objects.all().values()
user = User.objects.filter(username=request.user)
return render(request,'chat/rooms.html',{'rooms':rooms,'room_user':room})

此处 是可变的,即它取决于房间模型的 eid。一个用户只能是一个房间的一部分。因此,用户只能访问一个 ,假设为“4”。因此,用户只能访问 rooms/4/。我怎样才能限制用户进入其他网址,例如/rooms/5/?.

最佳答案

你可能想从 UserProfileChatRoom 模型制作一个 ForeignKey:

class UserProfile(models.Model):
<b>room</b> = models.<b>ForeignKey(</b>ChatRoom, on_delete=models.PROTECT<b>)</b>
# …

然后您可以过滤房间以仅允许用户使用以下房间:

from django.contrib.auth.decorators import login_required

@login_required
def rooms(request):
# the ChatRoom or None
room = ChatRoom.objects.filter(userprofile__user=request.user).first()
return render(request,'chat/rooms.html',{'room': room})

因为你说的一个用户只能属于一个房间,所以它是一个单人房间。

在您的home 方法中,我们可以使用get_object_or_404(…) [Django-doc]在房间不是用户之一的情况下引发 404:

from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404

@login_required
def home(request, room_id):
room = <b>get_object_or_404(</b>ChatRoom, eid=room_id, userprofile__user=request.user<b>)</b>
# …

也就是说,如果用户只能是一个 ChatRoom 的成员,那么将它包含在 URL 中就没有多大意义。您可以简单地获取如上所示的聊天室。


Note: You can limit views to a view to authenticated users with the@login_required decorator [Django-doc].

关于django - 在 Django 中,限制用户访问特定的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62818409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com