最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django框架驗(yàn)證碼用法實(shí)例分析

 更新時(shí)間:2019年05月10日 11:10:56   作者:微信1257309054  
這篇文章主要介紹了Django框架驗(yàn)證碼用法,結(jié)合實(shí)例形式分析了Python Django框架驗(yàn)證碼的功能、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Django框架驗(yàn)證碼用法。分享給大家供大家參考,具體如下:

驗(yàn)證碼

1、作用

  • 在用戶登錄,注冊(cè)以及一些敏感操作的時(shí)候,我們?yōu)榱朔乐狗?wù)器被暴力請(qǐng)求,或爬蟲爬取,我們可以使用驗(yàn)證碼進(jìn)行過濾,減輕服務(wù)器的壓力。
  • 驗(yàn)證碼需要使用繪圖 Pillow
    • pip3 install Pillow
    • 核心API
    • Image
      • 需要模式
      • 尺寸
      • 背景色
    • ImageDraw
      • 綁定畫布
      • 模式
      • 封裝了繪制的API
      • text
      • point
      • line
      • arch
    • ImageFont
      • 手動(dòng)指定字體

2、業(yè)務(wù)流程

繪制驗(yàn)證碼圖片

background = (10,20,30) // RGB顏色

初始化畫布

image = Image.new(‘RGB',(100,50),background)

獲取畫布中畫筆對(duì)象

draw = ImageDraw.Draw(image)

繪制驗(yàn)證碼,隨機(jī)四個(gè)

font = ImageFont.truetype(‘path',size)
fontcolor = (20,40,60)
draw.text((x,y),'R',font,fontcolor)

返回驗(yàn)證碼內(nèi)容

# 刪除畫筆
del draw
#保存圖片到BytesIO對(duì)象
Import io
buf = io.BytesIO()
image.save(buf,'png')
#返回BytesIO中的內(nèi)容
return HttpResponse(buf.getvalue(),'image/png')

3、代碼范例

html頁面

<form method="post" action="{% url 'sitesApp:login' %}">
  {% csrf_token %}
    <div class="login">
      <div class="input-group">
       <span class="input-group-addon" id="basic-addon1">用戶名</span>
       <input type="text" class="form-control" placeholder="Username" aria-describedby="basic-addon1" name="uName">
      </div>
      <div class="input-group">
       <span class="input-group-addon" id="basic-addon1">密&nbsp;&nbsp;&nbsp;&nbsp;碼</span>
       <input type="text" class="form-control" placeholder="Password" aria-describedby="basic-addon1" name="uPswd">
      </div>
      <div class="input-group">
       <span class="input-group-addon" id="basic-addon1">驗(yàn)證碼</span>
       <input type="text" class="form-control" placeholder="Auth code" aria-describedby="basic-addon1" name="uCode">
      </div>
      <div class="vcode">
        <img src="/app/getvcode/" id="vcode">
      </div>
      <input type="submit" class="loginBtn" value="登 錄"><br>
    </div>
  </form>
  <script type="text/javascript">
    $(function () {
      $('#vcode').click(function () {
        $(this).attr('src',"/app/getvcode"+Math.random())
      })
    })
  </script>

views視圖

'''
生成并返回驗(yàn)證碼
'''
def getvcode(request):
  # 隨機(jī)生成驗(yàn)證碼
  population = string.ascii_letters+string.digits
  letterlist = random.sample(population,4)
  vcode = ''.join(letterlist)
  # 保存該用戶的驗(yàn)證碼
  request.session['vcode']=vcode
  # 繪制驗(yàn)證碼
  # 需要畫布,長(zhǎng)寬顏色
  image = Image.new('RGB',(176,60),color=getRandomColor())
  # 創(chuàng)建畫布的畫筆
  draw = ImageDraw.Draw(image)
  # 繪制文字,字體所在位置
  path = os.path.join(BASE_DIR,'static','fonts','ADOBEARABIC-BOLDITALIC.OTF')
  font = ImageFont.truetype(path,50)
  for i in range(len(vcode)):
    draw.text((20+40*i,0),vcode[i],fill=getRandomColor(),font=font)
  # 添加噪聲
  for i in range(500):
    position = (random.randint(0,176),random.randint(0,50))
    draw.point(position,fill=getRandomColor())
  # 返回驗(yàn)證碼字節(jié)數(shù)據(jù)
  # 創(chuàng)建字節(jié)容器
  buffer = io.BytesIO()
  # 將畫布內(nèi)容丟入容器
  image.save(buffer,'png')
  # 返回容器內(nèi)的字節(jié)
  return HttpResponse(buffer.getvalue(),'image/png')
# 獲取隨機(jī)顏色
def getRandomColor():
  red = random.randint(0,255)
  green = random.randint(0,255)
  blue = random.randint(0,255)
  return (red,green,blue)

希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

阳春市| 垦利县| 仁布县| 偃师市| 玛沁县| 河西区| 蒲城县| 麻江县| 秭归县| 三明市| 甘谷县| 治多县| 尚义县| 海丰县| 乡城县| 东乌珠穆沁旗| 宝兴县| 玉龙| 湟中县| 鹤庆县| 怀安县| 江山市| 东明县| 朔州市| 太原市| 大名县| 恭城| 萨嘎县| 司法| 察雅县| 松潘县| 江永县| 泸定县| 石门县| 望谟县| 宿松县| 宜兰县| 自贡市| 固安县| 清涧县| 合肥市|