Капча в админке Django - PullRequest
       21

Капча в админке Django

0 голосов
/ 15 февраля 2012

Какой-нибудь плагин капчи для администратора django?

Я хочу добавить эту функцию при входе администратора.

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

вы можете переопределить AdminSite class и установить свои login_form и login_template.Но в этом случае вам нужно зарегистрировать все ваши модели через пользовательский объект AdminSite.

1 голос
/ 15 февраля 2012

Идея может заключаться в том, чтобы заставить / admin использовать другое представление входа в систему (http://djangosnippets.org/snippets/2127/). Я думаю, вам придется импортировать декоратор login_required в этот фрагмент.

Теперь вы можете предоставить свой собственный вид входа , который реализует то есть recaptcha. Вы можете легко интегрировать его в свою форму входа в систему (http://code.google.com/intl/de-DE/apis/recaptcha/docs/display.html). В вашем представлении аутентификации вы просто должны проверить возвращаемое значение из API recaptcha (он возвращает «true» или «false» в качестве первой части строки, поэтому разделите его) следующим образом:

import urllib, urllib2
def recaptcha(request, postdata):
        rc_challenge = postdata.get('recaptcha_challenge_field','')
        rc_user_input = postdata.get('recaptcha_response_field', '').encode('utf-8')
        url = 'http://www.google.com/recaptcha/api/verify'
        values = {'privatekey' : 'XXXXXXXXXXXXXXXXXXXXXXX', 'remoteip': request.META['REMOTE_ADDR'], 'challenge' : rc_challenge, 'response' : rc_user_input,}
        data = urllib.urlencode(values)
        req = urllib2.Request(url, data)
        response = urllib2.urlopen(req)
        result = response.read().split()[0]
        response.close()
        return result

По вашему мнению, проверьте следующие данные POST:

def login_view(request, template_name="login.html"):   
if request.method == 'POST':
        postdata = request.POST.copy()
        captcha = recaptcha(request, postdata)
        form = LoginUserForm(request, postdata)
        if captcha == "false":
            return render_to_response(template_name, locals(),
                              context_instance=RequestContext(request))
        if form.is_valid():
        # do authentication here
else:
# just display the login_form on GET request

Вы можете использовать переменную "captcha", чтобы отобразить сообщение об ошибке в вашем шаблоне, если пользовательский ввод вернул false на капче. Вы также должны определить свой собственный LoginUserForm для использования в отдельном пользовательском HTML-шаблоне.

Это всего лишь маленькая хакерская концепция из моей головы, я думаю, более элегантным способом было бы написать собственный виджет капчи.

Надеюсь, что эти мысли могут привести к возможному решению.

1 голос
/ 15 февраля 2012

Вы смотрели на Простая капча ?

...