gpt4 book ai didi

python - 编写验证码装饰器时出现属性错误

转载 作者:行者123 更新时间:2023-12-01 04:09:59 26 4
gpt4 key购买 nike

我写了一个验证码装饰器...

def validate_captcha(view):
'''Decorator to validate a captcha based on settings'''

def failure():
return HttpResponse('There was an error, please refresh and try again')

def wrap(request, *args, **kwargs):
if request.method == 'POST':

url = "https://www.google.com/recaptcha/api/siteverify"
values = {
'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
'response': request.POST.get(u'g-recaptcha-response', None),
'remoteip': request.META.get("REMOTE_ADDR", None),
}

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
result = json.loads(response.read())

# result["success"] will be True on a success
if result["success"]:
return view
else:
return failure
return failure
return wrap

然后在 View 上使用它...

@validate_captcha
def sendemail(request):
...

但随后我收到属性错误...

Traceback:
File "/home/jeff/Django/langalang/venv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
223. response = middleware_method(request, response)
File "/home/jeff/Django/langalang/venv/local/lib/python2.7/site-packages/django/middleware/common.py" in process_response
138. if response.status_code == 404 and not settings.DEBUG:

Exception Type: AttributeError at /ko/contact/sendemail
Exception Value: 'function' object has no attribute 'status_code'

我认为...发生这种情况是因为它返回了一个函数,但我无法弄清楚为什么 django 将其视为响应,因为响应已经在我的装饰器中处理,并且我验证了它是否已到达返回点'结果[“成功”]'

最佳答案

我认为您应该调用 failure() 函数,以便您实际上拥有从包装装饰器返回的 HttpResponse 。替换:

return failure

与:

return failure()

并且, View 也是如此,调用它:

return view(request, *args, **kwargs)

关于python - 编写验证码装饰器时出现属性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35077276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com