首页
关于
留言
推荐
在线音乐
音乐搜索
VIP视频解析
Search
1
阿蓝 麦序机器人介绍
519 阅读
2
鲸鱼配音配置教程
140 阅读
3
小陪伴配置教程
122 阅读
4
PP约玩助手教程
99 阅读
5
全网助手介绍
35 阅读
Come on!
网站搭建
技术分享
代码填坑
学习
三支一扶
django开发
树莓派
QQ机器人
ad18
stm32
宠物医疗运营
python-flask学习
python面试
SpringBoot
工具箱
默认分类
Ubuntu
Arduino
机器学习
登录
Search
标签搜索
Linux
typecho插件
QQ机器人
Mirai
机器人
搭建
python
go-cqhttp
python报错
flask
开始肝
梯子
vpn
翻墙
搭建教程
三支一扶
bot
环境搭建
建站
测速
Raspberry Pi
累计撰写
131
篇文章
累计收到
7
条评论
首页
栏目
Come on!
网站搭建
技术分享
代码填坑
学习
三支一扶
django开发
树莓派
QQ机器人
ad18
stm32
宠物医疗运营
python-flask学习
python面试
SpringBoot
工具箱
默认分类
Ubuntu
Arduino
机器学习
页面
关于
留言
推荐
在线音乐
音乐搜索
VIP视频解析
搜索到
35
篇与
技术分享
的结果
2023-03-25
将Flask项目打包成Win10可执行文件
打包Flask项目优点就是源码隐藏,只给出一个文件,传输起来方便缺点就是每次更新,都需要传文件,而且项目越大,打包的文件大小就越大配置可部署的Flask项目采用的方案是waitress + nginx的方式测试了waitress与gevent的差别在相同的命令: ab -n 1000 -c 100 http://127.0.0.1:5000测试下gevent的per second处理速度在Requests per second: 244.87 #/secwaitresst的per second处理速度在Requests per second: 406.26 #/sec将近一倍的差距首先将项目测试好,目录如图waitress_server.pyfrom waitress import serve from ginger import app # Replace "my_flask_app" with the name of your Flask app if __name__ == '__main__': print("Server Running...") serve(app, host='0.0.0.0', port=5000)将app导入进来,然后放到main里面配置好打包的spec# -*- mode: python ; coding: utf-8 -*- block_cipher = None # 可以将需要的文件夹,资源这样添加进包里 # 资源文件、代码需要打包一起的 added_files = [ ('D:/Code/Flask_api-main/venv/Lib', 'Libs' ), ('D:/Code/Flask_api-main/venv/Scripts', 'Script' ) ] a = Analysis( # 程序的主文件 ['waitress_server.py'], # 整个项目的路径,注意转义字符 pathex=['D:/Code/Flask_api-main'], binaries=[], # 可以放added_files静态文件等数据 datas=[], # 出现模板找不到,用隐式导入 hiddenimports=['pymssql', 'app.config.setting', 'app.config.secure'], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='flask_api', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )执行打包命令pyinstaller .\flask_api.specNginx的配置下载官网下载一个版本的nginx压缩包,解压,管理员命令提示符ngnix.exe 执行ngnix.exe -s reload重新加载配置文件nginx.conf 文件部分修改端口转发如访问8080转发到本地的 5000端口参考文档https://blog.51cto.com/fish/5849155
2023年03月25日
1 阅读
0 评论
0 点赞
2021-10-27
记一次网课自动答题脚本
背景最近,公司突然要我们学习孔孟的“修身、治国、平天下”之道,上架了一堆网课视频,不就是刷网课吗,我熟啊,这不,分分钟就破了网课暂停限制,怎奈还需要考试,也就是判断、选择填空,懒劲一犯,立马搞个脚本出来分析实现脚本不难,考试次数不限制,而且答案考完会直接放出来。抓住这一点,很快啊,思路就有了交白卷=>获取答案=>再次作答但是,这样是不是太low了,怎么也得交白卷=>获取答案=>上传服务器=>写入数据库=>做成api=>访问接口=>填入答案=>完成作答但是,公司电脑只能访问内网,我的服务器他们也拿不到数据。。。就按low点的来把步骤step1:交白卷// 交白卷 var submit = function() { // 获取提交按钮 document.getElementsByClassName("btn-success")[0].click(); document.getElementsByClassName("layui-layer-btn0")[0].click(); } submit()step2:获取答案var getAnswer = function(arr) { let answerJson = [] // 很久没写js了,for in 循环居然忘了,该补补了 for(let i=0;i<arr.length;i++) { let question = arr[i].getElementsByTagName("h3")[0].textContent let answer = arr[i].getElementsByClassName("answer")[0].getElementsByTagName("strong")[0].textContent let json_data = { "question": question.substring(2), "answer": answer } answerJson.push(json_data) } return answerJson } var aim = getAnswer(document.getElementsByClassName("question_warp")) window.localStorage.setItem("test_json", JSON.stringify(aim)); document.getElementsByClassName("btn-success btn-block")[0].click();step3:再次作答var test_json = JSON.parse(window.localStorage.getItem("test_json")) console.log(test_json) var chooseAnswer = function(item, answer) { let selects = item.getElementsByClassName("option_list")[0].getElementsByTagName("label") for(let i=0;i<selects.length;i++) { if(selects[i].innerText.indexOf(answer) != -1) { selects[i].click() } } } var submit = function() { document.getElementsByClassName("btn-success")[0].click(); document.getElementsByClassName("layui-layer-btn0")[0].click(); } var toAnswer = function(arr, answers) { for(let i=0;i<arr.length;i++) { let question = arr[i].getElementsByTagName("h3")[0].textContent for(let j=0;j<answers.length;j++) { if(question.indexOf(answers[j].question) != -1) { console.log(answers[j].answer) chooseAnswer(arr[i], answers[j].answer) } } } } toAnswer(document.getElementsByClassName("question_warp"), test_json) // 如果有多选题,把提交函数屏蔽掉,蒙一下把 submit()注意事项:本脚本作答可能需要耗费第两次机会,也就是第一次作答0分本来只想做判断题的,没想到选择题也适用,哈哈哈,但是多选题还没兼容如发现其它Bugger,contact me!ws发育,别浪!
2021年10月27日
5 阅读
0 评论
0 点赞
2021-10-16
pycharm自动延长到期时间
背景由于新装pycharm的原因,有30days的试用期,虽然还没到期,但是看着就是不爽,遂hack原理看到网上的相关资料,都是说用破解工具,hack,但是好像会破坏内部文件,导致ip可能被检测的风险,而且很多垃圾网站就是为了引流,恶心,所以,我找到另一种办法,不断延长到期时间资料https://github.com/osvax/ide-eval-resettergithub上最原始的资料,干净,纯洁!使用方法拖到编程窗口,"reset"即可!一秒钟破解!!!
2021年10月16日
0 阅读
0 评论
0 点赞
2021-10-15
python自动化 xlrd and xlutils使用
背景由于每天都得提交日常工作任务表,但是改动不大,就是改一改时间工时等,遂使用python自动生成,但是之前找过相关的excel库,没有找到合适的,我的主观期望是能够类似于按照坐标的方式获取数据,编辑数据,终于,我找到的xlrd库配合 xlutils.copy函数编辑数据,成功实现自动生成每日数据思路和其它依赖包类似,整体不难,主要是需要熟悉库的api,大体流程就是获取文件对象->获取sheet表->根据坐标获取数据.编辑数据->保存数据简单xlrd库的使用def test(): excel_path = "/home/jian/Desktop/SWS_Template_V0.24 -GZJ.xlsx" # 打开文件 data = xlrd.open_workbook(excel_path) # 根据序号获取sheet表 # table = data.sheets()[0] # 或者根据sheet表名称获取 sheet_name = "SWS" table = data.sheet_by_name(sheet_name) # 通过名称获取 # 或者反过来获取名称 names = data.sheet_names() # 获取excel的行数或者列数 nrows = table.nrows # 获取该sheet中的有效行数 ncols = table.ncols # 获取列表的有效列数 rowx = 0 colx = 6 # 返回单元格的对象 cell = table.cell(rowx, colx) # 返回单元格对象 # 返回单元格的数值 cell_value = table.cell_value(rowx, colx) # 返回单元格中的数据 # 这里开始是编辑数据,copy函数,获取可编辑的对象 new_workbook = copy(data) # 同样需要获取sheet表 new_sheet = new_workbook.get_sheet(1) # write函数编辑,参数: 行坐标,列坐标,值 new_sheet.write(rowx, colx, 50) # !important 记得保存 new_workbook.save(excel_path) print(table.cell_value(rowx, colx)) for i in range(16): print(i) print(table.cell_value(rowx, i)) print(table.cell_value(rowx + 1, i)) json_data = {i: table.cell_value(rowx + 1, i) for i in range(16)} print(json_data)掌握这些api,基本可以实现自动化获取编辑简单的数据
2021年10月15日
1 阅读
0 评论
0 点赞
2021-09-02
想不想搭建一个网页简历?
背景之前看到我的就业推荐表,有人说,这个推荐表太随意了,嗯,我打开手机看了看,就一个excel一样, ::(小乖) 确实很随意,所以嘛,为了体现我高超的技术,遂到GitHub上搞了一个模板,弄一个在线简历,岂不是很强,说干就干!GitHub上一搜找到这位大佬的模板,star还蛮多,https://github.com/gwuhaolin/resume看了看markdown,说实话不是很懂,没怎么用过GitHub的自动部署,git那东西只会clone,push等,复杂一点的得查了,但是Github Action这玩意我真不会,我根据他描述的clone、push、modify然后卡四了,后面不会了,但是本地可以跑起来终极解决-搭在自己服务器上虽说GitHub确实很稳,其实这东西搭在github上才是上策,奈何我不会Github Action,算了,反正也不是什么难事,搭建 node 环境,好在有 宝塔这个工具,直接下载pm2搭建环境直接上shell,打开一个screen上传代码,npm i 下载依赖然后跑起来,但是默认是跑在localhost本地的,要让外网访问就得改成 0.0.0.0在package.json中配置启动脚本,webpack-dev-server --open --host 0.0.0.0报错 Invalid Host header,查阅资料,显示是 webpack的自我保护机制把,解决就是启动时候加个参数webpack-dev-server --open --host 0.0.0.0 --disableHostCheck=true好了,可以访问,但是,域名加端口号,是不是有点奇怪???利用nginx反向代理,将访问到的域名拦截,转发到本地域名端口,从而隐藏ip+端口nginx配置信息,server { listen 80; server_name resume.xxx.xyz; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://xxx:8080/; } }注意放的位置要在最后一个}里面不然保存不了,重启难办在域名管理那里加上解析,注意网站不要重复添加,不然ngnix会爆重复定义的错可以愉快的访问了完结不懂评论!
2021年09月02日
4 阅读
0 评论
0 点赞
1
2
...
7
0:00