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系统了。
先看看效果
效果还是nice的,登录尝试次数可以自己设定,我这里就不演示了,输那么多次错误密码太麻烦了。
验证码
验证码我是用了 django-simple-captcha
这个库,配合 multi_captcha_admin
来生成验证码form,非常方便。
首先是pip安装这两个库,大家都懂的,不再赘述。
配置一下 settings.py
:
INSTALLED_APPS = [ 'multi_captcha_admin', ] # 验证码配置 MULTI_CAPTCHA_ADMIN = { 'engine': 'simple-captcha', }
配置 urls.py
:
# 添加这一项 path('captcha/', include('captcha.urls')),
到了这步就好啦,如果用的是Django官方的Admin就直接能显示出登录的验证码了,不过我用的是第三方的Admin,所以需要手动添加form。
方法很简单,找到 login.html
,在登录的表单里面添加这一项就好了。
{{ form.captcha }}
默认生成的验证码和输入框是原生样式,比较丑~ 我们可以优化一下。我是用js把生成的图片和验证码输入框替换成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', '请输入验证码'); 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,如下:
# 覆盖默认的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
的前面:
urlpatterns = [ path('admin/login/', views.extend_admin_login), path('admin/', admin.site.urls), ]
这样就可以实现限流了,这里要介绍一下 ratelimit
这个装饰器,这是django-ratelimit这个包提供的,为了使用这个包,需要配置redis缓存,附上配置代码:
# 配置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
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 孙悦.1996-伙伴【正大国际】【WAV+CUE】
- 纪钧瀚《钢琴阅读时光 雨中书店聆听轻音乐》[FLAC/分轨][399.62MB]
- 证声音乐图书馆《走向自然 疗心爵士乐》[320K/MP3][87.4MB]
- 证声音乐图书馆《走向自然 疗心爵士乐》[FLAC/分轨][184.94MB]
- 陈慧娴.2018-Priscilla-Ism演唱会3CD(2024环球红馆40复刻系列)【环球】【WAV+CUE】
- 郑秀文.1999-我应该得到(国)【华纳】【WAV+CUE】
- 陈家慧.2011-钢琴酒吧2CD【龙吟唱片】【WAV+CUE】
- 证声音乐图书馆《雨季 蓝调吉他 Rainy Blues》[320K/MP3][45.01MB]
- 证声音乐图书馆《雨季 蓝调吉他 Rainy Blues》[FLAC/分轨][109.13MB]
- 赞多《序章》[320K/MP3][45.54MB]
- 许巍.2004-每一刻都是崭新的【步升大风】【WAV+CUE】
- 群星.2024-四方馆影视原声带【韶愔音乐】【FLAC分轨】
- 陈雷.1997-安锁咧【金圆唱片】【WAV+CUE】
- 关淑怡.2013-MY.FAVORITE.SK.3CD【环球】【WAV+CUE】
- Sweety.2006-花言乔语【丰华】【WAV+CUE】