我正在尝试使用提供的模板从sunlightlabs安装和测试django-honeypot。
应用程序没有伴随模型或视图,我很困惑,我应该如何让应用程序工作。我试图使用网址来调用模板。
我的mysite / mysite / urls.py如下:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
#url(r'^$', include('honeypot.urls')),
)
我的mysite / honeypot / urls.py如下:
from django.conf.urls.defaults import *
#from tagging.views import tagged_object_list
from django.conf.urls import patterns, include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.shortcuts import render
from django.contrib import admin
urlpatterns = patterns('',
url(r'^$', render, dict(template_name='/home/mohrashak/attribute2/honeypot/templates/honeypot/webpage.html'), name='price'),
)
ROOT_URLCONF="honeypot.urls"
网页
{% load honeypot %}
<form>
{% render_honeypot_field "field_name" %}
</form>
我的理解是,将使用该应用程序处理某些内容。但没有模型。我错过了什么?
答案 0 :(得分:4)
您无需担心django-honeypot的模型或视图。它被安装到Python库的site-packages文件夹中,因此您不必为您编写models / views / urls.py - 这些都在您的pythonpath中。
请务必阅读online documentation以安装该应用。
这是清单:
honeypot
添加到INSTALLED_APPS
HONEYPOT_FIELD_NAME
,这是用于表单中的honeypot字段的名称。尽量不要使用'honeypot',因为有些机器人会避免它。{% load honeypot %}
; {% render_honeypot_field "field_name" %}
check_honeypot
中的honeypot.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):
...
回应你的评论:
django-honeypot
的性质是它可以防止“形成垃圾邮件”。因此,您必须在模板中至少包含一个表单。您应该将表单从视图传递到模板。更多信息in the documentation。我在下面写了一个近乎完整的例子。注意:这是未经测试的。
这是一个创建并显示联系表单(通过转到/contact/
URL)然后处理正在提交的表单的示例。想象一下,我们使用了django_admin.py startapp contact_app
urls.py
您的网址文件会在/contact/
网址将请求传递到我们的contact
视图。
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^contact/$', 'contact_app.views.contact'),
)
contact_app/views.py
您的视图文件接收请求,并处理GET
和POST
请求。如果请求是GET
,则会将空表单传递给模板。如果POST
然后检查表单是否有效并处理表单。我们将其包装在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>