如何限制其他用户在 Django 中的视图?
How to restrict view in Django from other users?
我正在尝试制作一个只有结果所属的用户才能看到的页面。所以我想让只有 user_name_id=1
的用户(和超级用户)才能看到 localhost:8000/mpa/sum/1/
的页面
我在 html 中试过这个:
{% if request.user.is_superuser %}
<div class="container text-justify p-5">
<div class="display-4 text-left text-primary my-3">
...
{% else %}
You are not able to view this page!
{% endif %}
超级用户可以正常工作,但我如何才能对用户执行此操作?
views.py
@login_required
def individual_sum(request, user_name_id):
... lots of query
context = {
... lots of contexts
}
return render(request, 'stressz/individual_sum.html', context)
models.py
class IndividualSum_text(models.Model):
def __str__(self):
return str(self.user_name)
user_name = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
...integerfields and textfields here
您应该检查 user_name_id
是否与用户相同,或者登录用户是超级用户:
from django.core.exceptions import <strong>PermissionDenied</strong>
@login_required
def individual_sum(request, user_name_id):
if user_name_id != request.user.pk and not request.user.is_superuser:
raise <strong>PermissionDenied</strong>
# lots of query …
# lots of contexts …
return render(request, 'stressz/individual_sum.html', context)
在视图中,您应该过滤所有内容,使它们属于具有给定 user_name_id
的用户,因此如果您需要检索 IndividualSum_text
个对象,您可以使用:
IndividualSum_text.objects.filter(<strong>user_name_id=user_name_id</strong>)
我正在尝试制作一个只有结果所属的用户才能看到的页面。所以我想让只有 user_name_id=1
的用户(和超级用户)才能看到 localhost:8000/mpa/sum/1/
我在 html 中试过这个:
{% if request.user.is_superuser %}
<div class="container text-justify p-5">
<div class="display-4 text-left text-primary my-3">
...
{% else %}
You are not able to view this page!
{% endif %}
超级用户可以正常工作,但我如何才能对用户执行此操作?
views.py
@login_required
def individual_sum(request, user_name_id):
... lots of query
context = {
... lots of contexts
}
return render(request, 'stressz/individual_sum.html', context)
models.py
class IndividualSum_text(models.Model):
def __str__(self):
return str(self.user_name)
user_name = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
...integerfields and textfields here
您应该检查 user_name_id
是否与用户相同,或者登录用户是超级用户:
from django.core.exceptions import <strong>PermissionDenied</strong>
@login_required
def individual_sum(request, user_name_id):
if user_name_id != request.user.pk and not request.user.is_superuser:
raise <strong>PermissionDenied</strong>
# lots of query …
# lots of contexts …
return render(request, 'stressz/individual_sum.html', context)
在视图中,您应该过滤所有内容,使它们属于具有给定 user_name_id
的用户,因此如果您需要检索 IndividualSum_text
个对象,您可以使用:
IndividualSum_text.objects.filter(<strong>user_name_id=user_name_id</strong>)