Python:hashlib加密,flask模块写接口
hashlib模块
主要用于加密相关的操作,(比如说加密字符串)在python3的版本里,代替了md5和sha模块,主要提供 sha1, sha224, sha256, sha384, sha512 ,md5 这些加密方式
import hashlib
m = hashlib.md5() #用md5加密的方式(md5加密后无法解密),创建一个md5的对象
m.update(b"Hello") #b代表二进制字节bytes,把字符串hello转成字节,然后加密;用b给一个变量转换的方式,待查
m.update(bytes('hello',encoding='utf-8')) #与上面结果一样,只是换成bytes函数,要加上encoding='utf-8'
print(m.digest()) #2进制格式的加密后的字符串
print(len(m.hexdigest())) #16进制格式的加密后的字符串
PS:不同的加密方式,用法都同上,把md5换一下就行,下面以sha1为例:
# ######## sha1 加密方式########
hash = hashlib.sha1()
hash.update('admin')
print(hash.hexdigest())
加盐:
SAIT='*hn*36t34fhj86' #盐值,可以随便取,但一个模块里所有的盐值应取一样的,用于和其他密码连起来,然后md5加密,提高安全性
flask模块 :
是一个web框架,可以开发接口
eg1:下面写一个登录的接口,登录需要url username passwd
import flask
from flask import request,jsonify #引入请求,用来请求数据;引入json
server=flask.Flask(__name__) #创建一个服务,把当前这个python文件当做一个服务
user=’admin’
p=’houning123’
server.config[“JSON_AS_ASCII”]=False #这句话是使返回值的汉字在浏览器里显示正常
@server.route('/login',methods=['get']) #flask自带的装饰器,这一步是把普通函数变成一个服务,括号里是路径和获取方法
def login():
username=request.values.get(‘username’) #指获取到传的key:“username”的值,把值赋给左边的username
passwd=request.values.get(‘passwd’)
if username and passwd: #判断用户名密码是否为空
if username==user and passwd==p:
res={“code”:1000,”msg”:”登录成功”}
else:
res={“code”:2000,”msg”:”账户或密码错误”}
return jsonify(res)
else:
return jsonify({“code”:1999,”msg”:”必填参数未填”}) #把字典转化成json串格式
server.run(debug=True) #启动服务,debug=True是指调试模式,如果改代码,服务就会自动重启
server.run(port=8888,debug=True,host='0.0.0.0') #指定端口号,不指定的话默认是5000;debug是自己调试用的,给别人写接口不要加debug;
不指定host,默认是127.0.0.1,是本机的ip,只能自己访问,指定0.0.0.0的话,别人都能访问,代表监听多块网卡上面所有的ip
启动服务在start.py模块里就行,api.py里不要启动服务了,避免重复
eg2:写一个获取用户id的接口
@server.route('/get_user_id',methods=['post','get'])
def get_user_id():
if request.method=='POST':
username = request.values.get('username')
token = request.values.get('token')
if username and token:
sql = 'select id from user where username = "%s";'%username
sql_res = OpertionMysql(sql)
if sql_res:
res = OpRedis('user:'+username)
if res:
if token==res:
return jsonify(sql_res)
else:
return jsonify(msg.TOKEN_ERR)
else:
return jsonify(msg.NO_LOGIN)
else:
return jsonify(msg.USER_NOT_FOUND)
else:
return jsonify(msg.NOT_NULL)
else:
return jsonify(msg.METHOD_ERR)
eg3:写一个注册的接口
@server.route('/reg',methods=['post','get'])
def reg():
username = request.values.get('username')
passwd = request.values.get('password')
c_passwd = request.values.get('c_passwd')
if username and passwd and c_passwd:
sql = 'select id from user where username = "%s";'%username
sql_res = OpertionMysql(sql)
if sql_res:
return jsonify(msg.USER_ERR2)
else:
if passwd==c_passwd:
new_password = md5Password(passwd)
insert_sql = 'insert into user (username,password) VALUE ("%s","%s");'%(username,new_password)
OpertionMysql(insert_sql)
return jsonify(msg.SUCCESS)
else:
return jsonify(msg.PASSWORD_DIFF)
else:
return jsonify(msg.NOT_NULL)
eg4:写获取json串类型入参(post请求)的接口,上面几个例子是获取key和value类型的入参(username=request.values.get('username'))
import flask
from flask import request,jsonify
server=flask.Flask(__name__)
@server.route('/json',methods=['post'])
def json_res():
res=request.json #这种方式是获取json类型的入参内容;获取到的数据类型是字典类型
;request.values.get('XXX')这种适用于get、post请求获取key和value类型
的入参(?XXX=xxx&yyy=yyy 或者jmeter的body里填key value这两种传参格式)
print(res) #打印出入参的json串,是字典类型
return jsonify({"msg":"ok"})
eg5:牛牛博客:30行代码写上传下载文件接口
import flask,os,time
eg6:写从redis获取数据、给redis写入数据的两个接口
import redis #定义一个操作hash类型redis的函数
def get_hash_all(name,key=None,v=None):
r=redis.Redis(host=REDIS_HOST,password=REDIS_PASSWD,port=REDIS_PORT,db=REDIS_DB)
if key and v:
r.hset(name,key,v)
res=88
else:
res=r.hgetall(name)
return res
@server.route('/get_sites',methods=['get']) #写一个从redis取数据的接口
def get_sites():
res=get_hash_all('sites') #取出来的res是字典类型,sites里面的key和value是bytes类型
all_sites=[] #定义一个列表,放所有取出的数据
for k,v in res.items(): #字典循环的时候要用items方法
new_res = {}
new_res['sites_name']=k.decode() #decode方法是把bytes类型转换成字符串类型
new_res['url']=v.decode()
all_sites.append(new_res) #把一个个字典添加到列表里
return jsonify(all_sites) #字典和列表都可以被json格式化
@server.route('/set_sites',methods=['post']) #写一个给redis设置值的接口
def set_sites():
req=request.json #req代表的是传入的json串,是一个字典类型
if req.get('site') and req.get('url'): #字典取值用get方法,如果取不到值就返回None
k=req.get('site')
v=req.get('url')
get_hash_all('sites',k,v) #把传入的值写入到redis里
return jsonify(msg.SUCCESS)
else:
return jsonify(msg.NOT_NULL) #括号里是自定义模块里的一个字典类型的值
转载于:https://www.cnblogs.com/hesperid/p/7556024.html
Python:hashlib加密,flask模块写接口相关推荐
- Python hashlib 加密方法(MD5、SHA1、SHA256、SHA52)
Python hashlib 加密 Python 提供了 hashlib 模块来进行加密操作.在下面的文章中,我们将介绍 hashlib 模块的常用加密算法. 1. hashlib 简介 hashli ...
- python连接sqlserver_python 链接sqlserver 写接口实例
我是使用pymssql完成的sqlserver,首先下载符合版本的pymssql的whl,然后安装,在pycharm的default setting->project Interpreter中确 ...
- Python hashlib、hmac模块
Python中的用于加密的函数位于hashlib,hmac模块中,都是内置模块,直接导入即可使用 hashlib模块实现了md5,sha1,sha224,sha256,sha384,sha512等算法 ...
- python hashlib函数_python模块——hashlib
python模块--hashlib hashlib模块是对许多hash函数的一个公共接口 new(name, string = '') 执行给定的hash函数来返回一个新的hash对象,使用给定 ...
- python教程:flask模块的使用教程
1.简介 在服务器上运行Flask接口,就能使用requests模块获取该接口的值. 先运行接口文件,再运行requests文件,即可获取值. 2.示例 2.1一个简单的flask接口 import ...
- C++和Python混合编程:C++ 通过 POST 请求访问 python 搭建的flask服务
文章目录 python 搭建服务端: C++ 客户端访问 python 搭建的服务端: 附加:POCO 基础操作(GET) 最近在研究使用C++代码访问用python语言的flask模块搭建的服务,记 ...
- 初学者python笔记(hashlib加密、logging日志模块、configparser配置文件)
文章目录 logging模块 configparser模块 hashlib模块 我们在很多情况下,程序的运行都需要做日志或者某些记录,这就需要用到logging模块来自动记录:同样的,配置文件也是程序 ...
- python学习,pip 模块-数据库(mysql)-excel操作-写日志-邮件-md5加密
#模块 # 标准模块 # python自带的 # 第三方模块 # pymysql # 自己写的python文件 # 导入模块的实质 # import my_model # 把导入的模块运行了一遍 # ...
- 使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
文章目录: 1 hashlib介绍 2 hashlib模块使用 2.1 查看hashlib中有哪些hash算法 2.2 对字符串进行加密 2.3 对于数据比较大,加密可以分块,结果一样 2.4 has ...
- Python hashlib模块中的sha加密
Python hashlib模块中的sha加密 一.sha简介 sha (Secure Hash Algorithm)模块与md5的作用相似,用于对信息进行加密. "Secure Hash ...
最新文章
- js / jquery 零散收集
- Windows Sockets2 详解2——堵塞与非堵塞模式
- @import注解_Spring 注解之@Import 注入的各种花活
- Java笔记(基础第二篇)
- 31/100. Palindromic Substrings
- c语言重新进入for循环,大佬们帮帮忙 帮我改改 怎样能在输入Y后 再次进行for循环...
- Java @Transient 注解使用
- java base64 显示不完整_如何解决CAD图纸显示不完整、图纸无效?一分钟教你,不允许错过...
- sql不能使用OpenRowset
- 两场面试,一次心灵洗礼
- 【opencv学习笔记】021之霍夫直线变换原理详解
- 测判三极管的口诀 (挑战者)
- 技术项目中的人、风险与应对方法
- 腾讯云GPU服务器深度学习环境搭建
- 基于罗格里德矩阵的坐标转换7参数求取
- windows+中标麒麟双系统启动优先顺序调整方法
- 全面理解document.write()
- 有哪些信息学奥赛相关的比赛和考试
- 使用Phaser和HTML5特性检测移动设备旋转重力方向
- 使用Spring Boot Thin Launcher 打包Spring Boot项目,jar包瘦身
热门文章
- /etc/profile
- 《敏捷制造——敏捷集成基础结构设计》——2.3 集成基础结构数据访问模型
- Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题
- 第二章 jQuery选择器
- 缓存与缓冲的区别 Difference Between Cache and Buffer
- windows server 2012 动态访问控制
- 《BREW进阶与精通——3G移动增值业务的运营、定制与开发》连载之22---BDS的分发流程...
- STM32从设置IO输入上下拉到寄存器GPIOx_BSRR、GPIOx_BRR
- vue 组件传值$attrs $listeners $bus provide/inject $parent/$children
- ACM模板——线段树树状数组ST表