Django

时间:2017-04-03 13:42:10

标签: python django http etag http-status-code-412

我有这个API端点,用于注册用户并被移动应用程序使用:

/mobile/v1/signup

我最近将应用程序从Django 1.7迁移到了Django 1.10。在此之后我开始得到这个奇怪的错误。如果第二次访问此API,则会返回412 (precondition failed)错误。

我在网上搜索,只要我理解,就会发生以下情况:

第一次,后端在响应中返回Etag。然后,第二次访问此API时,此Etag将被发送回服务器。如果不匹配,则返回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',
]

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))

0 个答案:

没有答案