django-registration and botscout

May 19, 2010

I have a website which users can register on. It's got the usual bot problems, and I decided to implement botscout. I have copied django-registration into my source, so as a quick solution I modified it to implement the call to botscout. I wouldn't normally recommend this approach, and I'm sure there's probably a better way to do it, but as a quick solution this did the job.

The code change was very simple. In django-registration's there's a RegistrationForm. Add the following function to this form:

def clean_email(self):
    Query botscout to see if the email address is from a bot.
    lEmail = self.cleaned_data['email']
    lConnection = httplib.HTTPConnection("")
    lHeaders = {"Host" : "",
        "User-Agent" : "Django",
        "Content-type": 'text/xml; charset="UTF-8"',
        "Content-length": "0",
    lConnection.request("GET", "/test/?mail=%s" % lEmail, None, lHeaders)
    lResponseObject = lConnection.getresponse()
    lStatusCode = lResponseObject.status
    lResponse =
    if lStatusCode == 200 and len(lResponse) > 0 and lResponse[0] == 'Y':
        raise forms.ValidationError("""Your email address appears on a bot register.  
                           If you are a real person, then please contact us via the feedback form and let us know.""")

    if len(lResponse) > 0 and lResponse[0] == '!':
        lErrorMessage = "Problems Accessing BotScout, %s:%s" % (lStatusCode, lResponse)
        send_mail('%s BotScout Error' % settings.EMAIL_SUBJECT_PREFIX,

    return lEmail