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注册和使用过程记录