Python——Django框架——django-simple-captcha(验证码)
2024-08-28 05:48:17
一、引用 包
pip install django-simple-captcha
二、将captcha加入setting的 INSTALLED_APPS
三、运行python manager.py migrations 和 python manage.py migrate
四、加入路径
path('captcha/',include('captcha.urls))
五、引入Form表单
from captcha.fields import CaptchaFieldclass
captcha = CaptcchaField()#生成图片验证码和输入框
六、ajax动态验证
from django.http import JsonResponse
from captcha.models import CaptchaStore def ajax_val(request):
if request.is_ajax():
cs = CaptchaStore.objects.filter(response=request.GET['response'], hashkey=request.GET['hashkey'])
if cs:
json_data={'status':1}
else:
json_data = {'status':0}
return JsonResponse(json_data)
else:
# raise Http404
json_data = {'status':0}
return JsonResponse(json_data)
view.py
path(r'^ajax_val/',views.ajax_val, name='ajax_val'), #动态验证的路由
<script>
$(function(){
$('#id_captcha_1').blur(function(){
// #id_captcha_1为输入框的id,当该输入框失去焦点是触发函数
json_data={
'response':$('#id_captcha_1').val(), // 获取输入框和隐藏字段id_captcha_0的数值
'hashkey':$('#id_captcha_0').val()
}
$.getJSON('/ajax_val', json_data, function(data){
//ajax发送
$('#captcha_status').remove()
if(data['status']){ //status返回1为验证码正确, status返回0为验证码错误, 在输入框的后面写入提示信息
$('#id_captcha_1').after('<span id="captcha_status" >*验证码正确</span>')
}else{
$('#id_captcha_1').after('<span id="captcha_status" >*验证码错误</span>')
}
});
});
})
</script>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
tempalte
七、ajax刷新
path(r’refresh/$’, views.captcha_refresh, name=’captcha-refresh’)
# 只是源码介绍不用写入自己的代码中
def captcha_refresh(request):
""" Return json with new captcha for ajax refresh request """
if not request.is_ajax():
# 只接受ajax提交
raise Http404
new_key = CaptchaStore.generate_key()
to_json_response = {
'key': new_key,
'image_url': captcha_image_url(new_key),
}
return HttpResponse(json.dumps(to_json_response), content_type='application/json')
view.py
$(function(){
$('.captcha').css({
'cursor': 'pointer'
})
# ajax 刷新
$('.captcha').click(function(){
console.log('click');
$.getJSON("/captcha/refresh/",
function(result){
$('.captcha').attr('src', result['image_url']);
$('#id_captcha_0').val(result['key'])
});});
ajax刷新
| |
最新文章
- 9.1.2 asp.net core 自动生成组合查询
- SpringMVC学习记录3
- iOS不使用JSONKit做Dic到JsonString的转换
- Apache+PHP 配置随笔
- 一个最小化的SpringBoot项目
- Swift语言学习之OC和Swift混编
- GCD Block
- linux 显示当前用户信息
- Linux 内核 链表 的简单模拟(1)
- Latex beamer
- CImage类
- Redis系统学习 三、使用数据结构
- JS 获取图片的base64编码
- visual studio 中被遗忘的任务列表和书签
- ECharts使用心得总结
- php curl_multi系列函数实现多线程抓取网页
- Python的unittest框架的断言总结
- Merge Two Sorted Lists - LeetCode
- 怎样通过terminal得到AWS EC2 instance的ip
- 滑动窗口的中位数 &#183; Sliding Window Median
热门文章
- UVA - 185 Roman Numerals
- [GKCTF2020]老八小超市儿
- Java高并发与多线程(四)-----锁
- windows中使用django时报错:A server error occurred. Please contact the administrator.
- ubuntu更新下载软件卡住0% [Connecting to archive.ubuntu.com (2001:67c:1360:8001::23)]
- 分布式事务 Seata Saga 模式首秀以及三种模式详解 | Meetup#3 回顾
- go语言rpc学习
- 在Centos7上安装Python+Selenium+Firefox+Geckodriver
- POJ1195 二维线段树
- 精通MySQL之锁篇