Python 在Django中,request.META[]是为请求添加特定信息的正确位置吗?

Python 在Django中,request.META[]是为请求添加特定信息的正确位置吗?,python,django,request,tastypie,Python,Django,Request,Tastypie,我使用的是Django,希望存储的数据只与请求持续时间相关,而与会话无关 向request.META添加内容是否正确,例如: request.META['acl'] = acl 在我的情况下,我使用的是带有自定义授权类的Tastypie,需要一种在函数之间传递数据的方法。。。似乎根据请求存储某些内容是正确的做法。。。我只是不知道该把这些信息储存在哪里。我的班级看起来像: class MyAuthorization(Authorization): def is_authorized(se

我使用的是Django,希望存储的数据只与请求持续时间相关,而与会话无关

向request.META添加内容是否正确,例如:

request.META['acl'] = acl
在我的情况下,我使用的是带有自定义授权类的Tastypie,需要一种在函数之间传递数据的方法。。。似乎根据请求存储某些内容是正确的做法。。。我只是不知道该把这些信息储存在哪里。我的班级看起来像:

class MyAuthorization(Authorization):
    def is_authorized(self, request, object=None):
        acl = getMyAccessControlList(request.method,request.session['username'])
        for permission in acl:
            if permission in self.permissions[request.method]:
                request.META['acl'] = acl
                return True
        return False

    def apply_limits(self, request, object_class, rs):
        if 'HAS_ALL_ACCESS' in request.META['acl']:
                return rs
        else if 'HAS_USER_ACCESS' in request.META['acl']:
                rs = rs.filter(object_class.user==request.session['username'])
                return rs
class AccessControlListMiddleware(object):
    def process_view(self,request,view_func,view_args,view_kwargs):
        permissions = set()
        for role in request.session['permissions']:
            for permission in PERMISSION_LIST[request.method][role]:
                permissions.add(permission)
        request.acl = list(permissions)
此外,Tastypie创建了一个REST资源对象,所有线程都使用一个授权类,因此仅仅将其放在授权类上是不安全的

更新

根据Chris Pratt的反馈,,修改请求没有意义。进一步研究,似乎应该首先通过自定义中间件修改请求,然后在请求的其余部分保持不变:

在这种情况下,中间件将类似于:

class MyAuthorization(Authorization):
    def is_authorized(self, request, object=None):
        acl = getMyAccessControlList(request.method,request.session['username'])
        for permission in acl:
            if permission in self.permissions[request.method]:
                request.META['acl'] = acl
                return True
        return False

    def apply_limits(self, request, object_class, rs):
        if 'HAS_ALL_ACCESS' in request.META['acl']:
                return rs
        else if 'HAS_USER_ACCESS' in request.META['acl']:
                rs = rs.filter(object_class.user==request.session['username'])
                return rs
class AccessControlListMiddleware(object):
    def process_view(self,request,view_func,view_args,view_kwargs):
        permissions = set()
        for role in request.session['permissions']:
            for permission in PERMISSION_LIST[request.method][role]:
                permissions.add(permission)
        request.acl = list(permissions)

不可以。不要弄乱
请求
对象。特别是由于这些方法是在同一个类上的,所以您只需将数据分配给
self

self.acl = getMyAccessControlList(request.method,request.session['username'])

...

if 'HAS_ALL_ACCESS' in self.acl:

谢谢,但不幸的是,使用tastypie,它创建了一个授权类(以及REST接口),所以它不是线程安全的。。。但也许我遗漏了什么,我明白了。嗯,你可以使用本地线程,但我不确定这是否真的更好。我想在
请求中添加一些东西在技术上没有什么问题,但我不会具体地处理
META
request
上的所有上层属性都表示它们是常量,因此即使可以也不适合修改它们。明白了-看起来向请求添加信息的合适位置是通过中间件,我将为这些信息创建自己的request.acl,这在语法上更加正确。再次感谢。