from captcha.fields import ReCaptchaField from otree.api import * author = 'Christian König gen. Kersting' doc = """ ReCaptcha Demo """ class Constants(BaseConstants): name_in_url = 'delayed_captcha' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): captcha = models.CharField(blank=True) captcha_necessary = models.BooleanField(initial=True) # FUNCTIONS # PAGES # recaptcha class PreCaptcha(Page): timeout_seconds = 30 # set True/False depending on whether you want to display the timer or not @staticmethod def js_vars(player: Player): return {'hide_timer': False} @staticmethod def before_next_page(player: Player, timeout_happened): if not timeout_happened: player.captcha_necessary = False class Captcha(Page): form_model = 'player' form_fields = ['captcha'] @staticmethod def is_displayed(player: Player): return player.captcha_necessary @staticmethod def get_form(player: Player, data=None, files=None, **kwargs): frm = super().get_form(data, files, **kwargs) frm.fields['captcha'] = ReCaptchaField(label='') return frm class Results(Page): pass page_sequence = [PreCaptcha, Captcha, Results]