[在Django中,如何在装饰器函数的请求对象中设置值并从装饰函数中的请求对象访问它

问题描述 投票:0回答:1

我已经使用Django实现了后端api。环境详细信息为-

环境:平台:Linux(ubuntu)框架:Django 1.11.28编程语言:python 2.7.12(将来计划迁移3.8)数据库:Mongodb 3.4

说明:我已经使用django开发了Web服务。这些是普通的Web服务,不是Restful的(以前没有为Django rest框架提供对mongodb的完全支持),因此大多数内容不是按照django标准定制的。

问题详细信息:为了进行身份验证,我使用的是Azure AD。我编写了一个简单的装饰器,该装饰器从前端Web应用程序/移动设备发送的请求中接收访问令牌,然后该装饰器将验证令牌并返回view.For身份验证,我正在使用django-auth-adfs软件包

装饰器

authorisation.py

def is_authorized(function):
    @wraps(function)
    def authorize(request, *args, **kwargs):
        # access token validation logic
        if validated(token):
            # get user details from access token first_name, last_name etc
            user_info = {"first_name":"foo","last_name":"bar"}
            return function(request, *args, **kwargs)
        else:
            return HttpResponse('Unauthorized', status=401)
return authorize

View.py

@is_authorized
def home_view(request):
    # calling function which decodes access token and return user details.
    # This function contains same code as in decorator except function it returns user_info
    **first_name, last_name = get_userinfo_from_access_token(request)**
return JsonResponse({"data":{"fname":first_name,"lname":last_name}})

如您所见,代码变得凌乱,并且代码重复。在这里,我无法访问已在视图中解码的用户详细信息。为了获得用户详细信息,我通过传递请求对象在get_userinfo_from_access_token()函数中编写了相同的代码,我认为这不是'ok'。

  • 我需要按照django标准的方法,并且大多数django开发人员都遵循这种方法。如果需要,我是否需要实现某些身份验证后端或django中间件?

考虑我当前的情况和环境,

  1. 您能解释从请求对象访问用户详细信息的最佳和标准方法吗?>
  2. 我创建了很多视图,我正在向每个视图添加is_authorized
  3. 装饰器。是否有任何标准和更好的方法来保护视图。
  4. 我计划将来使用django rest框架重写整个代码。如果有人为我提供一些参考或指南来实现宁静的Web服务,以便我可以使用现有代码并减少工作量,我将非常感谢。
  5. [如果有任何疑问或需要更多详细信息,请告诉我。预先感谢。

我已经使用Django实现了后端api。环境详细信息如下-环境:平台:Linux(ubuntu)框架:Django 1.11.28编程语言:python 2.7.12(...

python django django-rest-framework django-authentication django-middleware
1个回答
0
投票

嗯。让我按顺序给出您的答案。

© www.soinside.com 2019 - 2024. All rights reserved.