Для решения ваших проблем:
1: простая капча, вероятно, сработает, если вы гуглите «django captcha», есть множество плагинов. Я никогда не использовал их сам, поэтому не могу сказать, какой из них лучший.
2 & 3: Использование сессий Django решает обе эти проблемы - с его помощью вы можете сохранить куки в браузере пользователя, чтобы указать, что человек уже проголосовал. Это, очевидно, позволяет людям голосовать через разные браузеры или очищать их кеш, поэтому все зависит от того, насколько важно, чтобы людям не разрешали голосовать дважды. Я бы предположил, что только небольшой процент людей на самом деле подумает попробовать очистить кеш. Насколько я знаю, единственным другим способом ограничения пользователей без процесса входа в систему будет проверка IP-адресов, но это нарушит ваши вторые критерии, поскольку люди в одной сети будут иметь один и тот же IP-адрес.
Если вы не хотите, чтобы несколько голосов были такими же простыми, как удаление файлов cookie браузера, вы также можете разрешить вход в Facebook или Twitter - плагин django-socialregistration довольно хорошо документирован и прост в реализации.
Надеюсь, это поможет!