You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Django限制用户仅查看数据库中的指定数据表?

嘿,作为Django新手,你已经在模型里定义了自定义权限,这步走得很对!接下来咱们一步步搞定仅让有权限的用户查看Execution_Results数据的功能:

第一步:确保权限同步到数据库

自定义权限是在执行迁移时被创建到数据库的,所以先在终端运行这两条命令,把模型变更同步过去:

python manage.py makemigrations
python manage.py migrate

完成后,你就能在Django Admin的「权限」管理界面里看到view_results这个权限了,之后可以给需要的用户或用户组分配它。

第二步:在视图层控制访问权限

根据你用的视图类型,有两种常见的实现方式:

基于函数的视图(FBV)

如果是函数视图,先确保用户已登录,再用user.has_perm()方法判断权限:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Execution_Results

@login_required  # 强制用户先登录
def results_list(request):
    # 权限格式是「应用名.权限码」,记得替换成你的实际应用名
    if not request.user.has_perm('your_app_name.view_results'):
        # 无权限时返回403页面,或者重定向到其他页面
        return render(request, '403.html')
    # 有权限就获取数据并渲染页面
    results = Execution_Results.objects.all()
    return render(request, 'results_list.html', {'results': results})

基于类的视图(CBV)

如果用类视图,直接用PermissionRequiredMixin就能简化权限控制:

from django.views.generic import ListView
from django.contrib.auth.mixins import PermissionRequiredMixin
from .models import Execution_Results

class ResultsListView(PermissionRequiredMixin, ListView):
    model = Execution_Results
    template_name = 'results_list.html'
    context_object_name = 'results'
    # 指定需要的权限,同样替换成你的应用名
    permission_required = 'your_app_name.view_results'
    # 未登录用户会被重定向到这个登录页,换成你的实际登录URL
    login_url = '/login/'
第三步:在模板中控制内容可见性

如果要在模板里隐藏无权限用户的入口或数据,可以用Django模板自带的perms变量:

<!-- 只有有权限的用户能看到「查看结果」的链接 -->
{% if perms.your_app_name.view_results %}
    <a href="{% url 'results_list' %}">查看执行结果</a>
{% endif %}

<!-- 遍历结果时,仅对有权限的用户显示内容 -->
{% for result in results %}
    {% if perms.your_app_name.view_results %}
        <div>执行时间:{{ result.exec_time }} | 配置:{{ result.config_id }}</div>
    {% endif %}
{% endfor %}
第四步:在Django Admin中限制访问

如果你想在Admin界面也控制只有有权限的用户能查看Execution_Results,可以自定义Admin类:

from django.contrib import admin
from .models import Execution_Results

class ExecutionResultsAdmin(admin.ModelAdmin):
    list_display = ('config_id', 'exec_time')  # 列表页显示的字段
    
    # 重写视图权限判断
    def has_view_permission(self, request, obj=None):
        return request.user.has_perm('your_app_name.view_results')
    
    # 可选:禁止所有用户编辑/删除数据
    def has_change_permission(self, request, obj=None):
        return False
    
    def has_delete_permission(self, request, obj=None):
        return False

admin.site.register(Execution_Results, ExecutionResultsAdmin)

做完这些,只有被分配了view_results权限的用户,才能在前端视图和Admin界面查看Execution_Results的数据啦!记得去Admin的用户/用户组管理里给目标用户分配权限哦~

内容的提问来源于stack exchange,提问作者Pawankumar Dubey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:23:21