一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 給Django Admin添加驗證碼和多次登錄嘗試限制的實現

給Django Admin添加驗證碼和多次登錄嘗試限制的實現

2020-07-27 00:03畫星星高手 Python

這篇文章主要介紹了給Django Admin添加驗證碼和多次登錄嘗試限制的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Django自帶的Admin很好用,但是放到生產環境總還差了點什么= =

看看admin的介紹:

Django奉行Python的內置電池哲學。它自帶了一系列在Web開發中用于解決常見問題或需求的額外的、可選工具。這些工具和插件,例如django.contrib.redirects都必須在settings中的INSTALLED_APPS處進行注冊,有的還需要執行manage.py migrate命令,在數據庫中創建一些數據表。

Admin站點是Django有別于其它Web框架最重要的一點,并且非常受歡迎,簡直是出門旅游xxxx的必備。不管你是寫個小demo還是做個大項目都用得上。admin(下文中將Admin管理后臺簡稱為admin)通過讀取你的模型數據,快速構造出一個可以對實際數據進行管理的Web站點,常用于開發測試,簡單管理等場合,適用于部門內部為工作方便的場合, 但不建議在生產環境中使用。

為什么不建議在生產環境使用呢,因為Admin缺了驗證碼登錄限制這種安全方面的功能!等會被人隨便暴力破解就進后臺了,那我們的系統安全性還怎么保障?

但是別急,我已經通過魔改的方式實現了驗證碼和登錄限制了,現在可以愉快使用admin系統了。

先看看效果

給Django Admin添加驗證碼和多次登錄嘗試限制的實現

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

驗證碼

驗證碼我是用了 django-simple-captcha 這個庫,配合 multi_captcha_admin 來生成驗證碼form,非常方便。

首先是pip安裝這兩個庫,大家都懂的,不再贅述。

配置一下 settings.py

?
1
2
3
4
5
6
7
8
INSTALLED_APPS = [
  'multi_captcha_admin',
]
 
# 驗證碼配置
MULTI_CAPTCHA_ADMIN = {
  'engine': 'simple-captcha',
}

配置 urls.py

?
1
2
# 添加這一項
path('captcha/', include('captcha.urls')),

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

方法很簡單,找到 login.html ,在登錄的表單里面添加這一項就好了。

?
1
{{ form.captcha }}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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', '請輸入驗證碼');
col_16.appendChild(el_input);
 
captcha_input.parentNode.removeChild(captcha_input);
 
row.appendChild(col_8);
row.appendChild(col_16);

登錄限流

這個也不復雜,不過我一開始做還是花了比較長時間,查不到什么有用的資料,后面我去讀了Django Admin的代碼,一下就想出解決方法了哈哈~

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

?
1
2
3
4
# 覆蓋默認的admin登錄方法實現登錄限流
@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 的前面:

?
1
2
3
4
urlpatterns = [
  path('admin/login/', views.extend_admin_login),
  path('admin/', admin.site.urls),
]

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 配置redis緩存
CACHES = {
  'default': {
    'BACKEND': 'django_redis.cache.RedisCache', # 緩存后端 Redis
    # 連接Redis數據庫(服務器地址)
    # 一主帶多從(可以配置個Redis,寫走第一臺,讀走其他的機器)
    'LOCATION': [
      'redis://localhost:6379/0',
    ],
    'KEY_PREFIX': 'milky', # 項目名當做文件前綴
    'OPTIONS': {
      'CLIENT_CLASS': 'django_redis.client.DefaultClient', # 連接選項(默認,不改)
      'CONNECTION_POOL_KWARGS': {
        'max_connections': 512, # 連接池的連接(最大連接)
      },
    }
  }
}

@ratelimit(key='ip', rate='5/m', block=True)key=ip 表示根據ip來區分, rate=5/m 表示一分鐘最多請求這個接口5次, block=true 表示超過這個限制就直接攔截,如果沒有設置block參數的話,超過限制也不會攔截,但是可以在ratelimit計數器里面看到請求的次數。

更多用法可以看官方文檔: 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

到此這篇關于給Django Admin添加驗證碼和多次登錄嘗試限制的實現的文章就介紹到這了,更多相關Django Admin驗證碼和登錄限制內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/deali/p/13378868.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩精品亚洲一级在线观看 | 69午夜影院| 日韩免费高清完整版 | 91交换论坛| 精品精品久久宅男的天堂 | 亚洲AV蜜桃永久无码精品无码网 | 日韩中文字幕在线不卡 | 国产91精选学生在线观看 | 欧美日韩中文国产一区二区三区 | 四虎tv在线观看884aa | 色欲都市 | 大学生宿舍飞机 free | 午夜久久免费视频 | 国产一二在线观看视频网站 | 狠狠色婷婷丁香六月 | 嫩草在线观看视频 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 国产美女下面流出白浆视频 | 国内精品久久久久小说网 | 国产aaaaa一级毛片 | 日本亚洲欧洲高清有码在线播放 | xxxx成人| 天堂网在线.www天堂在线视频 | 91精品国产在线 | 亚洲一区二区日韩欧美gif | 国产精品理论片在线观看 | 日韩精品一二三区 | 全黄h全肉细节文在线观看 全彩成人18h漫画 | 国产精品女主播自在线拍 | 超91精品手机国产在线 | 男人懂得网站 | 久久机热免费视频 | 久久精品视频在线看 | 亚洲激情在线视频 | 亚洲视频在线观看免费视频 | 精品香蕉99久久久久网站 | 特黄视频 | 四虎新网站| 精品无码国产AV一区二区三区 | 亚洲国产精品二区久久 | 4hc44四虎www在线影院男同 |