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

django項目登錄中使用圖片驗證碼的實現(xiàn)方法

 更新時間:2019年08月15日 14:13:00   作者:記住我忘記我  
這篇文章主要介紹了django項目登錄中使用圖片驗證碼的實現(xiàn)代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下

應(yīng)用下創(chuàng)建untils文件夾放置封裝圖片驗證碼的函數(shù)

創(chuàng)建validCode.py文件定義驗證碼規(guī)則

import random
def get_random_color():
    return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
def get_valid_code_img(request):
  # 方式:
  from PIL import Image, ImageDraw, ImageFont
  from io import BytesIO
  import random
  img = Image.new("RGB", (270, 40), color=get_random_color())#生成一個寬270*高40的畫布,背景顏色隨機
  draw = ImageDraw.Draw(img)#進行繪畫
  kumo_font = ImageFont.truetype("static/font/kumo.ttf", size=32)#字體 字體大小
  valid_code_str = ""
  for i in range(5):
    random_num = str(random.randint(0, 9))#0-9的隨機數(shù) 9
    random_low_alpha = chr(random.randint(97, 122))#a 到 z 隨機的一個小寫字母 b
    random_upper_alpha = chr(random.randint(65, 90))#A 到 Z 隨機的一個大寫字母 Q
    random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])    #2
    draw.text((i * 50 + 20, 5), random_char, get_random_color(), font=kumo_font) #往長方形上寫字
    # 保存驗證碼字符串
    valid_code_str += random_char #85656
  width=270
  height=40
  for i in range(10):
    # draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())#畫小點
    x = random.randint(0, width)
    y = random.randint(0, height)
    draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color()) #小線段
  request.session["valid_code_str"] = valid_code_str
  f = BytesIO()
  img.save(f, "png") #png
  data = f.getvalue()
  return data

建路由

# 登錄
path('login/', login.login,name='login'),
# 圖片驗證碼
re_path('get_valid_code_img/', login.get_valid_code_img, name='get_valid_code_img'),

寫后臺方法

from blog.utils import validCode # 引入自定義的驗證碼
#頁面返回方法
from django.shortcuts import render, HttpResponse, redirect
#哈希加密
from django.contrib.auth.hashers import make_password, check_password
#數(shù)據(jù)庫
from blog.models import Article, Comment, Member, Praise, Web, Image
# 登陸
def login(request):
  res = {'status': None, 'info': None}
  if request.method == 'POST':
    valid_code = request.POST.get("valid_code")
    valid_code_str = request.session.get("valid_code_str")
    print(valid_code, valid_code_str)
    if valid_code.upper() == valid_code_str.upper():
      # 查詢用戶和密碼是否正確
      username = request.POST.get('username')
      pwd = request.POST.get('pwd')
      username_obj = Member.objects.filter(member_name=username).first()
      if not username_obj:
        res['status'] = 3
        res['info'] = '用戶名不存在'
        return HttpResponse(json.dumps(res))
      if check_password(pwd, username_obj.member_pwd):
        res['status'] = 1
        res['info'] = '登錄成功'
        request.session['member_name'] = username
        request.session['member_id'] = Member.objects.filter(member_name=username).first().member_id
        response_new = HttpResponse(json.dumps(res)) # 把這個結(jié)果告訴給前臺,ajax
        return response_new
      else:
        res['status'] = 0
        res['info'] = '帳號/密碼錯誤'
        return HttpResponse(json.dumps(res))
    else:
      res['status'] = 2
      res['info'] = '驗證碼錯誤'
      return HttpResponse(json.dumps(res))
  return render(request, 'blog/login.html', locals())
  # 生成圖片驗證碼
def get_valid_code_img(request):
  img_data = validCode.get_valid_code_img(request)
  return HttpResponse(img_data)

前端登錄的表單

{#登陸的表單#}
<form action="{% url 'blog:login' %}" method="post" id="login">
  <input type="text" class="name" name="username" Placeholder="Username" required=""/>
  <input type="password" class="password" name="pwd" Placeholder="Password" required=""/>
  {% csrf_token %}
  <input type="text" name="valid_code" placeholder="驗證碼">
  <img width="270" height="36" id="valid_code_img" src="/blog/get_valid_code_img/" alt=""
     onclick="this.src='/blog/get_valid_code_img/?'+Math.random()">
  <div class="login-agileits-bottom">
    <h6><a href="javascript:;" type="button" id="onsubmit">登陸</a></h6>
  </div>
</form>
{#登陸的表單結(jié)束#}

前端提交登錄表單的jquery

{# 登陸的jquery #}
$(document).ready(function () {
  $('#onsubmit').click(function () {
    $.post('/blog/login/', $('#login').serialize(), function (data) {
      if (data['status'] == 1) {
        layer.msg(data.info);
        location.href = "{% url 'index' %}";
      } else {
        layer.msg(data['info'])
      }
    }, 'json')
  })
})
{# 登陸的jquery結(jié)束 #}

頁面效果

總結(jié)

以上所述是小編給大家介紹的django項目登錄中使用圖片驗證碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • 詳解Django中的form庫的使用

    詳解Django中的form庫的使用

    這篇文章主要介紹了詳解Django中的form庫的使用,Django是最為著名的Python編程框架,需要的朋友可以參考下
    2015-07-07
  • PyCharm配置mongo插件的方法

    PyCharm配置mongo插件的方法

    今天小編就為大家分享一篇PyCharm配置mongo插件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問題

    Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問題

    這篇文章主要介紹了Python爬蟲基于lxml解決數(shù)據(jù)編碼亂碼問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 十個Python程序員易犯的錯誤

    十個Python程序員易犯的錯誤

    不管是在學(xué)習(xí)還是工作過程中,人都會犯錯。雖然Python的語法簡單、靈活,但也一樣存在一些不小的坑,一不小心,初學(xué)者和資深Python程序員都有可能會栽跟頭。本文為大家分享了10大常見錯誤,需要的朋友可以參考下
    2015-12-12
  • Pandas+Matplotlib 箱式圖異常值分析示例

    Pandas+Matplotlib 箱式圖異常值分析示例

    今天小編就為大家分享一篇Pandas+Matplotlib 箱式圖異常值分析示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python 在mysql中插入null空值的操作

    python 在mysql中插入null空值的操作

    這篇文章主要介紹了python 在mysql中插入null空值的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • pytest自定義命令行參數(shù)的實現(xiàn)

    pytest自定義命令行參數(shù)的實現(xiàn)

    本文主要介紹了在使用pytest運行測試用例時,通過傳遞自定義命令行參數(shù)來啟動mitmdump進程進行抓包,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • 淺析pytest?鉤子函數(shù)?之初始鉤子和引導(dǎo)鉤子

    淺析pytest?鉤子函數(shù)?之初始鉤子和引導(dǎo)鉤子

    這篇文章主要介紹了pytest?鉤子函數(shù)?之初始鉤子和引導(dǎo)鉤子,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • 使用pygame模塊編寫貪吃蛇的實例講解

    使用pygame模塊編寫貪吃蛇的實例講解

    下面小編就為大家分享一篇使用pygame模塊編寫貪吃蛇的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Python小白學(xué)習(xí)爬蟲常用請求報頭

    Python小白學(xué)習(xí)爬蟲常用請求報頭

    在本篇文章里小編給大家整理了關(guān)于Python小白學(xué)習(xí)爬蟲常用請求報頭的相關(guān)知識點,需要的朋友們可以學(xué)習(xí)下。
    2020-06-06

最新評論

休宁县| 宜兰市| 阿荣旗| 苏尼特左旗| 尖扎县| 万安县| 峨眉山市| 滨海县| 新乡县| 达日县| 辽宁省| 台南市| 紫阳县| 湖南省| 德兴市| 合肥市| 焉耆| 昌平区| 东阿县| 龙胜| 佛教| 元氏县| 菏泽市| 广州市| 天津市| 宁陵县| 固安县| 天津市| 静宁县| 晋江市| 永德县| 冕宁县| 贺州市| 辉南县| 邮箱| 财经| 富源县| 南木林县| 延吉市| 青神县| 台南县|