python注册系统_Python制作简易注册登录系统

Python制作简易注册登录系统

这篇文章主要为大家详细介绍了 Python 简易注册登录系统的制作方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。

这次我主要讲解如何用 Python 基于 Flask 的登录和注册, 验证方式采用 Basic Auth

主要用以下库importos

#Flask的基础库

fromflaskimportFlask,abort,request,jsonify,g,url_for

#Flaks的数据库操作的库

fromflask.ext.sqlalchemyimportSQLAlchemy

#Flask登录注册的库

fromflask.ext.httpauthimportHTTPBasicAuth

#加密解密密码的库

frompasslib.appsimportcustom_app_contextaspwd_context

#URL安全序列化工具

fromitsdangerousimport(TimedJSONwebSignatureSerializer

asSerializer,BadSignature,SignatureExpired)

首先当然是初始化app=Flask(__name__)

# 设置密钥

app.config['SECRET_KEY']='the quick brown fox jumps over the lazy dog'

# 数据库的配置

app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///db.sqlite'

app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True

#数据库初始化

db=SQLAlchemy(app)

# 验证的初始化

auth=HTTPBasicAuth()

然后是建模

SQLAlchemy 是 ORM 模型操作数据库的,所以是非常的方便

除了基本的属性之后我们我定义了一些必要的方法classUser(db.Model):

__tablename__='users'

id=db.Column(db.Integer,primary_key=True)

username=db.Column(db.String(32),index=True)

password_hash=db.Column(db.String(64))

# 加密密码

defhash_password(self,password):

self.password_hash=pwd_context.encrypt(password)

# 验证密码

defverify_password(self,password):

returnpwd_context.verify(password,self.password_hash)

# 生成token,并设置过期时间

defgenerate_auth_token(self,expiration=600):

s=Serializer(app.config['SECRET_KEY'],expires_in=expiration)

returns.dumps({'id':self.id})

# 静态的验证token的方法

@staticmethod

defverify_auth_token(token):

s=Serializer(app.config['SECRET_KEY'])

try:

data=s.loads(token)

exceptSignatureExpired:

returnNone# token过期

exceptBadSignature:

returnNone# token无效

user=User.query.get(data['id'])

returnuser

注册功能@app.route('/api/users',methods=['POST'])

defnew_user():

username=request.json.get('username')

password=request.json.get('password')

ifusernameisNoneorpasswordisNone:

abort(400)# 用户名或者密码为空

ifUser.query.filter_by(username=username).first()isnotNone:

abort(400)# 用户已存在

user=User(username=username)

# 加密密码

user.hash_password(password)

# 保存进数据库

db.session.add(user)

db.session.commit()

# 成功注册后返回用户名,Location后面接着的是跳转的地址

return(jsonify({'username':user.username}),201,

{'Location':url_for('get_user',id=user.id,_external=True)})

登录功能# 登录后获取token

@app.route('/api/token')

@auth.login_required

defget_auth_token():

# 设置token过期时间

token=g.user.generate_auth_token(600)

returnjsonify({'token':token.decode('ascii'),'duration':600})

获取 token 后之后,每次请求只需传 token 就好了

我们可以通过一个方法验证 token 是否有效# 可以通过token或者账号密码登录

@app.route('/api/resource')

@auth.login_required

defget_resource():

# 如果token有效的话就返回username

returnjsonify({'data':'Hello, %s!'%g.user.username})

细心的人会发现上面这两个方法前都带有 @auth.login_required,这其实就是奥妙之处# 有@auth.login_required标志的都要调用这个方法,传token或者传账号和密码

@auth.verify_password

defverify_password(username_or_token,password):

# 首先验证token

user=User.verify_auth_token(username_or_token)

ifnotuser:

# 然后再验证用户名和密码

user=User.query.filter_by(username=username_or_token).first()

ifnotuserornotuser.verify_password(password):

returnFalse

g.user=user

returnTrue

最后写一个入口方法if__name__=='__main__':

# 如果这个数据库不存在就创建

ifnotos.path.exists('db.sqlite'):

db.create_all()

app.run(debug=True)

这样就大功告成了

效果图

注册

登录

验证 token

来源: http://www.phperz.com/article/17/0320/315072.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自已动手制作寸照

毕业在即,学校动不动就给张单子,说,添了他,贴照片别忘。苦于我对镜头不感冒,照出来的相片很难看,真的没有本人好看。而且在照证明相的时候都不会笑了,脸很僵硬,不像平时的照片那么活…

Java并发编程实战~CountDownLatch

无线程池实现 while(存在未对账订单){// 查询未对账订单Thread T1 new Thread(()->{pos getPOrders();});T1.start();// 查询派送单Thread T2 new Thread(()->{dos getDOrders();});T2.start();// 等待 T1、T2 结束T1.join();T2.join();// 执行对账操作diff check(…

C++学习之路 | PTA乙级—— 1082 射击比赛 (20 分)(精简)

1082 射击比赛 (20 分) 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟。我们假设靶心在原点(0,0)。…

linuxoracle查看用户权限_权限管理系统设计过程

今天和大家一起探讨权限管理方面的设计心得。权限管理,是B端后台系统一个重要的组成部分,属于底层的支撑功能,系统内所有的功能,甚至字段的增减都涉及到权限的分配和管理。因此怎样配置后台的权限系统,以适应多变业务需…

MIT:大脑如何跟踪运动中的物体?

来源:脑健康联盟抓住一个弹起的球,或者用球拍击球,这两种行动都需要合理地估算触球时间。一直以来,神经科学家都相信,大脑是通过计算物体的运动速度来完成这些动作的。然而,麻省理工学院的一项新研究表明&a…

《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C内部的原理的完全空白,然后找到《Inside The C Object Model》这本书看了下, 感觉收获很大,因为书写得比较早,有些知识应该要更新,但是还是值得好好研…

arp病毒利用的Javascript技术

本文的目的是探讨JS相关技术,并不是以杀毒为主要目的,杀毒只是为讲解一些JS做铺垫的,呵呵,文章有点长,倒杯咖啡或者清茶慢慢看,学习切勿急躁! 最近公司的网络中了这两天闹的很欢的ARP病毒&#…

C++学习之路 | PTA乙级—— 1083 是否存在相等的差 (20 分)(精简)

1083 是否存在相等的差 (20 分) 给定 N 张卡片,正面分别写上 1、2、……、N,然后全部翻面,洗牌,在背面分别写上 1、2、……、N。将每张牌的正反两面数字相减(大减小),得到 N 个非负差值&#xf…

C++的黑科技(深入探索C++对象模型)

来源:http://www.cnblogs.com/qiaozhoulin/p/5227673.html “如何产生一个不能被继承的类”,这道题我反反复复只想到,将父类的构造函数私有,让子类不能调用,最后归结出一个单例模式,但面试官说,…

物联网测试完整解决方案 | 为你的芯片、模块、终端保驾护航

来源:物联网智库2017年被视为物联网商用元年。窄带物联网标准正式冻结,国内运营商重点布局以及设备制造商的强力推动……自此,物联网规模化商用迈入了快车道。然而,与传统的智能手机类似,基于NB-IoT技术的物联网设备在…

mbp网速很慢_苹果笔记本上网很慢怎么回事?macbook无线上网慢的解决方法

Mac笔记本连接到WiFi之后,发现网速很慢,简直让人无法接受,打开一个页面都要等上好几分钟。苹果笔记本上网很慢的原因有很多,检查一下WiFi信号是满格,那么排除所在网络带宽限制的原因。想要解决此问题也简单,只要修改手…

Java并发编程实战~CyclicBarrier

用 CyclicBarrier 实现线程同步 线程 T1 和 T2 要做到步调一致,都完成后通知到线程 T3 创建了一个计数器初始值为 2 的 CyclicBarrier,你需要注意的是创建 CyclicBarrier 的时候,我们还传入了一个回调函数,当计数器减到 0 的时候…

梦中的婚礼

让女孩听了陶醉的曲子梦中的婚礼 :http://player.youku.com/player.php/sid/XMjA1ODc3MTI/v.swf 电脑键盘弹奏 梦中的婚礼 :http://player.youku.com/player.php/sid/XMzMzNzQyMDA/v.swf 转载于:https://www.cnblogs.com/cube/archive/2008/07/19/1246736.html

C++学习之路 | PTA乙级—— 1084 外观数列 (20 分)(精简)

1084 外观数列 (20 分) 外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, … 它从不等于 1 的数字 d 开始,序列的第 n1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是…

DeepMind提出图形的「深度生成式模型」,可实现「任意」图形的生成

原文来源:arXiv作者:Yujia Li、Oriol Vinyals、Chris Dyer、Razvan Pascanu、Peter Battaglia 「雷克世界」编译:嗯~阿童木呀、KABUDA一般来说,图形是基本的数据结构,它在诸如知识图、物理和社会交互、语言和化学等许多…

eviews曲线图怎么做_【干货速递】Eviews:你不可不知的经典问答!

更多精彩内容请关注211统计课堂计量经济学是分析啥的?01计量经济学的主要用途或目的主要有两个方面:1.理论检验。这是计量经济学用途最为主要的和可靠的方面。这也是计量经济学本身的一个主要内容。2.预测应用。从理论研究和方法的最终目的看&#xff0c…

感恩的心

不气歌(一) 他人气我我不气,我本无心他来气。 倘若生气中他计,气出病来无人替。 请来医生把病治,反说气病治非易。 茶不思来饭无味,通宵达旦不入睡。 倘你伸腿离我去,撇我一人活受罪。 奉…

Python-OpenCV 图像与视频处理

来源:https://segmentfault.com/a/1190000003742481 一直断断续续的用过几次 OpenCV,感觉熟练掌握它的使用方法已经变的非常必要了,正好找到一个很不错的英文教程,就以此为起点,详细记录一下对 OpenCV 的学习过程吧。 …

C++学习之路 | PTA乙级—— 1086 就不告诉你 (15 分)(精简)

1086 就不告诉你 (15 分) 做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。 输入格式&#xf…

Java并发编程实战~并发容器

在容器领域一个容易被忽视的“坑”是用迭代器遍历容器,例如在下面的代码中,通过迭代器遍历容器 list,对每个元素调用 foo() 方法,这就存在并发问题,这些组合的操作不具备原子性。 List list Collections.synchronize…