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

首頁 > 編程 > Python > 正文

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

2020-02-15 22:45:51
字體:
來源:轉載
供稿:網友

驗證碼

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

使用驗證碼也是一種有效防止 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/")

中間件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清涧县| 隆回县| 临清市| 葵青区| 白朗县| 烟台市| 周至县| 工布江达县| 鄂托克前旗| 靖宇县| 寿阳县| 桐梓县| 金寨县| 大洼县| 满洲里市| 军事| 尼玛县| 巢湖市| 龙陵县| 航空| 尼勒克县| 涟源市| 元朗区| 且末县| 容城县| 威信县| 老河口市| 永州市| 阜宁县| 阳原县| 凌云县| 宜兴市| 托里县| 醴陵市| 禄劝| 行唐县| 宜都市| 刚察县| 吐鲁番市| 洛南县| 麦盖提县|