你是人类和Django HTML

时间:2014-03-15 22:25:41

标签: python django

我想在我的网站上获取AreYouAHuman capcha, 我大部分时间都在努力,问题就是没有出现。

这是render'd html的一部分

   <label for="id_session_secret">Are You Human</label> 
            <br>
            &lt;div id=&quot;AYAH&quot;&gt;&lt;/div&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;https://ws.areyouahuman.com/ws/script/87e31f12336132203bdde2da8c93269fccdd5f52&quot;&gt;&lt;/script&gt;
            <p></p>

这就是我在浏览器中看到的

> Are You Human  <div id="AYAH"></div><script type="text/javascript"
> src="https://ws.areyouahuman.com/ws/script/87e31f12336132203bdde2da8c93269fccdd5f52"></script>

这是我的实施

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  turtle.forms.py
#  
#  Copyright 2013 Brian Scott Carpenter <talisman@talisman-Pangolin-Performance>

from django import forms
from django.conf import settings

import ayah
ayah.configure(
    settings.AREYOUHUMAN_PUBLISHER_KEY,
    settings.AREYOUHUMAN_SCORING_KEY,
)

from django.forms import Field, ValidationError, Form
from django.forms.widgets import Widget


#Create a wdiget that renders the AreYouHuman html
class AreYouHumanWidget(Widget):

    def render(self, name, value, attrs=None):
        return ayah.get_publisher_html()


#AreYouHuman uses a test field (session_secret) for validation
class AreYouHumanField(Field):

    #Use the AreYouHuman HTML
    widget = AreYouHumanWidget

    #Validate agianst AreYouHuman
    def validate(self, value):
        if not ayah.score_result(value):
            raise ValidationError("You may not be human.")




class Turtle_Form(forms.ModelForm):
    ''' This is code to make sure the User automatically saves the
    user to the database in context.
    '''
    session_secret = AreYouHumanField(label="Are You Human")

    def save(self, *args, **kwargs):
        kwargs['commit']=False
        obj = super(Turtle_Form, self).save(*args, **kwargs)
        if self.request:
            obj.user = self.request.user
            obj.save()
        return obj #<--- Return saved object to caller.

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        return super(Turtle_Form, self).__init__(*args, **kwargs)

模板看起来像

{% extends "base.html" %}
{% load i18n zinnia_tags %}
{% load url from future %}
{% block title %}tempilo.org{% endblock %}

{% block content %}
<form action="" method="post">{% csrf_token %}
    {% for field in form %}
        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} 
            <br>
            {{ field | safe }}
            <p></p>

        </div>
    {% endfor %}
    <p><input type="submit" value="Save" /></p>
</form>

{% endblock %}

1 个答案:

答案 0 :(得分:1)

您可能需要调用小部件呈现方法中的ayah.get_publisher_html()来调用django.utils.safestring.mark_safe(),以防止它被自动调整。