您无需担心 django-honeypot 的模型或视图。它安装在 Python 库的 site-packages 文件夹中,因此您不必为您编写 models/views/urls.py - 这些都在您的 pythonpath 中。
确保您阅读了安装应用程序的在线文档。
这是清单:
honeypot
在INSTALLED_APPS
settings.py中添加;
- 定义
HONEYPOT_FIELD_NAME
表单中蜜罐字段使用的名称。尽量不要使用“蜜罐”,因为有些机器人会避免使用它。
- 确保
{% load honeypot %}
使用 django-honeypot 在模板顶部添加;
- 然后以任何形式使用以下标签
{% render_honeypot_field "field_name" %}
- 提交表单时 - 您可以使用
check_honeypot
装饰器 fromhoneypot.decorators
检查值是否存在(或默认情况下不存在)和正确性。
这是文档中要添加到您的视图中的示例:
from honeypot.decorators import check_honeypot
@check_honeypot(field_name='hp_field_name')
def post_comment(request):
...
@check_honeypot
def other_post_view(request):
...
编辑1:
回应您的评论:
- 是的;
- 是的。
- 不-本质
django-honeypot
是它可以防止“形成垃圾邮件”。因此,您的模板中必须至少有一个表格。您应该将表单从视图传递到模板。文档中的更多信息。我在下面写了一个近乎完整的例子。
使用 django-honeypot 的联系表单示例
注意:这是未经测试的。
这是一个创建和显示联系表单(通过转到/contact/
URL)然后处理提交的表单的示例。想象一下我们使用过django_admin.py startapp contact_app
urls.py
您的 urls 文件将/contact/
URL 传递给我们的contact
视图。
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^contact/$', 'contact_app.views.contact'),
)
contact_app/views.py
您的视图文件接受请求,并处理GET
和POST
请求。如果请求是一个GET
,它会将一个空表单传递给模板。如果 aPOST
那么它会检查表单是否有效并处理表单。我们将它包装在check_honeypot
装饰器中以确保它通过我们的django-honeypot
测试。
from contact_app.forms import ContactForm
from honeypot.decorators import check_honeypot
@check_honeypot
def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
form = ContactForm() # An unbound form
return render(request, 'contact.html', {
'my_form': form,
})
contact_app/forms.py
在这里,我们指定将需要并显示在模板中的表单字段。
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
templates/contact.html
从我们的角度来看,我们将表单(称为my_form
)传递给我们的模板,并使用 django 的模板语言将每个字段呈现为<p></p>
. 我们还加载蜜罐并插入必要的字段。
{% load honeypot %}
<form action="/contact/" method="post">{% csrf_token %}
{{ my_form.as_p }}
{% render_honeypot_field "field_name" %}
<input type="submit" value="Submit" />
</form>