【08】Python itsdangerous、sys.argv、glob、异常处理
1.itsdangerous
第三方模块。
一般情况下,用户登录时,根据密码(有时候加盐)等生成token,和id一起-->存入redis;
用户再次访问时(比如说支付时),请求中带着id和token,后台会将用户带来的token和redis中的进行对比,若一致,则匹配。
- 使用itsdangerous仅需生成一次,且不用存redis。
1.1加密token
import itsdangerous salt='sdf234^#$@G'#设置盐值
t = itsdangerous.TimedJSONWebSignatureSerializer(salt,expires_in=30)#expires_in设置过期时间
res = t.dumps({'username':'yangfan','user_id':1})#参数为要加密的数据,为字典
token = res.decode()#返回bytes类型 decode解码
print(token)
#运行结果
eyJhbGciOiJIUzUxMiIsImlhdCI6MTU0MjAzMDg3NywiZXhwIjoxNTQyMDMwOTA3fQ.eyJ1c2VybmFtZSI6InlhbmdmYW4iLCJ1c2VyX2lkIjoxfQ.jLwz4aL1ETAPFOs6CmDXYNECu4lNPVg0HjTcLkn-CUtWtrB9yKkO6fczxVJuwECEW83Y6FTgy47oV3X_EL45OQ
1.2解密token
import itsdangerous salt='sdf234^#$@G'
t = itsdangerous.TimedJSONWebSignatureSerializer(salt,expires_in=30)
s='eyJhbGciOiJIUzI1NiIsImlhdCI6MTU0MTgyMDA1NiwiZXhwIjoxNTQxODIwMDg2fQ.eyJ1c2VybmFtZSI6InlhbmdmYW4iLCJ1c2VyX2lkIjoxfQ.FUfs92HuVKrt61AKpMjv1Iye8QDP7XUGOfgcrSusMv8'
res = t.loads(s)
print(res)
#如果解析成功,返回原来加密的参数
{'username':'yangfan','user_id':1} #如果token已过期,会报错
......
File "C:\Users\tyourai\AppData\Local\Programs\Python\Python36\lib\site-packages\itsdangerous\signer.py", line 169, in unsign
raise BadSignature("Signature %r does not match" % sig, payload=value)
itsdangerous.exc.BadSignature: Signature b'FUfs92HuVKrt61AKpMjv1Iye8QDP7XUGOfgcrSusMv8' does not match
2.sys.argv
2.1sys.argv的作用
sys.argv的作用是获取到运行python文件时,传入参数
- 默认如果运行python文件的时候,不传参数,argv里面只有一个元素,就是当前这个python文件的文件名
import sys
print(sys.argv)
#运行结果,是个List
['D:/我的文档/day11/test.py']
2.2实例
import flask
import sys
import time
server = flask.Flask(__name__) @server.route('/')
def index():
return '<h1>success</h1>'
if len(sys.argv)>1: #有参数传入,不传参时list长度为1
port = sys.argv[1]
if port.isdigit():
server.run(port=port)#输入的参数作为端口号
elif port=='--help':
print('这个python文件的作用是让你发财!')
elif port=='--time':
print(time.strftime('%Y-%m-%d %H:%M:%S'))
else:
print('端口号必须是整数!')
else:
print('运行错误!请在运行的时候指定端口号\n'
'请按照下面的方式运行python文件!\n'
'python mock_server.py 8989')
3.glob
内置模块,可用来过滤目录下的文件
- 使用以前的方法
import os
print(os.listdir())#获取当前目录下的文件,返回List for f in os.listdir():
if f.endswith('.py'):
os.remove(f)#删除指定目录下.py结尾的文件
- 使用glob来实现
import glob
#过滤目录下的文件
print(glob.glob('*.py'))#返回一个List,内容是以.py结尾的文件
print(glob.glob('*1*'))#中间包含1的文件
#运行结果
C:\Users\tyourai\AppData\Local\Programs\Python\Python36\python.exe D:/我的文档/day11/test.py
['a.py', 'b.py', 'mock_server.py', 'op_mysql.py', 'test.py', 'token111.py', '作业1,下载qq头像.py', '呵呵呵.py', '析构函数.py', '类变量.py', '继承.py']
['token111.py', '作业1,下载qq头像.py'] Process finished with exit code 0
4.异常处理
4.1基本格式
def calc(a,b):
try:
res = a/b
except ZeroDivisionError as e: #可以捕捉到ZeroDivisionError
res = '除数不能为零, %s'%e
return res
# res = calc('k',1) #TypeError try后可以跟多个except
# res = calc(10,0) # ZeroDivisionError
# res = calc(10,0) #TypeError
4.2else和finally
money = input('enter:')
try:
money = int(money)
except Exception as e:#产生异常了,走这边
print('输入金额错误!')
else:#没有出现异常的话就走这里
print(money+1)
finally:#无论怎样都会执行
print('finally')
4.3e.args
try:
x = 2 / 0
except Exception as e:
print(e)
print(e.args) #这是一个元组,在实际使用中,作为返回值
print(type(e))
print(type(e.args))
else:
print('hahaha')
division by zero
('division by zero',)
<class 'ZeroDivisionError'>
<class 'tuple'>
【08】Python itsdangerous、sys.argv、glob、异常处理的更多相关文章
- Python中 sys.argv[]的用法
Python中 sys.argv[]的用法 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上 ...
- 31 Python中 sys.argv[]的用法简明解释(转)
Python中 sys.argv[]的用法简明解释 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果, ...
- python argparse sys.argv
python argparse sys.argv class WeiLearningArgumentParser(argparse.ArgumentParser): def __init__(self ...
- python关于sys.argv列表的应用场景
python关于sys.argv列表的应用场景 1.需求很简单: 使用 sys.argv 获取命令行参数(即要判断的文件名),然后判断文件是否存在,文件存在再进一步判断是否有读权限 2.分析: (1) ...
- Python中 sys.argv的用法简明解释
Python中 sys.argv[]的用法简明解释 sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得 ...
- 9.python中sys.argv[]用法说明
在python中sys.argv[]是用来获取命令行输入的参数的(参数和参数之间空格区分),sys.argv[0]表示代码本身文件路径,所以从参数1开始,表示获取的参数了 举例说明:创建一个程序名为t ...
- 【python】sys.argv[]的用法
在学python的过程中,一直弄不明白sys.argv[]的意思,虽知道是表示命令行参数,但还是有些稀里糊涂的感觉. 今天又好好学习了一把,总算是大彻大悟了. Sys.argv[]是用来获取命令行参数 ...
- python中sys.argv[]的使用
sys.argv[]主要用于程序从外部获取参数.其参数个数可以是多个,组建成一个列表(list). 几个简单示例如下: fun_test.py: #!/usr/bin/env python # -*- ...
- python学习——sys.argv
sys.argv[]:用于获取命令行参数,sys.argv[0]即所运行的代码自身的文件路径,因此真正的其他参数是从1开始 sys.argv[1]:表示第一个参数 sys.argv[1][2:]:表示 ...
- Python练习-sys.argv的无聊用法
代码如下: # 编辑者:闫龙 #将三次登陆锁定的作业改为: # python login.py -u alex -p 123456 输入的形式 # (-u,-p是固定的,分别代表用户名和密码) imp ...
随机推荐
- java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)
1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...
- 主机加固之windows2003
这篇与上一篇的win7主机加固内容大体类似,部分有些不同.这篇也可以用来尝试加固windows XP. 1. 配置管理 1.1用户策略 注意:在对Windows系统加固之前先新建一个临时的系统管理员账 ...
- SpringBoot 和 SpringCloud 之间关系?
SpringBoot:专注于快速方便的开发单个个体微服务(关注微观):SpringCloud:关注全局的微服务协调治理框架,将SpringBoot开发的一个个单体微服务组合并管理起来(关注宏观):Sp ...
- USACO4.3 Buy Low, Buy Lower【简单dp·高精度】
如果没有方案数的话,这道题水的不得了,裸的最长下降子序列. 但是它有方案数,所以... 一个是方案数的求法: 设$f[i]$是以$a[i]$结尾的最长下降子序列的长度,可以$n^2$$dp$出答案 如 ...
- scrapy 正则汉字的提取方法
[\u4E00-\u9FA5]
- MySQL出现 Access denied for user 'root'@'localhost' (using password:YES) 解决办法
1.先停止MySQL服务,然后在MySQL安装目录(我的是C:\Program Files (x86)\MySQL\MySQL Server 5.1)找到my.ini文件,在最后一行添加skip-gr ...
- [转帖]oracle 00600 4194 4193 问题的处理
oracle断电重启之ORA-00600[4194] https://www.cnblogs.com/xwdreamer/p/3778383.html 部门的机器出现异常 断电导致的 错误 从网上学了 ...
- shiro三连斩之概念
1, 什么是Shiro? Shiro是一个安全框架,用于解决系统的认证和授权问题,同时提供了会话管理,数据加密,与WEB集成,缓存等机制. Authentication:身份认证/登录,验证用户是不是 ...
- Forsaken给学生分组
链接:https://ac.nowcoder.com/acm/contest/1221/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 腾讯万亿级分布式消息中间件TubeMQ正式开源
TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,T ...