Django google recaptcha валидация в шаблоне без формы
Я хочу остановить мошенничество с кликами на моем сайте с помощью перенаправления пользователя на страницу recaptcha, но проблема в том, что я не могу поместить свой код проверки в views.py, потому что я возвращаю отображаемую страницу, поэтому как я могу получить ответ от captcha и затем проверить ответ.
robot_detection.py:
def ref(result):
if(result == True):
return escape(external_url)
if(result == False):
return [False, external_url]
if(result == 0):
return "product not found"
views.py:
@csrf_exempt
def robot(request, seller_id):
seller = Seller(request)
result = seller.ref(seller_id, request.GET.get('url', 0))
response = JsonResponse({'result':result} ,safe=False , status=200)
if len(result) > 1:
if result[0] == False:
response = render(request, 'captcha.html')
response['Access-Control-Allow-Origin'] = '*'
return response
response = redirect(result)
response['Access-Control-Allow-Origin'] = '*'
return response
captcha.html
<!DOCTYPE html>
<html>
<head>
<title>
im not a robot
</title>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<meta charSet="utf-8" />
<meta httpEquiv="content-language" content="fa" />
<meta name="language" content="fa" />
<meta httpEquiv="Content-Type" content="text/html;charset=UTF-8" />
</head>
<body>
<div >
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>
<div id='sub' class="g-recaptcha" data-sitekey="" ></div>
</form>
</div>
</body>
</html>
код проверки капчи:
recaptcha_response = request.POST.get('g-recaptcha-response')
url = 'https://www.google.com/recaptcha/api/siteverify'
values = {
'secret': "",
'response': recaptcha_response
}
data = urllib.parse.urlencode(values).encode()
req = urllib.request.Request(url, data=data)
captcha_response = urllib.request.urlopen(req)
captcha_result = json.loads(captcha_response.read().decode())
if captcha_result['success']:
response = redirect(result[1])
response['Access-Control-Allow-Origin'] = '*'
return response
else:
print('None')
после успешной проверки я хочу перенаправить пользователя на external_url, который в данном случае является result[1].
любая помощь будет оценена по достоинству.
