Python 在Django中,如何在decorator函数中的请求对象中设置值,并从decorator函数中的请求对象访问该值
我已经使用django实现了后端api。环境详情如下:- 环境: 平台:Linux(ubuntu) 框架:Django 1.11.28 编程语言:Python2.7.12(计划将来移植3.8) 数据库:Mongodb 3.4 说明: 我已经使用django开发了web服务。这些都是简单的web服务,不是Restful的(之前没有完全支持mongodb for Django rest框架),因此大多数东西都不是按照Django标准定制的 发行详情: 对于身份验证,我使用Azure AD。我编写了一个简单的decorator,它从front web app/mobile发送的请求接收访问令牌,然后这个decorator验证令牌并返回视图。对于身份验证,我使用django auth adfs包 室内装修设计师 授权书 View.py 正如您所看到的,代码变得凌乱,重复代码。在视图中,我无法访问已在视图中解码的用户详细信息。为了获取用户详细信息,我通过传递请求对象在get_userinfo_from_access_token()函数中编写了相同的代码,我认为这不接近“ok”Python 在Django中,如何在decorator函数中的请求对象中设置值,并从decorator函数中的请求对象访问该值,python,django,django-rest-framework,django-authentication,django-middleware,Python,Django,Django Rest Framework,Django Authentication,Django Middleware,我已经使用django实现了后端api。环境详情如下:- 环境: 平台:Linux(ubuntu) 框架:Django 1.11.28 编程语言:Python2.7.12(计划将来移植3.8) 数据库:Mongodb 3.4 说明: 我已经使用django开发了web服务。这些都是简单的web服务,不是Restful的(之前没有完全支持mongodb for Django rest框架),因此大多数东西都不是按照Django标准定制的 发行详情: 对于身份验证,我使用Azure AD。我编写了一
- 我需要的方法是按照django标准,并遵循大多数django开发人员。我是否需要实现一些认证后端或django中间件?如果需要,请指导我完成
提前谢谢。好的。让我按顺序给你答案
class UserResolverMiddleware(MiddlewareMixin):
"""
A middleware class that adds a ``user`` attribute to the current request.
"""
def process_request(self, request):
"""
get token from request header
validate token
decode the token
query on db or attach a fake user with necessary decoded data.
attach user object to request like request.user = user
"""
第二个
from django.http import HttpResponseForbidden
class ProtectedViewMiddleware(MiddlewareMixin):
def process_request(self, request):
"""
create a list of URL which is not protected (e.g: login, forget password)
unprotected_list = ['']
if request url does not belongs to unprotected_list and request has no attribue user:
return HttpResponseForbidden()
return
"""
谢谢你的回复。你们能详细说明一下第二个中间件的需求吗?若我不使用第二个中间件,这将如何影响我的安全性呢?第二个中间件是作为授权的装饰者工作的。is用户未经过身份验证,但希望在受保护视图中访问,我们将忽略它们。如果不使用此中间件,则必须在每个受保护的视图中处理auth。我可以将排除的url放在1中提到的同一中间件中,这将不会处理令牌身份验证。但如果我写了另一个中间件,请纠正我,它不会在第一个中间件之后执行吗。所以对于未经身份验证的用户访问的视图将不起作用。您能否提供上述第二个中间件的示例,这将进一步澄清并帮助我理解。现在我能够实现预期的目标,但我希望遵循标准方法。在这之后,我可以把它标记为我的问题的答案。@sachin27,请看一看
class UserResolverMiddleware(MiddlewareMixin):
"""
A middleware class that adds a ``user`` attribute to the current request.
"""
def process_request(self, request):
"""
get token from request header
validate token
decode the token
query on db or attach a fake user with necessary decoded data.
attach user object to request like request.user = user
"""
from django.http import HttpResponseForbidden
class ProtectedViewMiddleware(MiddlewareMixin):
def process_request(self, request):
"""
create a list of URL which is not protected (e.g: login, forget password)
unprotected_list = ['']
if request url does not belongs to unprotected_list and request has no attribue user:
return HttpResponseForbidden()
return
"""