如何安装没有模型或视图的应用程序?

时间:2013-05-27 20:23:06

标签: django

我正在尝试使用提供的模板从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>

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

1 个答案:

答案 0 :(得分:4)

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

请务必阅读online documentation以安装该应用。

这是清单:

  1. 在settings.py;
  2. 中将honeypot添加到INSTALLED_APPS
  3. 定义HONEYPOT_FIELD_NAME,这是用于表单中的honeypot字段的名称。尽量不要使用'honeypot',因为有些机器人会避免它。
  4. 请务必使用django-honeypot在模板顶部添加{% load honeypot %};
  5. 然后以{% render_honeypot_field "field_name" %}
  6. 的任何形式使用以下标记
  7. 提交表单后 - 您可以使用check_honeypot中的honeypot.decorators装饰器检查值是否存在(默认情况下不存在)并更正。
  8. 以下是要添加到您的视图的文档中的示例:

    from honeypot.decorators import check_honeypot
    
    @check_honeypot(field_name='hp_field_name')
    def post_comment(request):
        ...
    
    @check_honeypot
    def other_post_view(request):
        ...
    

    EDIT1:

    回应你的评论:

    1. 是;
    2. 是。
    3. 否 - django-honeypot的性质是它可以防止“形成垃圾邮件”。因此,您必须在模板中至少包含一个表单。您应该将表单从视图传递到模板。更多信息in the documentation。我在下面写了一个近乎完整的例子。
    4. 使用django-honeypot

      的联系表格示例

      注意:这是未经测试的。

      这是一个创建并显示联系表单(通过转到/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

      您的视图文件接收请求,并处理GETPOST请求。如果请求是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>