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

給Django Admin添加驗(yàn)證碼和多次登錄嘗試限制的實(shí)現(xiàn)

 更新時(shí)間:2020年07月26日 09:33:51   作者:畫星星高手  
這篇文章主要介紹了給Django Admin添加驗(yàn)證碼和多次登錄嘗試限制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Django自帶的Admin很好用,但是放到生產(chǎn)環(huán)境總還差了點(diǎn)什么= =

看看admin的介紹:

Django奉行Python的內(nèi)置電池哲學(xué)。它自帶了一系列在Web開(kāi)發(fā)中用于解決常見(jiàn)問(wèn)題或需求的額外的、可選工具。這些工具和插件,例如django.contrib.redirects都必須在settings中的INSTALLED_APPS處進(jìn)行注冊(cè),有的還需要執(zhí)行manage.py migrate命令,在數(shù)據(jù)庫(kù)中創(chuàng)建一些數(shù)據(jù)表。

Admin站點(diǎn)是Django有別于其它Web框架最重要的一點(diǎn),并且非常受歡迎,簡(jiǎn)直是出門旅游xxxx的必備。不管你是寫個(gè)小demo還是做個(gè)大項(xiàng)目都用得上。admin(下文中將Admin管理后臺(tái)簡(jiǎn)稱為admin)通過(guò)讀取你的模型數(shù)據(jù),快速構(gòu)造出一個(gè)可以對(duì)實(shí)際數(shù)據(jù)進(jìn)行管理的Web站點(diǎn),常用于開(kāi)發(fā)測(cè)試,簡(jiǎn)單管理等場(chǎng)合,適用于部門內(nèi)部為工作方便的場(chǎng)合, 但不建議在生產(chǎn)環(huán)境中使用。

為什么不建議在生產(chǎn)環(huán)境使用呢,因?yàn)锳dmin缺了驗(yàn)證碼和登錄限制這種安全方面的功能!等會(huì)被人隨便暴力破解就進(jìn)后臺(tái)了,那我們的系統(tǒng)安全性還怎么保障?

但是別急,我已經(jīng)通過(guò)魔改的方式實(shí)現(xiàn)了驗(yàn)證碼和登錄限制了,現(xiàn)在可以愉快使用admin系統(tǒng)了。

先看看效果

效果還是nice的,登錄嘗試次數(shù)可以自己設(shè)定,我這里就不演示了,輸那么多次錯(cuò)誤密碼太麻煩了。

驗(yàn)證碼

驗(yàn)證碼我是用了 django-simple-captcha 這個(gè)庫(kù),配合 multi_captcha_admin 來(lái)生成驗(yàn)證碼form,非常方便。

首先是pip安裝這兩個(gè)庫(kù),大家都懂的,不再贅述。

配置一下 settings.py

INSTALLED_APPS = [
  'multi_captcha_admin',
]
 
# 驗(yàn)證碼配置
MULTI_CAPTCHA_ADMIN = {
  'engine': 'simple-captcha',
}

配置 urls.py

# 添加這一項(xiàng)
path('captcha/', include('captcha.urls')),

到了這步就好啦,如果用的是Django官方的Admin就直接能顯示出登錄的驗(yàn)證碼了,不過(guò)我用的是第三方的Admin,所以需要手動(dòng)添加form。

方法很簡(jiǎn)單,找到 login.html ,在登錄的表單里面添加這一項(xiàng)就好了。

{{ form.captcha }}

默認(rèn)生成的驗(yàn)證碼和輸入框是原生樣式,比較丑~ 我們可以優(yōu)化一下。我是用js把生成的圖片和驗(yàn)證碼輸入框替換成elementUI的樣式,有需要的小伙伴可以參考一下。

var row = document.querySelector('#captcha_group');
 
var captcha_img = document.querySelector('img.captcha');
var col_8 = document.createElement('el-col');
col_8.setAttribute(':span', '8');
col_8.appendChild(captcha_img);
 
var captcha_input = document.querySelector('#id_captcha_1');
var el_input = document.createElement('el-input');
var col_16 = document.createElement('el-col');
col_16.setAttribute(':span', '16');
el_input.setAttribute('name', captcha_input.getAttribute('name'));
el_input.setAttribute('v-model', 'captcha');
el_input.setAttribute('required', 'required');
el_input.setAttribute('placeholder', '請(qǐng)輸入驗(yàn)證碼');
col_16.appendChild(el_input);
 
captcha_input.parentNode.removeChild(captcha_input);
 
row.appendChild(col_8);
row.appendChild(col_16);

登錄限流

這個(gè)也不復(fù)雜,不過(guò)我一開(kāi)始做還是花了比較長(zhǎng)時(shí)間,查不到什么有用的資料,后面我去讀了Django Admin的代碼,一下就想出解決方法了哈哈~

通過(guò)admin的代碼,我發(fā)現(xiàn)處理登錄是 admin.site.login(request, extra_context) 這個(gè)方法,那問(wèn)題就變得很簡(jiǎn)單了,給他加一個(gè)裝飾器就好了,不過(guò)我們不能去修改框架的代碼,所以自己寫一個(gè)新的view,如下:

# 覆蓋默認(rèn)的admin登錄方法實(shí)現(xiàn)登錄限流
@ratelimit(key='ip', rate='5/m', block=True)
def extend_admin_login(request, extra_context=None):
  return admin.site.login(request, extra_context)

然后在 urls.py 里配置一下,記得要放在 admin 的前面:

urlpatterns = [
  path('admin/login/', views.extend_admin_login),
  path('admin/', admin.site.urls),
]

這樣就可以實(shí)現(xiàn)限流了,這里要介紹一下 ratelimit 這個(gè)裝飾器,這是django-ratelimit這個(gè)包提供的,為了使用這個(gè)包,需要配置redis緩存,附上配置代碼:

# 配置redis緩存
CACHES = {
  'default': {
    'BACKEND': 'django_redis.cache.RedisCache', # 緩存后端 Redis
    # 連接Redis數(shù)據(jù)庫(kù)(服務(wù)器地址)
    # 一主帶多從(可以配置個(gè)Redis,寫走第一臺(tái),讀走其他的機(jī)器)
    'LOCATION': [
      'redis://localhost:6379/0',
    ],
    'KEY_PREFIX': 'milky', # 項(xiàng)目名當(dāng)做文件前綴
    'OPTIONS': {
      'CLIENT_CLASS': 'django_redis.client.DefaultClient', # 連接選項(xiàng)(默認(rèn),不改)
      'CONNECTION_POOL_KWARGS': {
        'max_connections': 512, # 連接池的連接(最大連接)
      },
    }
  }
}

@ratelimit(key='ip', rate='5/m', block=True) , key=ip 表示根據(jù)ip來(lái)區(qū)分, rate=5/m 表示一分鐘最多請(qǐng)求這個(gè)接口5次, block=true 表示超過(guò)這個(gè)限制就直接攔截,如果沒(méi)有設(shè)置block參數(shù)的話,超過(guò)限制也不會(huì)攔截,但是可以在ratelimit計(jì)數(shù)器里面看到請(qǐng)求的次數(shù)。

更多用法可以看官方文檔: https://django-ratelimit.readthedocs.io/en/stable/index.html

參考資料

https://github.com/a-roomana/django-multi-captcha-admin

https://django-simple-captcha.readthedocs.io/en/latest/advanced.html#rendering

到此這篇關(guān)于給Django Admin添加驗(yàn)證碼和多次登錄嘗試限制的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Django Admin驗(yàn)證碼和登錄限制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python+OpenCV讓電腦幫你玩微信跳一跳

    Python+OpenCV讓電腦幫你玩微信跳一跳

    這篇文章主要為大家詳細(xì)介紹了Python+OpenCV讓電腦幫你玩微信跳一跳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python類中的魔法方法之 __slots__原理解析

    Python類中的魔法方法之 __slots__原理解析

    這篇文章主要介紹了Python類中的魔法方法之 __slots__詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • django上傳圖片并生成縮略圖方法示例

    django上傳圖片并生成縮略圖方法示例

    這篇文章主要介紹了django上傳圖片并生成縮略圖方法示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 基于python實(shí)現(xiàn)查詢ip地址來(lái)源

    基于python實(shí)現(xiàn)查詢ip地址來(lái)源

    這篇文章主要介紹了基于python實(shí)現(xiàn)查詢ip地址來(lái)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python爬蟲MeterSphere平臺(tái)執(zhí)行報(bào)告使用實(shí)戰(zhàn)

    python爬蟲MeterSphere平臺(tái)執(zhí)行報(bào)告使用實(shí)戰(zhàn)

    這篇文章主要為大家介紹了python爬蟲MeterSphere平臺(tái)執(zhí)行報(bào)告使用實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Python正則表達(dá)式教程之一:基礎(chǔ)篇

    Python正則表達(dá)式教程之一:基礎(chǔ)篇

    正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨(dú)特的語(yǔ)法以及一個(gè)獨(dú)立的處理引擎,效率上可能不如str自帶的方法,但功能十分強(qiáng)大。下面這篇文章主要介紹了關(guān)于Python正則表達(dá)式基礎(chǔ)的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • Django URL參數(shù)Template反向解析

    Django URL參數(shù)Template反向解析

    這篇文章主要介紹了Django URL參數(shù)Template反向解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python簡(jiǎn)單圖片操作:打開(kāi)\顯示\保存圖像方法介紹

    python簡(jiǎn)單圖片操作:打開(kāi)\顯示\保存圖像方法介紹

    這篇文章主要介紹了python簡(jiǎn)單圖片操作:打開(kāi)\顯示\保存圖像方法介紹,還涉及將圖片保存為灰度圖的簡(jiǎn)單方法示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 將自己的數(shù)據(jù)集制作成TFRecord格式教程

    將自己的數(shù)據(jù)集制作成TFRecord格式教程

    今天小編就為大家分享一篇將自己的數(shù)據(jù)集制作成TFRecord格式教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python中__init__.py文件的作用

    Python中__init__.py文件的作用

    這篇文章主要介紹了Python中__init__.py文件的作用,在PyCharm中,帶有__init__.py這個(gè)文件的目錄被認(rèn)為是Python的包目錄,與普通目錄的圖標(biāo)有不一樣的顯示
    2022-09-09

最新評(píng)論

龙口市| 突泉县| 洞头县| 武冈市| 大方县| 英山县| 漳州市| 霍林郭勒市| 大安市| 嘉义市| 石渠县| 仙游县| 铁岭市| 华阴市| 慈溪市| 辽中县| 炉霍县| 阜新| 依安县| 涿州市| 钦州市| 凤城市| 赤水市| 本溪市| 遂溪县| 赞皇县| 县级市| 惠水县| 建平县| 石首市| 普定县| 依兰县| 广州市| 绿春县| 怀宁县| 新闻| 江阴市| 勐海县| 鄯善县| 清苑县| 建德市|