Python中passlib模块实现Django框架中的用户账号密码逻辑 以及 web开发框架webpy,Tornado,Django了解

一、Python中passlib模块实现Django框架中的用户账号密码逻辑

    有一套服务端系统使用的是 Django 框架开发的,其账号密码也使用的是 Django 框架原生的账号体系处理,然后我需要在另一套非 Django 框架的程序中去校验用户的账号密码,在 Django 中使用的是PBKDF2(Password-Based Key Derivation Function 2)加密算法,使用的时候直接调用。

from django.contrib.auth.hashers import make_password
password = '123456'
# 通过原始密码串直接获得散列密码串
hashed_password = make_password(password)  

     开始我在原生的python代码块中使用pbkdf2_sha256算法来对密码进行加密,但是加不出和原系统一样的密码出来,pbkdf2_sha256加密后的字符串内容包括几个部分,分别使用$号分割,包括加密算法、迭代次数、盐和最终密码串。通过调整参数得到了与原数据基本符合的密码串。

#导入模块: from passlib.hash import pbkdf2_sha256
password = '密码字符'
hashed_password = pbkdf2_sha256.encrypt(password)
#加密出来的格式如下:
$pbkdf2-sha256$29000$CAEgpNSa0/ofY.xd6703xg$m/bLVOIPm974K4AeIY8/JSJYjggtqIJeMWHVZO0yP1Y

# pbkdf2_sha256.encrypt调用示例
hashed  = pbkdf2_sha256.encrypt(pwd, rounds=hash_rounds, salt_size=salt_size, salt=b'盐串')
# 通过传递参数rounds=36000,和salt能得到与原数据基本符合的密码串
$pbkdf2-sha256$36000$WouxVooRIgQgpNQ6p5Ry7g$M9JXw/eK7C5wMT6YoKXod5cSXcFF.RBGTk1r2GSb9D4

    但发现还是有一些区别,使用 bkdf2_sha256.encrypt(str) 加密的数据内容会以$开头,且不会以=结尾,而Django框架中的用户密码均是以pbkdf2_sha256$开头,并且以=结尾,并且通过比对,发现pbkdf2-sha加密后的字符串中的点号均被替换成了加号。

    开始我想着要不就这样,使用 pbkdf2_sha256.encrypt 的逻辑加密出密码串进行替换处理来比对密码是否正常,但也担心会不会还有一些不知道的特殊字符经过了Django处理,导致后面遇到大坑,于是开始好好看看passlib模块,巧的是在passlib模块的源代码中 site-packagespasslibhandlers 目录下不经意发现了一个 django.py 文件,估计因为django太出名,passlib模块直接将框架里的密码实现囊括了进来,以方便调用。于是开始尝试看这个 django.py,确实非常好用。

# hash.py中已经导入
from passlib.handlers.django import django_bcrypt, django_bcrypt_sha256, django_des_crypt, django_disabled, django_pbkdf2_sha1, django_pbkdf2_sha256, django_salted_md5, django_salted_sha1

# 因此使用的时候可以直接导入django_pbkdf2_sha256
from passlib.hash import django_pbkdf2_sha256
# 加密处理
django_pbkdf2_sha256.encrypt('密码字符', rounds=36000, salt='')
# 密码验证处理
django_pbkdf2_sha256.verify('密码字符', password_database)

二、关于python的web开发框架webpy,Tornado,Django 

    最近自己开始使用python进行web开发,算是对python使用的加强练习,之前写过少量的python代码,基本这里面都有相关的文章,在web开发上还没有真正写过,不过用过一点Tornado,后在网上了解发现主要的python开发框架有webpy,Tornado,Django。当然python的web框架远不止这三个,不过这三个很具有代表性,并且也绝对是常用的框架。

 1. webpy框架:

    轻量级框架,目前已经开始使用并着手开发小站,确实是一个很小巧的框架,不过简单web开发也就这些东西,适合新手上手开发。集成了路由处理,多种数据库的连接和基本的增删改查封装,cookie的处理,模板视图的渲染,以及一些表单的生成处理等,基本可满足一般的web开发。以我目前使用不深的感受来看,最烦的是很多代码修改不能立即生效(加了debug=true),但有些修改仍然是需要重启python服务端。在路由上我想能不能有一点优化,目前所有的uri设置都是设置由某个class来处理,然后class里面分成get和post方法,这个感觉和web开发有一点不适合,很多业务都适合在一个类里面处理,只是方法不一样,而webpy一个类基本只能处理一个业务,最多能再分一下get和post。当然你可以通过uri匹配再从get中分发到其它的方法,但这些理论是应该是框架提供的基础功能。除此之外,web.py不自带http服务,我前端是用的nginx处理静态文件,python转发给后端服务。不过不带上http框架才能小巧,web.py依然是一个不错的小框架。

2. Tornado框架:

    中级框架,Tornado是Facebook开源出来的框架,相比于web.py,Tornado无需加nginx等前端也可以供浏览器访问;目前Tornado我还用得不多,看网上资料讨论,有说它仍没有完整实现HTTP 1.1的协议,所以官方仍推荐用户在生产环境下在前端使用nginx,后端反向代理到多个Tornado实例。Tornado本身是单线程的异步网络程序,它默认启动时,会根据CPU数量运行多个实例;充分利用CPU多核的优势。Tornado走的是少而精的方向,它也有提供模板功能;虽然不鼓励,但作者是可以允许在模板进行少量编码(直接嵌入单行py代码)的。Tornado和webpy一样,也没有ORM(仅有一个mysql的超简单封装),甚至没有Session支持,更不要说Django那样自动化的后台。有个让我很有感受的比喻是有人觉得Tornado有点像PHP框架中的YAF,感觉比较形象。

3. Django框架:

    重量级框架,也应该是最出名的py框架,DJANGO走的是大而全的方向,它最出名的是其全自动化的管理后台,这个让我想起了PHP中的框架YII里面的GII功能,只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。因此Django的卖点之一就是超高的开发效率,但Django的模板系统和YII又不一样,YII允许使用原生的php语言,但Django必须使用模板语言。

4. 个人简单总结:

总之,我个人认为:
如果网站不是很复杂,又需求快速完成,推荐用Django
如果网站有些复杂,或者有性能要求的话,推荐用Tornado
如果网站不复杂,同时也没有专业的python人员,推荐用webpy

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林戈的IT生涯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值