Практические подходы CAPTCHA, не основанные на изображениях?

Я придумал решение, которое работает, но не красиво. Я использовал пакет https://github.com/hzdg/django-enumfields , чтобы помочь с этим.

Я создал свое собственное поле формы:

class EnumChoiceField(enumfields.forms.EnumChoiceField):
    def __init__(self, enum, *, coerce=lambda val: val, empty_value='', **kwargs):
        if isinstance(enum, six.string_types):
            self.enum = import_string(enum)
        else:
            self.enum = enum

        super().__init__(coerce=coerce, empty_value=empty_value, **kwargs)

И использовал его в моей форме Django. Затем в моем собственном AppConfig я сделал это:

class CoreAppConfig(AppConfig):
    name = 'myapp.core'

    def ready(self):
        registry = get_global_registry()

        @convert_form_field.register(EnumChoiceField)
        def convert_form_field_to_enum(field: EnumChoiceField):
            converted = registry.get_converted_field(field.enum)
            if converted is None:
                raise ImproperlyConfigured("Enum %r is not registered." % field.enum)
            return converted(description=field.help_text, required=field.required)

И, наконец, в моей схеме:

UnitEnum = Enum.from_enum(Unit)
get_global_registry().register_converted_field(Unit, UnitEnum)

Мне действительно это не нравится, но я не мог придумать лучшего способа чтобы справиться с этим. Я столкнулся с этой идеей при поиске другой проблемы с графеновым джанго здесь https://github.com/graphql-python/graphene-django/issues/481#issuecomment-412227036 .

Я чувствую, что у есть , чтобы быть лучшим способом сделать это.

318
задан 9 revs, 8 users 45% 31 March 2012 в 22:23
поделиться

92 ответа

Отправьте математическую проблему как ИЗОБРАЖЕНИЕ, вероятно, с круглой скобкой для ясности.

Просто явно видимый текст в изображении.

(2+5)*2
1
ответ дан 3 revs, 2 users 64% 23 November 2019 в 01:00
поделиться

У меня был форум vBulletin, который получил тонны спама. Добавление одного дополнительного правила все исправило; позволяя людям вводить слово заглавными буквами. Поскольку наш веб-сайт называется TrefPuntMagic, они должны были ввести «TPM». Я знаю, что это не динамично, и если спамер действительно хочет спамить наш сайт, он может найти обходной путь, но мы лишь один из многих форумов vBulletin, на которые они нацелены, и это простое решение.

1
ответ дан 23 November 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: