首页 文章 精选 留言 我的

精选列表

搜索[python],共10000篇文章
优秀的个人博客,低调大师

使用python实现后台系统的JWT认证

今天的文章介绍一种适用于restful+json的API认证方法,这个方法是基于jwt,并且加入了一些从oauth2.0借鉴的改良。 1. 常见的几种实现认证的方法 首先要明白,认证和鉴权是不同的。认证是判定用户的合法性,鉴权是判定用户的权限级别是否可执行后续操作。这里所讲的仅含认证。认证有几种方法: 1.1 basic auth 这是http协议中所带带基本认证,是一种简单为上的认证方式。原理是在每个请求的header中添加用户名和密码的字符串(格式为“username:password”,用base64编码)。 这种方式相当于将“用户名:密码”绑定为一个开放式证书,这会有几个问题:①每次请求都需要用户名密码,如果此连接未使用SSL/TLS,或加密被破解,用户名密码基本就暴露了;②无法注销用户的登录状态;③证书不会过期,除非修改密码。

优秀的个人博客,低调大师

用Python玩转微信的正确姿势!

0. itchat 最近研究了一些微信的玩法,我们可以通过网页版的微信微信网页版,扫码登录后去抓包爬取信息,还可以post去发送信息。 然后发现了itchat这个开源项目,作者是@LittleCoder,已经把微信的接口完成了,大大的方便了我们对微信的挖掘,以下的功能也通过itchat来实现。 安装itchat这个库 pip install itchat 先来段简单的试用,实现微信的登录,运行下面代码会生成一个二维码,扫码之后手机端确认登录,就会发送一条信息给‘filehelper’,这个filehelper就是微信上的文件传输助手。 importitchat# 登录itchat.login()# 发送消息itchat.send(u'你好', 'filehelper') 除了登录和发送消息我们还可以这么来玩,往下走~ 1. 微信好友男女比例 想统计

优秀的个人博客,低调大师

怎样用Python实现地理编码

引言 今天看到一篇阿里云的文章"天下武功,唯快不破",以物流行业为例,分析了PostgreSQL 与 Greenplum 在地理位置信息处理,最佳路径算法,机器学习等方面的物流行业应用方法。其中提到了地址转换成坐标的问题,更专业些的名词应该是“地理编码”,即知道一个地址,如北京市海淀区上地十街10号,怎么样可以获取到对应的经纬度位置信息(40,116),或者反过来。 地理编码概念 很多地图相关的厂商都提供了相关的API,我们可以直接利用这些API得到这些信息。比如百度的Geocoding API。 Geocoding API是一类接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# 、C++、Java等开发语言发送请求且接收JSON、XML的返回数据。Geocoding API包括地址解析和逆地址解析功能: 借

优秀的个人博客,低调大师

python函数式编程之装饰器(二)

以前用装饰器,都是定义好了装饰器后,使用@装饰器名的方法写入被装饰函数的正上方 在这里,定义的装饰器都是没有参数的 在定义装饰器的函数的时候,没有在括号里定义参数,这就叫做无参装饰器 既然有无参装饰器,那么当然也就会有有参装饰器 有参装饰器的定义和使用 定义一个普通的装饰器 db_path = "db.txt" login_dic = { "user": None, "status": None, } def auth(func): def wrapper(*args, **kwargs): if login_dic['user'] and login_dic['status']: res = func(*args, **kwargs) return res name = input("your name:").strip() password = input("your password:").strip() with open(db_path, "r", encoding="utf-8") as f: user_dic = eval(f.read()) if name in user_dic and password == user_dic[name]: print("login ok") login_dic['user'] = name login_dic['status'] = True res = func(*args, **kwargs) return res else: print("login error") return wrapper @auth def index(): print("welcome to index page") @auth def home(name): print("welcome to %s home page" % name) index() home() 上面的例子是一个典型的基于文件的认证方式的装饰器 在生产环境中,用户的认证方式可能有很多种,比如还有LDAP和数据库的认证方式 如果想把上面的代码修改,添加基于不同认证方式的用户认证 db_path = "db.txt" login_dic = { "user": None, "status": None, } def deco(auth_type): def auth(func): def wrapper(*args, **kwargs): if auth_type == "file": if login_dic['user'] and login_dic['status']: res = func(*args, **kwargs) return res name = input("your name:").strip() password = input("your password:").strip() with open(db_path, "r", encoding="utf-8") as f: user_dic = eval(f.read()) if name in user_dic and password == user_dic[name]: print("login ok") login_dic['user'] = name login_dic['status'] = True res = func(*args, **kwargs) return res else: print("login error") elif auth_type == 'ldap': print("ldap认证方式") elif auth_type == "sql": print("数据库的认证方式") else: print("不知道的认证方式") return wrapper return auth 有参装饰器的调用 @deco(auth_type="file") def index(): print("welcome to index page") @deco(auth_type="abc") def home(name): print("welcome to %s home page" % name) index() home() 在上面的例子里,deco(auth_type="file")这个函数的执行以后就得到了auth函数,但是现在得到的auth函数跟以前的auth函数是不一样的,现在的auth函数内部添加了认证方式这样一个参数, 这样添加auth_type参数后的结果就相当于加在index函数和home函数正上方的是auth函数,这样就为最开始时的auth函数添加了一个参数 函数中的路由功能 先定义3个函数,现在想做的是只需要用户输入字符串,就执行对应的函数 可以通过为每个函数添加装饰器的功能,把普通函数添加到函数字典中,然后到函数字典中找到输入字符串对应的函数地址,加括号就可以运行了 类似于 func_dic = {"f1": f1, "f2": f2, "f3": f3} def f1(): print("f1 func") def f2(): print("f2 func") def f3(): print("f3 func") 这里就要使用到有参装饰器 定义有参装饰器 def make_func_dic(key): def deco(func): func_dic[key] = func return deco 用装饰器make_func_dic装饰函数 func_dic = {} def make_func_dic(key): def deco(func): func_dic[key] = func return deco @make_func_dic("f1") # 等同于deco(f1) def f1(): print("f1 func") @make_func_dic("f2") # 等同于deco(f2) def f2(): print("f2 func") @make_func_dic("f3") # 等同于deco(f3) def f3(): print("f3 func") 打印func_dic,得到结果 {'f1': <function f1 at 0x0000000002D2A510>, 'f2': <function f2 at 0x0000000002D2A598>, 'f3': <function f3 at 0x0000000002D2A620>} 可以看到func_dic字典中,每个字符串对应的是相应字符串的函数的内存地址 这样想运行f1函数,只需要把func_dic中的"f1"的值加括号运行就可以了 然后使用户输入字符串,运行字符串对应的函数 while True: cmd=input(">>: ").strip() if cmd in func_dic: func_dic[cmd]() 这样就可以得到想要的结果了 这样做的好处:只需要输入对应的字符串,就可以执行对应的函数,不需要使用if和elif对输入的字符串进行一条一条的判断了 这就是使用装饰器在代码级别达到函数的路由功能

优秀的个人博客,低调大师

Python中典型内建函数的用法

abs(x) 返回变量x的绝对值;如果x为复数,则返回其模值。 all(x) 如果x中的值都是真或者x为空,则返回真;反之返回假。 any(x) 如果x中存在一个变量的值为真,则返回真;反之返回假。 ascii(x) 返回x的字符串形式。如果x不能有ASCII编码(例如中文),则以字符串形式返回其编码。 print(ascii('中文'))#'\u4e2d\u6587' print('\u6587')# 文 bin(x) 返回整数x的二进制形式。另外,可修改x所在类的__index__()和__int__()方法来调整其返回值。 bool(x) 返回x的布尔值。当x为0, False, None, 空时返回假,其余返回真。另外可以通过修改x所在类的__bool__()方法来调整x的bool值。 bytearray() 返回一个可变的字节数组。 pr

优秀的个人博客,低调大师

Python-OpenCV学习(九)直线圆检测

直线和圆检测:Hough变换是直线和形状检测背后的原理基础,它是由Richard Duda和Peter Huart发明,他们是对PaulHough在10世纪60年代早期所做的工作的拓展:直线检测:直线检测通过HoughLines和HoughLinesP函数完成:HoughLines函数用的是标准的Hough变换。HoughLinesP函数使用的是概率Hough变换。HoughLinesP称为概率版本的Hough变换的原因是它只通过分析点的子集并估计这些点属于一条直线的概率,是对标准Hough变换的一个优化,执行速度回更加快: import cv2 import numpy as np img = cv2.imread('lines.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray,50,120) minLineLength = 20 maxLineGap = 5 lines = cv2.HoughLinesP(edges,1,np.pi/180,20,minLineLength,maxLineGap) for x1,y1,x2,y2 in lines[0]: cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2) cv2.imshow("edges", edges) cv2.imshow("lines", img) cv2.waitKey() cv2.destroyAllWindows() 效果设置最小直线长度和最大线段间隙也蛮重要,设置最小会消除小于长度的线段,最大间隙,大于这个值会被视为是两条直线HoughLines输入的位一个边缘检测后的二值化图像:HoughLinesP参数: 需要处理的图像 线段的几何表示rho和theta,一般取1和np.pi/180 阈值。低于这个阈值的线段回本忽略-minLineLength和maxLineGap 圆检测:OpenCV的HoughCircles函数可以用来检测圆,与使用HoughLines函数类似: import cv2 import numpy as np planets = cv2.imread('planet_glow.jpg') gray_img = cv2.cvtColor(planets, cv2.COLOR_BGR2GRAY) img = cv2.medianBlur(gray_img, 5) cimg = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) circles = cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,120, param1=100,param2=30,minRadius=0,maxRadius=0) circles = np.uint16(np.around(circles)) for i in circles[0,:]: # draw the outer circle cv2.circle(planets,(i[0],i[1]),i[2],(0,255,0),2) # draw the center of the circle cv2.circle(planets,(i[0],i[1]),2,(0,0,255),3) cv2.imwrite("planets_circles.jpg", planets) cv2.imshow("HoughCirlces", planets) cv2.waitKey() cv2.destroyAllWindows()

优秀的个人博客,低调大师

Python-OpenCV学习(八)凸轮廓检测

凸轮廓与Douglas-Peucker算法:大多数处理轮廓的时候,物体的形状(包括凸形状)都是变换多样的。凸形状内部的任意两点的连线都在该形状里面。cv.approxPloyDP是一个计算进似多边形框的函数,该函数有三个参数: 第一个参数为“轮廓” 第二个参数为$\varepsilon $值,它表示圆轮廓与近似多边形的最大差值(这个值越小,近似多边形与源轮廓越接近) 第三个参数为“布尔标记”表示这个多边形是否闭和合$\varepsilon$是为所得到的近似多边形周长与轮廓之间的最大差值,差值越小,多边形轮廓越相似。 如果需要轮廓的周长信息可以通过Opencv的cv2.arcLength函数来完成: epsilon=0.01*cv2.arcLength(cnt,True) approx=cv2.approxPolyDP(cnt,epsilon,True) 通过OpenCV来有效计算一个近似多变形,多边形周长与源轮廓周长之比就为$\varepsilon$为了计算图形状,需要用OpenCV的cv2.convexHull函数来获取处理过的轮廓信息, hull =cv2.convexHull(cnt) 完整代码: import cv2 import numpy as np img = cv2.pyrDown(cv2.imread("hammer.jpg", cv2.IMREAD_UNCHANGED)) ret, thresh = cv2.threshold(cv2.cvtColor(img.copy(), cv2.COLOR_BGR2GRAY) , 127, 255, cv2.THRESH_BINARY) black = cv2.cvtColor(np.zeros((img.shape[1], img.shape[0]), dtype=np.uint8), cv2.COLOR_GRAY2BGR) image, contours, hier = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: epsilon = 0.01 * cv2.arcLength(cnt,True) approx = cv2.approxPolyDP(cnt,epsilon,True) hull = cv2.convexHull(cnt) cv2.drawContours(black, [cnt], -1, (0, 255, 0), 2) cv2.drawContours(black, [approx], -1, (255, 255, 0), 2) cv2.drawContours(black, [hull], -1, (0, 0, 255), 2) cv2.imshow("hull", black) cv2.waitKey() cv2.destroyAllWindows()

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册