-
数字验证码
- 配置数字验证码(在
settings.py
中):- 要使用数字验证码,需要配置
django - simple - captcha
库。在settings.py
文件中,设置验证码生成函数为生成数字验证码的函数。例如:
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_digit_challenge'
- 这样就将验证码类型设置为数字,并且
django - simple - captcha
会根据这个配置生成数字验证码。
- 要使用数字验证码,需要配置
- 在模板和视图中使用数字验证码:
- 在模板(如
login.html
)中,显示验证码图片和输入框的方式与之前相同。例如:
<img src="{{ captcha_image_url }}" alt="验证码"><br> <input type="text" id="captcha" name="captcha" required><br>
- 在视图函数(如
login_view
)中,验证数字验证码的逻辑也和之前类似。当接收到用户提交的验证码后,从数据库中获取存储的验证码对象(CaptchaStore
),并比较用户输入的验证码和存储的验证码是否一致。
from captcha.models import CaptchaStore #...其他代码 captcha_value = request.POST.get('captcha') captcha_key = request.POST.get('captcha_key') try: captcha = CaptchaStore.objects.get(hashkey = captcha_key) if captcha.response == captcha_value: # 验证码正确的逻辑 else: # 验证码错误的逻辑 except CaptchaStore.DoesNotExist: # 验证码不存在的逻辑
- 在模板(如
- 配置数字验证码(在
-
字母验证码
- 配置字母验证码:
- 在
settings.py
中,将验证码生成函数修改为生成字母验证码的函数。例如:
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'
- 还可以设置字母验证码的长度等参数。例如,设置验证码长度为6:
CAPTCHA_LENGTH = 6
- 在
- 模板和视图中的处理:
- 在模板中,不需要做特殊修改,依然按照显示验证码图片和输入框的常规方式处理。在视图函数中,验证逻辑同样不变,因为
django - simple - captcha
会自动根据配置生成和验证字母验证码。
- 在模板中,不需要做特殊修改,依然按照显示验证码图片和输入框的常规方式处理。在视图函数中,验证逻辑同样不变,因为
- 配置字母验证码:
-
算术验证码
- 配置算术验证码:
- 在
settings.py
中,设置验证码生成函数为算术验证码生成函数。例如:
CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
- 这样就会生成算术表达式作为验证码,如“2 + 3 =?”。
- 在
- 模板和视图中的特殊处理:
- 在模板中,显示方式基本相同,但可以考虑添加一些提示,让用户知道这是算术验证码。例如,在验证码图片旁边添加一个小提示:
<img src="{{ captcha_image_url }}" alt="验证码"><br> <small>请计算算术表达式的值</small><br> <input type="text" id="captcha" name="captcha" required><br>
- 在视图函数中,验证逻辑稍微复杂一些。因为用户输入的是算术表达式的结果,需要获取存储的验证码对象中的算术表达式,并计算出正确结果,然后与用户输入进行比较。例如:
from captcha.models import CaptchaStore import operator #...其他代码 captcha_value = request.POST.get('captcha') captcha_key = request.POST.get('captcha_key') try: captcha = CaptchaStore.objects.get(hashkey = captcha_key) parts = captcha.response.split() if len(parts) == 3: op_mapping = {'+': operator.add, '-': operator.sub, '*': operator.mul} a, op, b = parts correct_result = str(op_mapping[op](int(a), int(b))) if captcha_value == correct_result: # 验证码正确的逻辑 else: # 验证码错误的逻辑 else: # 验证码格式错误的逻辑 except CaptchaStore.DoesNotExist: # 验证码不存在的逻辑
- 配置算术验证码:
django-simple-captcha多种验证码
最新推荐文章于 2025-06-30 09:10:03 发布