Django process_response() 采用 2 个位置参数,但给出了 3 个
Django process_response() takes 2 positional arguments but 3 were given
我正在尝试为我的 Django 应用程序编写一些中间件。在 docs 中,它定义了带有两个参数的过程响应,请求和响应。但是当我尝试编写一些中间件时,我抛出了一个异常:
Type Error:
process_response() takes 2 positional arguments but 3 were given
这是我的代码:
从 django.http 导入 HttpResponseRedirect
class Middleware(object):
def process_response(self, request, response):
print('processing response')
ref = request.GET.get('ref','')
if ref:
response.set_cookie('ref', ref, max_age=3600*24*365)
return response
def process_request(request):
print('processing request')
print(request.META['PATH_INFO'])
ref = request.COOKIES.get('ref','')
if ref:
request.GET['ref'] = ref
return None
但是后来发生了一件奇怪的事情。我注释掉了 process_request 函数。然后我得到了 0 个错误。当我取消注释 process_request 函数时,我得到了错误:
process_request() takes 1 positional argument but 2 were given
这开始看起来像是随机行为..
您在 process_request
定义中缺少 self
。
我是按照错误消息“接受 2 个位置参数,但给出了 3 个”来到这里的,尽管在我的例子中,我实际上提供了 2 个位置参数,而需要 3 个。这适用于处于相同情况的任何其他人。对我来说是 Django 2.2.5。
改变
def has_add_permission(self, request):
return False
至:
def has_add_permission(self, request, obj=None):
return False
我可能可以通过查看 django 源代码找到它,但我是在这里找到的:
https://github.com/celiao/django-rest-authemail/issues/32#issuecomment-800859698
我正在尝试为我的 Django 应用程序编写一些中间件。在 docs 中,它定义了带有两个参数的过程响应,请求和响应。但是当我尝试编写一些中间件时,我抛出了一个异常:
Type Error:
process_response() takes 2 positional arguments but 3 were given
这是我的代码:
从 django.http 导入 HttpResponseRedirect
class Middleware(object):
def process_response(self, request, response):
print('processing response')
ref = request.GET.get('ref','')
if ref:
response.set_cookie('ref', ref, max_age=3600*24*365)
return response
def process_request(request):
print('processing request')
print(request.META['PATH_INFO'])
ref = request.COOKIES.get('ref','')
if ref:
request.GET['ref'] = ref
return None
但是后来发生了一件奇怪的事情。我注释掉了 process_request 函数。然后我得到了 0 个错误。当我取消注释 process_request 函数时,我得到了错误:
process_request() takes 1 positional argument but 2 were given
这开始看起来像是随机行为..
您在 process_request
定义中缺少 self
。
我是按照错误消息“接受 2 个位置参数,但给出了 3 个”来到这里的,尽管在我的例子中,我实际上提供了 2 个位置参数,而需要 3 个。这适用于处于相同情况的任何其他人。对我来说是 Django 2.2.5。
改变
def has_add_permission(self, request):
return False
至:
def has_add_permission(self, request, obj=None):
return False
我可能可以通过查看 django 源代码找到它,但我是在这里找到的:
https://github.com/celiao/django-rest-authemail/issues/32#issuecomment-800859698