0

我正在尝试使用提供的模板从sunlabs安装和测试 django-honeypot。

该应用程序没有附带模型或视图,我对应该如何让该应用程序工作感到困惑。我试图使用 url 来调用模板。

我的 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>

我的理解是,将使用该应用程序将某些内容输入到要处理的框中。但是没有模型。我错过了什么?

4

1 回答 1

4

您无需担心 django-honeypot 的模型或视图。它安装在 Python 库的 site-packages 文件夹中,因此您不必为您编写 models/views/urls.py - 这些都在您的 pythonpath 中。

确保您阅读了安装应用程序的在线文档

这是清单:

  1. honeypotINSTALLED_APPSsettings.py中添加;
  2. 定义HONEYPOT_FIELD_NAME表单中蜜罐字段使用的名称。尽量不要使用“蜜罐”,因为有些机器人会避免使用它。
  3. 确保{% load honeypot %}使用 django-honeypot 在模板顶部添加;
  4. 然后以任何形式使用以下标签{% render_honeypot_field "field_name" %}
  5. 提交表单时 - 您可以使用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:

回应您的评论:

  1. 是的;
  2. 是的。
  3. 不-本质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

您的视图文件接受请求,并处理GETPOST请求。如果请求是一个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>
于 2013-05-29T14:00:00.660 回答