Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Google reCaptcha验证会失败吗?_Django_Forms_Recaptcha - Fatal编程技术网

Django Google reCaptcha验证会失败吗?

Django Google reCaptcha验证会失败吗?,django,forms,recaptcha,Django,Forms,Recaptcha,我在问一个理论上的问题,也许是愚蠢的问题,但我真的想知道答案。现在我正在使用Django编写一个带有Google reCaptcha的网站,以防止填写表单时出现垃圾邮件。我已经设置了一个js来避免跳过GoogleReCAPTCHA,这样每次提交都会显示我不是机器人的信息 我的问题是,如果在表单上提交的内容已经被垃圾邮件证明不是机器人,那么为什么我必须在views.py中编写语法,用与站点密钥匹配的密钥验证Google reCaptcha?在什么情况下,垃圾邮件提交可以通过Google reCap

我在问一个理论上的问题,也许是愚蠢的问题,但我真的想知道答案。现在我正在使用Django编写一个带有Google reCaptcha的网站,以防止填写表单时出现垃圾邮件。我已经设置了一个js来避免跳过GoogleReCAPTCHA,这样每次提交都会显示我不是机器人的信息

我的问题是,如果在表单上提交的内容已经被垃圾邮件证明不是机器人,那么为什么我必须在views.py中编写语法,用与站点密钥匹配的密钥验证Google reCaptcha?在什么情况下,垃圾邮件提交可以通过Google reCaptcha而不是后端验证

我附上我的代码,如果你想参考我所做的,虽然这是一个纯粹的理论问题。非常感谢

模板:

<form id="contact_form" class="form-horizontal" method="post" action="{% url 'contact' %}">
    {% csrf_token %}



<div class="form-group">
    <span id="name_err" style="color:red; bold: false; font-size:1vw; padding-left:1vw; display:none">Please enter your name</span>
    <label class="control-label col-sm-2" for="name">Name:</label>
    <div class="col-sm-10">
        <input type="text" class="form-control" id="name" name="name" placeholder="Enter name here">
    </div>
</div>
<script src='https://www.google.com/recaptcha/api.js'></script>
<div style="padding-left: 11vw;" class="g-recaptcha" data-sitekey="xxx"></div><br>
<div style="padding-left: 11vw;" id="submit-div"><input type="submit" value="post" class="btn btn-primary"></div>   

我不完全确定你在问什么,但是,你正在验证响应是否对你的网页有效,用户可能已经从另一台服务器获得了reCaptcha响应,然后将其插入到你的表单提交中


recaptcha_响应可能是有效的响应,但不适用于您的站点,这是您正在检查的。我希望这能有所帮助。

这很有道理,谢谢。但是,将有效的recaptcha_响应植入一个站点容易吗?对于您的站点编号,插入一个有效的on。
if request.method == 'POST':

contact_name = request.POST.get('name')
contact_email = request.POST.get('email')
contact_subject = request.POST.get('subject')
contact_message = request.POST.get('message')
recaptcha_response = request.POST.get('g-recaptcha-response')

url = 'https://www.google.com/recaptcha/api/siteverify'
values = {
    'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
    'response': recaptcha_response
}            
data = urllib.parse.urlencode(values).encode()
req =  urllib.request.Request(url, data=data)
response = urllib.request.urlopen(req)
result = json.loads(response.read().decode())
''' End reCAPTCHA validation '''