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

如何在Python中实现Django用户关联API登录并获取对应权限文档

解决方案

你的核心问题是请求API时没传递当前登录用户的身份信息,导致API无法识别请求者;同时还需要实现「普通用户看对应标签文档、管理员看全部」的权限逻辑,下面是具体实现步骤:

1. 先给Django用户绑定API凭证和标签ID

首先需要给每个用户存储对应的API登录凭证和专属标签ID,通过扩展用户模型实现:

# models.py
from django.contrib.auth.models import User
from django.db import models

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    api_token = models.CharField(max_length=255)  # 存储用户的API认证Token
    tag_id = models.IntegerField()  # 存储用户对应的标签ID

执行数据库迁移后,给每个普通用户配置好对应的api_token和tag_id,管理员的tag_id可以设为特殊值(比如0)或者留空。

2. 修改视图函数,实现身份验证和权限过滤

在请求API时带上认证信息,同时根据用户类型添加标签过滤参数:

@login_required
def f_facturaspendientes(request):
    url = 'http://host.docker.internal/api/v4/documents/'
    user_profile = request.user.userprofile
    # 构造API认证头(假设API用Token认证,若用其他方式需调整)
    headers = {'Authorization': f'Token {user_profile.api_token}'}
    params = {}

    # 根据用户类型设置过滤规则
    if not (request.user.is_superuser or request.user.is_staff):
        # 普通用户仅请求自己标签ID的文档
        params['tag_id'] = user_profile.tag_id

    try:
        # 带认证信息和过滤参数请求API
        response = requests.get(url, headers=headers, params=params)

        if response.status_code == 200:
            data = response.json()
            return JsonResponse({'message': 'Solicitud exitosa', 'data': data})
        else:
            return JsonResponse({
                'error': 'API请求失败',
                'status_code': response.status_code,
                'api_error': response.text
            })
    except Exception as e:
        return JsonResponse({'error': str(e)})

注意事项

  • 如果目标API用的是Session认证而非Token,需要先调用API的登录接口获取Session Cookie,再在后续请求中携带
  • 若API的标签过滤参数不是tag_id,需要替换为API文档指定的参数名
  • 管理员权限判断可根据实际需求调整(比如用自定义权限组替代默认的is_staff)

内容的提问来源于stack exchange,提问作者Julian Buxton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:52:22