【Django】django-simple-captcha 验证码配置
1. django-simple-captcha 下载
pip install django-simple-captcha
2. 配置
2.1 settings.py 配置
# 注册 app
INSTALLED_APPS = [
    ....
    'captcha',  # 图形验证码
]
# 导入 库
import string
import random
# 自定义验证码
def generate_custom_challenge():
    length = 6  # 验证码长度
    characters = string.ascii_letters + string.digits  # 包含字母和数字的字符集
    captcha = ''.join(random.choice(characters) for _ in range(length))  # 生成随机验证码
    question = captcha  # 验证码的显示文本
    return question, captcha
	
# 配置 captcha
# CAPTCHA_LENGTH = 4  # 设置验证码位数 默认: 4
CAPTCHA_TIMEOUT = 5  # 超时(minute)
CAPTCHA_FONT_SIZE = 24  # 字体大小 默认:22
# CAPTCHA_IMAGE_SIZE = (130, 45)  # 设置 图片大小 默认: (200, 60)
CAPTCHA_CHALLENGE_FUNCT = generate_custom_challenge  # 验证码字符集, 自定义
# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'  # 验证码字符集
# CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.random_char_challenge'  # 验证码字符集
2.2 总 urls.py 配置
from django.urls import include
urlpatterns = [
    # 图片验证码
    path('captcha/', include('captcha.urls')),
]
2.3 views.py 配置
from captcha.helpers import captcha_image_url
from captcha.models import CaptchaStore
# 生成图片验证码
class GenerateCaptcha(APIView):
    authentication_classes = []  # 免认证
    permission_classes = []
    def get(self, request):
        captcha_key = CaptchaStore.generate_key()
        image_url = captcha_image_url(captcha_key)
        res = {
            'key': captcha_key,
            'image_url': image_url
        }
        return JsonResponse(res)
# 验证图片验证码
class VerifyCaptcha(APIView):
    def post(self, request):
        print(request.POST)
        captcha_key = request.POST.get('captcha_key')
        captcha_value = request.POST.get('captcha_value')
        CaptchaStore.remove_expired()  # 清除过期验证码
        try:
            captcha = CaptchaStore.objects.get(challenge=captcha_value, hashkey=captcha_key)
            captcha.delete()  # 删除
            valid = True
        except CaptchaStore.DoesNotExist:
            valid = False
        except:
            valid = 'xxxx'
        res = valid
        return JsonResponse(res)
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号