我有这个注册用户并被移动应用程序使用的 API 端点:
/mobile/v1/signup
我最近将应用程序从 Django 1.7 迁移到 Django 1.10。在此之后,我开始收到这个奇怪的错误。如果此 API 第二次访问,则返回412 (precondition failed)
错误。
我搜索了网络,只要我了解,就会发生以下情况:
第一次,后端Etag
在响应中返回。然后,Etag
在第二次访问此 API 时将其发送回服务器。如果不匹配,则返回412
。
我通过手动设置此 API 响应的 Etag 标头的随机值来解决此问题:
response['Etag'] = datetime.now().timestamp()
return response
但我认为这不是一个好的解决方案。
解决这个问题的正确方法是什么?
我的中间件:
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'msd.middleware.RequestIdMiddleware',
'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',
'apps.dashboard.middleware.DashboardMiddleware',
'api.middleware.UserAgentMiddleware',
]
用户代理中间件:
class UserAgentMiddleware(MiddlewareMixin):
# A middleware that adds a "user_agent" object to request
def process_request(self, request):
request.user_agent = SimpleLazyObject(lambda: get_user_agent(request))