电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

用python實現一個簡單的驗證碼

瀏覽:5日期:2022-07-02 17:03:16

我們經常在登錄一個網站,或者注冊的時候需要輸入一個驗證碼,有時候覺得很煩,因為有些驗證碼不僅復雜還看不清,許多用戶就會因為這些而懶得再登錄或者注冊之類的。既然驗證碼會造成流失用戶的風險,為什么大家都還要使用驗證碼呢?這是驗證碼在一定程度上起到保護網站安全的作用,比如防止大規模惡意注冊(比如手機驗證碼形式,一機一戶),再比如反爬蟲(至少不會輕易讓你爬取數據)等,你看用戶基數最大的12306,就會有各種驗證碼。既然驗證碼這么重要,它的原理是什么?是怎么實現的?它的原理其實很簡單,就是在服務器端生成驗證碼,發送給客戶端,并以圖像格式顯示。客戶端提交所顯示的驗證碼,服務端接收并進行比較,若比對失敗則不能實現登錄或注冊,反之成功后跳轉相應界面。

我們知道了其原理,實現起來就很簡單了,現在網絡上也有各種各樣已經做好的驗證碼,我們完全可以拿來即用。但是為了更好的理解其原理,我們來手擼一個簡單的驗證碼,以下是在Django中實現。

簡單的驗證碼

(1)、我們在urls.py中定義一條路由,如下:

url(r’getcode’, views.get_code, name='get_code'),

(2)、我們定義一個視圖函數get_code(),如下:

from io import BytesIOfrom PIL import Image, ImageDraw, ImageFontfrom django.conf import settingsfrom django.shortcuts import render, HttpResponse, redirectdef get_code(request): ''' 手擼一個驗證碼 ''' # 定義圖像顏色模型 mode = 'RGB' # 定義圖像尺寸 size = (200, 100) # 定義背景色 bg_color = (255, 0, 0) # 創建圖像 image = Image.new(mode=mode, size=size, color=bg_color) # 創建畫布 image_draw = ImageDraw.Draw(image, mode=mode) # 創建字體,第一個參數是字體,第二個參數是字體大小 image_font = ImageFont.truetype(settings.FONT_PATH, 100) # 創建一個驗證碼 verify_code = 'Joke' # 生成驗證碼 fill_color = (255,255,255) for i in range(4): image_draw.text(xy=(50 * i, 0), text=verify_code[i], font=image_font, fill=fill_color) # 保存圖像 fp = BytesIO() image.save(fp, 'png') return HttpResponse(fp.getvalue(), content_type='image/png')

其中settings.FONT_PATH是我預先定義好的字段,如下

STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'statics'),]FONT_PATH = os.path.join(os.path.join(STATICFILES_DIRS[0], 'fonts'),'constan.ttf')

然后我們我們啟動服務python manager.py runserver,在瀏覽器上就可以看到驗證碼生成了

用python實現一個簡單的驗證碼

能是實現了,但是我們現在是自定義了一個驗證碼字段,我們是需要隨機生成驗證碼,而且字體顏色,背景顏色這些也不要定死了,然后我們再生成一些干擾點,我們對代碼進行如下重構:

def get_code(request): ''' 手擼一個驗證碼 ''' # 定義圖像顏色模型 mode = 'RGB' # 定義圖像尺寸 size = (200, 100) # 定義背景色 bg_color = (get_color(), get_color(), get_color()) # 創建圖像 image = Image.new(mode=mode, size=size, color=bg_color) # 創建畫布 image_draw = ImageDraw.Draw(image, mode=mode) # 創建字體,第一個參數是字體,第二個參數是字體大小 image_font = ImageFont.truetype(settings.FONT_PATH, 100) # 創建一個驗證碼 # verify_code = 'Joke' verify_code = get_verify_code() # 生成驗證碼 # fill_color = (255,255,255) for i in range(4): fill_color = (get_color(),get_color(),get_color()) image_draw.text(xy=(50 * i, 0), text=verify_code[i], font=image_font, fill=fill_color) # 加入干擾點 for i in range(10000): fill_color = (get_color(),get_color(),get_color()) xy = (random.randrange(200), random.randrange(100)) image_draw.point(xy=xy,fill=fill_color) # 保存圖像 fp = BytesIO() image.save(fp, 'png') return HttpResponse(fp.getvalue(), content_type='image/png')def get_color(): '''隨機獲取顏色''' return random.randrange(256)def get_verify_code(): '''隨機獲取驗證碼''' verify_code = ’’.join(random.choice(string.ascii_uppercase + string.digits + string.ascii_lowercase) for x in range(4)) return verify_code

然后我們重啟應用,刷新頁面如下

用python實現一個簡單的驗證碼

是不是有點神似了?下面我們創建一個簡單的login頁面,來實際應用一下驗證碼。

簡單的登錄頁面

(1)、創建一個路由

url(r’login’,views.login, name='login'),

(2)、創建一個Login的視圖函數

def login(request): '''登錄頁面''' if request.method == 'POST': pass return render(request, 'login.html')

(3)、創建一個login.html的template

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>Login</title></head><body><form action='{% url ’app01:login’ %}' method='post'>{% csrf_token %} <span>用戶名:</span><input type='text' name='username'> <br> <span>驗證碼:</span><input type='text' name='verify_code'> <br> <img src='http://www.hdgsjgj.cn/bcjs/{% url ’app01:get_code’ %}' alt=''> <br> <button>登錄</button></form></body></html>

然后重啟服務,瀏覽器訪問如下

用python實現一個簡單的驗證碼

現在我們只是簡單的搭建起了流程,我們需要的功能還沒有實現,我們需要的功能有:1、驗證碼校驗2、點擊圖片自動刷新驗證碼3、忽略大小寫

我們現在對項目進行重構,如下:(1)、我們在get_code視圖函數添加一行代碼,如下

# 創建一個驗證碼 # verify_code = 'Joke' verify_code = get_verify_code()# 加入session request.session[’verify_code’] = verify_code ......

(2)、修改login視圖函數,如下

def login(request): '''登錄頁面''' if request.method == 'POST': storage_code = request.session.get('verify_code') submit_code = request.POST.get('verify_code') if storage_code.lower() == submit_code.lower(): return HttpResponse('登錄成功') return render(request, 'login.html')

(3)、修改login.html代碼如下

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>Login</title></head><body><form action='{% url ’app01:login’ %}' method='post'> {% csrf_token %} <span>用戶名:</span><input type='text' name='username'> <br> <span>驗證碼:</span><input type='text' name='verify_code'> <br> <img src='http://www.hdgsjgj.cn/bcjs/{% url ’app01:get_code’ %}' alt='' name='verify_image'> <br> <button>登錄</button></form><script src='https://cdn.bootcss.com/jquery/3.2.0/jquery.js'></script><script> $(function () { $('img').on('click', function () { console.log('來了啊') $(this).attr('src','{% url ’app01:get_code’ %}'+'?id='+Math.random()) }) })</script></body></html>

然后就可以愉快的玩耍了,是不是很簡單呢?

以上就是用python實現一個簡單的驗證碼的詳細內容,更多關于python 實現驗證碼的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 南京雕塑制作厂家-不锈钢雕塑制作-玻璃钢雕塑制作-先登雕塑厂 | 婚博会2024时间表_婚博会门票领取_婚博会地址-婚博会官网 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 单锥双螺旋混合机_双螺旋锥形混合机-无锡新洋设备科技有限公司 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | 威客电竞(vk·game)·电子竞技赛事官网 | ORP控制器_ORP电极价格-上优泰百科| 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 电磁铁_推拉电磁铁_机械手电磁吸盘电磁铁厂家-广州思德隆电子公司 | 河南档案架,档案密集架,手动密集架,河南密集架批发/报价 | 超声波气象站_防爆气象站_空气质量监测站_负氧离子检测仪-风途物联网 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 展厅装修公司|企业展厅设计|展厅制作|展厅搭建—广州展厅装饰公司 | CTAB,表面活性剂1631溴型(十六烷基三甲基溴化铵)-上海升纬化工原料有限公司 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 深圳善跑体育产业集团有限公司_塑胶跑道_人造草坪_运动木地板 | 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 德国UST优斯特氢气检漏仪-德国舒赐乙烷检测仪-北京泽钏 | 阿里巴巴诚信通温州、台州、宁波、嘉兴授权渠道商-浙江联欣科技提供阿里会员办理 | 北京租车公司_汽车/客车/班车/大巴车租赁_商务会议/展会用车/旅游大巴出租_北京桐顺创业租车公司 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 水轮机密封网 | 水轮机密封产品研发生产厂家 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 不锈钢螺丝,不锈钢螺栓,不锈钢标准件-江苏百德特种合金有限公司 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 减速机_上海宜嘉减速机| led冷热冲击试验箱_LED高低温冲击试验箱_老化试验箱-爱佩百科 | 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 钢木实验台-全钢实验台-化验室通风柜-实验室装修厂家-杭州博扬实验设备 | PTFE接头|聚四氟乙烯螺丝|阀门|薄膜|消解罐|聚四氟乙烯球-嘉兴市方圆氟塑制品有限公司 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 北京三友信电子科技有限公司-ETC高速自动栏杆机|ETC机柜|激光车辆轮廓测量仪|嵌入式车道控制器 |