国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Django 登陸驗證碼和中間件的實現

2020-01-04 14:42:03
字體:
來源:轉載
供稿:網友

驗證碼

在用戶注冊、登陸頁面為了防止暴力請求,可以加入驗證碼。如果驗證碼錯誤,則不需要繼續處理,可以減輕服務器的壓力

使用驗證碼也是一種有效防止 csrf 的方法

def verifycode(request):  #引入繪圖模塊  from PIL import Image, ImageDraw, ImageFont  #引入隨機函數模塊  import random  #定義變量,用于畫面的背景色、寬、高  bgcolor = (random.randrange(20, 100), random.randrange(    20, 100), random.randrange(20, 100))  width = 100  height = 50  #創建畫面對象  im = Image.new('RGB', (width, height), bgcolor)  #創建畫筆對象  draw = ImageDraw.Draw(im)  #調用畫筆的point()函數繪制噪點  for i in range(0, 100):    xy = (random.randrange(0, width), random.randrange(0, height))    fill = (random.randrange(0, 255), 255, random.randrange(0, 255))    draw.point(xy, fill=fill)  #定義驗證碼的備選值  str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'  #隨機選取4個值作為驗證碼  rand_str = ''  for i in range(0, 4):    rand_str += str[random.randrange(0, len(str))]  #構造字體對象  font = ImageFont.truetype(r'C:/Windows/Fonts/AdobeArabic-Bold.otf', 40)  #構造字體顏色  fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))  fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))  fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))  fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))  #繪制4個字  draw.text((5, 2), rand_str[0], font=font, fill=fontcolor1)  draw.text((25, 2), rand_str[1], font=font, fill=fontcolor2)  draw.text((50, 2), rand_str[2], font=font, fill=fontcolor3)  draw.text((75, 2), rand_str[3], font=font, fill=fontcolor4)  #釋放畫筆  del draw  #內存文件操作  import io  buf = io.BytesIO()  #將圖片保存在內存中,文件類型為png  im.save(buf, 'png')  #將內存中的圖片數據返回給客戶端,MIME類型為圖片png  response = HttpResponse(buf.getvalue(), 'image/png')  #將驗證碼的值寫入cookie,以被前端瀏覽器驗證驗證碼  # response.set_cookie("verifycode", rand_str)  # 存入session,用于做進一步驗證  request.session['verifycode'] = rand_str  return response
def login(request):  if request.method == "GET":    infoStr = "<h1>sunck is a good man</h1>"    # infoStr = "<script>alert('sunck good')</script>"    return render(request, "login.html", {"infoStr":infoStr})  else:    #判斷驗證碼    verifycode = request.POST.get("verifycode")    if not verifycode.upper() == request.session.get("verifycode").upper():      return redirect("/login/")    username = request.POST.get("username")    password = request.POST.get("password")    if username == "sunck" and password == "sunck1999":      return redirect("/index/")    else:      return redirect("/login/")

中間件

概述

一個輕量級、底層的插件系統,可以介入 Django 的請求和響應過程,處理Django 的輸入或輸出。每個中間件組件都是一個獨立的 Python 類。

django 中間件簡單圖解

Django,驗證碼,中間件

方法

Django,驗證碼,中間件

自定義中間件

在 App 目錄下創建名為 middlewares 的包

在包中創建自己的中間件類文件

verifycodeMiddleware.py

from django.utils.deprecation import MiddlewareMixinfrom django.shortcuts import redirectclass VerifycodeMiddleware(MiddlewareMixin):  def process_request(self, request):    print("***************", request.path)    if request.path == "/login/" and request.method == "POST":      # 判斷驗證碼      verifycode = request.POST.get("verifycode")      if not verifycode.upper() == request.session.get("verifycode").upper():        return redirect("/login/")

在 settings.py 文件中配阿置 MIDDLEWARE

'myApp.middlewares.verifycodeMiddleware.VerifycodeMiddleware'

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 科技| 台湾省| 敖汉旗| 榆社县| 闸北区| 肥乡县| 那曲县| 嫩江县| 扬中市| 云梦县| 油尖旺区| 休宁县| 方正县| 兴城市| 旺苍县| 合作市| 丰台区| 凤翔县| 慈溪市| 辉南县| 马边| 田阳县| 宁蒗| 化德县| 淮阳县| 交口县| 遂平县| 凤山县| 扶绥县| 六安市| 枞阳县| 杭锦后旗| 油尖旺区| 广汉市| 临朐县| 扬中市| 吕梁市| 铜鼓县| 阿拉尔市| 凌源市| 石嘴山市|