配置
| |
| https://django-simple-captcha.readthedocs.io/en/latest/advanced.html |
| |
| |
| pip install django-simple-captcha |
| |
| |
| INSTALLED_APPS = [captcha,] |
| |
| |
| ''' |
| # 图形验证码设置 |
| CAPTCHA_IMAGE_SIZE = (80, 45) # 设置captcha 图片大小 |
| CAPTCHA_LENGTH = 4 # 字符个数 |
| CAPTCHA_TIMEOUT = 1 # 超时(minutes) |
| |
| # 输出格式:输入框 验证码图片 隐藏域 |
| CAPTCHA_OUTPUT_FORMAT = '%(text_field)s %(image)s %(hidden_field)s' |
| CAPTCHA_NOISE_FUNCTIONS = ( |
| 'captcha.helpers.noise_null', |
| 'captcha.helpers.noise_arcs', # 线 |
| 'captcha.helpers.noise_dots', # 点 |
| ) |
| |
| # 随机字符验证码 |
| CAPTCHA_CHALLENGE_FUNCT ='captcha.helpers.random_char_challenge' |
| ''' |
| |
| |
| urlpatterns = [ |
| path('captcha/', include("captcha.urls")), |
| ] |
| |
| |
| python manage.py migrate |
| |
| from django.forms import forms |
| from captcha.fields import CaptchaField |
| class LoginForm(forms.Form): |
| captcha = CaptchaField() |
实现
| |
| from App03 import views |
| app_name="App03" |
| urlpatterns = [ |
| path('refresh_captcha/', views.refresh_captcha) |
| path('cap/',views.handle_captcha,name="cap"), |
| |
| ] |
| |
| |
| <body> |
| <form action="{% url 'App03:cap' %}" method="post"> |
| {% csrf_token %} |
| {{ form.captcha }} {{ form.captcha.errors }}<br> |
| <input type="submit"> |
| </form> |
| </body> |
| </html> |
| # 点击刷新验证码 |
| <script src="https://cdn.bootcss.com/jquery/1.12.3/jquery.min.js"></script> |
| <script> |
| |
| $(function () { |
| $('.captcha').css({ |
| 'cursor': 'pointer' |
| }); |
| |
| $('.captcha').click(function () { |
| console.log('click'); |
| |
| $.getJSON('/refresh_captcha/', function (result) { |
| alert(result["image_url"]); |
| $('.captcha').attr('src', result["image_url"]); |
| $('#id_captcha_0').val(result["key"]); |
| }); |
| }); |
| }) |
| </script> |
| |
| |
| from captcha.helpers import captcha_image_url |
| from captcha.models import CaptchaStore |
| |
| def refresh_captcha(request): |
| data = {"key": CaptchaStore.generate_key(), |
| "image_url": captcha_image_url(CaptchaStore.generate_key())} |
| return HttpResponse(json.dumps(data)) |
| |
| |
| |
| def handle_captcha(request): |
| if request.method == "POST": |
| form = LoginForm(request.POST) |
| if form.is_valid(): |
| print("验证通过") |
| return HttpResponse("验证通过") |
| else: |
| return render(request, 'app03/verifycode.html', locals()) |
| else: |
| form = LoginForm() |
| |
| |
| |
| return render(request, 'app03/verifycode.html', locals()) |
前后端分离
| |
| path('yzm/', views.output_yzm, name="yzm") |
| |
| |
| def output_yzm(request): |
| new_key = CaptchaStore.pick() |
| image_url = captcha_image_url(new_key) |
| return render(request, 'vc.html', locals()) |
| # vc.html |
| <body> |
| <form action="" method="post"> |
| <input type="text" name="yzm"> <img src="{{ image_url }}" alt="" class="captcha"> <br> |
| <input id="id_captcha_0" type="hidden" name="code" value="{{ new_key }}"> |
| <input type="submit"> |
| </form> |
| </body> |
| </html> |
| <script src="https://cdn.bootcss.com/jquery/1.12.3/jquery.min.js"></script> |
| <script> |
| |
| $(function () { |
| $('.captcha').css({ |
| 'cursor': 'pointer' |
| }); |
| |
| $('.captcha').click(function () { |
| console.log('click'); |
| $.get("{% url 'captcha-refresh' %}", |
| function (result) { |
| $('.captcha').attr('src', result["image_url"]); |
| $('#id_captcha_0').val(result["key"]); |
| }); |
| }); |
| }) |
| </script> |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现