Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

Django中新增unique request id



我现在在用django rest framework, 新写了接口用于接收图片并转换为探测对象。图片base64保存在服务器,用了时间戳来作为文件名以防重复,但因为短时间会有多个请求,这个时间戳感觉也不稳妥,于是打算换做每个请求的request id以保持唯一。

结果发现django在request里就没有这个id...不过这个unique request id可以自己新增添加出来。

我的做法是先在settings.py的同级目录下新增一个文件比如文件夹名叫API,作为一个自定义的middleware:

import uuid

class RequestMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        request.META["uuid"] = uuid.uuid4()
        return self.get_response(request)

然后在settings.py中的middleware list里添加它

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'API.custom_middleware.RequestMiddleware'  # 这里
]

此时便可以在views中获取到unique request id,比如我这里有一个drf的APIView:

class Detection(APIView):

    def post(self, request):
        ......
        origin_path = Path.cwd().joinpath("static", "cache_images", f"{request.META.get('uuid')}.png")  # 这里,其他代码省去
        ......
        return Response(data, status=status.HTTP_200_OK)

此时便可以用每一个request的唯一id作为不重复的文件名了。

下一篇:  ChatGPT注册和使用过程记录
上一篇:  selenium遇到shadow dom时定位元素

共有0条评论

添加评论

暂无评论