python安装及写一个简单的验证码组件(配合node)
1.安装Python
到官网下载响应系统的版本(这里以windows为例):https://www.python.org/downloads/windows/

然后就是不断地“下一步”
2.运行
要想node那样可以在命令行运行,要首先配置好系统的全局环境变量:
win10为例:“此电脑”--->“属性”--->“高级系统设置”--->“高级”下的“环境变量”--->找到“path”--->添加两个变量(python的安装目录和这个目录下的Scripts)
打开cmd,打python就可以运行了,同时python包管理器pip也可以运行了
3.开发验证码组件
先下载pillow库:
pip install pillow
photo.py:
# 引入pillow库
from PIL import Image,ImageDraw,ImageFont
# 引入randint用于生成随机int
from random import randint
# 引入sys
import sys w = int(sys.argv[1])
h = int(sys.argv[2])
fs = int(sys.argv[3])
s = sys.argv[4] # 用PIL的Image创建画布(颜色模式,(宽,高),(颜色对应最大取值))
img = Image.new('RGB',(w,h),(255,255,255)) # 用PIL的ImageDraw创建画笔gd
gd = ImageDraw.Draw(img) # 循环把文字输出
for i in range(len(s)):
# for下面记得缩进,不然报错
# 画文字
gd.text(
# 起始坐标点
(i*w/len(s)+randint(8,15),(h-fs)/2+randint(-5,5)),
# 要画的文字
s[i],
# 颜色
(randint(0,255),randint(0,255),randint(0,255)),
# 字体
ImageFont.truetype("C:\\Windows\\Fonts\\BuxtonSketch.ttf",fs)
) for i in range(20):
# for下面记得缩进,不然报错
# 画线
gd.line(
# 起点和终点 坐标点
(randint(0,w),randint(0,h),randint(0,w),randint(0,h)),
# 颜色
(randint(0,255),randint(0,255),randint(0,255)),
# 线宽度
1
) for i in range(int(w*h/200)):
# for下面记得缩进,不然报错
# 画点
gd.point(
# 坐标
(randint(0,w),randint(0,h)),
# 颜色
(randint(0,255),randint(0,255),randint(0,255))
) # 保存图片
img.save('1.png','PNG')
运行命令如:
python photo.py sdfs
就会生成 宽高200,100 字体50 内容为“sdfs”的验证码
4.配合node使用
const koa = require('koa')
const koaRouter = require('koa-router')
const cp = require('child_process')
const fs = require('fs')
const static = require('koa-static')
const server = new koa()
server.listen(8088)
const r = new koaRouter()
server.use(r.routes())
r.get('/verify_code', async ctx => {
let {w,h,fs} = ctx.query
w = w ? w : 200
h = h ? h : 100
fs = fs ? fs : 50
let seeds = 'abcdefghijklimnopqrstuvwxyzABCDEFGHIJKLMNOPQRST2345678'
let arr = []
for(let i=0;i<5;i++) {
arr.push(seeds[parseInt(seeds.length*Math.random())])
}
let data = await newVerify(w,h,fs,arr.join('')).catch(e=>{})
ctx.body = data
})
function newVerify(w,h,fontSize,str) {
return new Promise(async (resolve,reject)=> {
cp.exec(`python photo.py ${w} ${h} ${fontSize} ${str}`, err => {
if(err) {
reject()
}
fs.readFile('./1.png', (err, data) => {
if(err) {
reject()
} else {
resolve(data)
}
})
})
})
}
server.use(static('./www'))
python安装及写一个简单的验证码组件(配合node)的更多相关文章
- 手写一个简单的starter组件
spring-boot中有很多第三方包,都封装成starter组件,在maven中引用后,启动springBoot项目时会自动装配到spring ioc容器中. 思考: 为什么我们springBoot ...
- Python使用Socket写一个简单聊天程序
b2b模式的聊天工具 服务端: # 链接 while True: print('等待连接...') sock,adr = server_socket.accept() while True: try: ...
- Flask学习之旅--用 Python + Flask 制作一个简单的验证码系统
一.写在前面 现在无论大大小小的网站,基本上都会使用验证码,登录的时候要验证,下载的时候要验证,而使用的验证码也从那些简简单单的字符图形验证码“进化”成了需要进行图文识别的验证码.需要拖动滑块的滑动验 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 用node.js从零开始去写一个简单的爬虫
如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始去写一个简单的爬虫,十分钟时间就能搞定, ...
- 如何写一个简单的shell
如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...
- express 写一个简单的web app
之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...
- 用C写一个简单的推箱子游戏(二)
下面接着上一篇随笔<用C写一个简单的推箱子游戏(一)>来写 tuidong()函数是用来判断游戏人物前方情况的函数,是推箱子游戏中非常重要的一个函数,下面从它开始继续介绍推箱子的小程序怎么 ...
- 动手写一个简单的Web框架(HelloWorld的实现)
动手写一个简单的Web框架(HelloWorld的实现) 关于python的wsgi问题可以看这篇博客 我就不具体阐述了,简单来说,wsgi标准需要我们提供一个可以被调用的python程序,可以实函数 ...
随机推荐
- Liunx2:Liunx目录结构
Liunx目录图 进入根目录,使用ll命令看一下Liunx整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Liunx以树的结构组织所有目录,用一张图表示一下Liunx ...
- Mysql遇到 is marked as crashed and should be repaired 问题解决方法
遇到 找到mysql的安装目录的bin/myisamchk工具,在命令行中输入: myisamchk -c -r /var/lib/mysql/ambari/alert_current.MYI 问题解 ...
- 完整的站内搜索实战应用(Lucene.Net+盘古分词)
首先自问自答几个问题,以让各位看官了解写此文的目的 什么是站内搜索?与一般搜索的区别? 多网站都有搜索功能,很多都是用SQL语句的Like实现的,但是Like无法做到模糊匹配(例如我搜索". ...
- emacs在windows下打开报错原因
最开始实在是想不通,最开始我明明就能正常使用,后来发现不能用了,过了几天才回过神来,我路径中有中文,换了一个没有中文的路径后打开正常了.太低级的错误了嘛,却那么难发现. 这些数字就是识别不出来我的中文 ...
- Ubuntu开启远程连接
Ubuntu开启远程连接 author:headsen chen 2017-10-13 09:47:38 个人原创,严禁转载,违者追究法律责任: apt-get update apt-get ...
- 数据库入门之运行原始 SQL 查找
数据库入门之运行原始 SQL 查找 一旦你设置好了数据库连接,就可以使用 DB facade 来进行查找.DB facade 提供每个类型的查找方法:select.update.insert.dele ...
- web SPA项目目录、命名规范
项目结构:├── build ├── docs ├── package.json ├── src │ ├── components │ │ ├── List │ │ │ ├── index.js │ ...
- async generator promise异步方案实际运用
es7 async方案 /******************async***********************/ var timeFn=function(time){ return new P ...
- CentOS7.2下Nginx的使用
Nginx的启动 指定配置文件的方式启动 nginx -c /etc/nginx/nginx.conf 对于yum安装的nginx,使用systemctl命令启动 systemctl start ng ...
- 关于Maven的配置与学习
1. 简介 官方说法:Apache Maven is a software project management and comprehension tool. Based on the concep ...