吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7517|回复: 36
收起左侧

[原创] 基于python的flask应用实践

  [复制链接]
jidesheng6 发表于 2019-12-5 19:45
前言

前段时间写了一个皮皮虾无水印解析的帖子,但是想了想局限性太大了,因为是用python写出来的,就算编译成EXE文件,现在大多数人都是用手机,做APP么,也不会,更不用提IOS的APP了,突然想到在IOS上有捷径,于是就有了以下的想法:自己做一个网页的API,在后面跟上特定的参数实现无水印解析,前面校验链接的事情交给捷径,后面获取数据主要用API来完成,于是就想到了Python的Flask框架,简单说下Flask框架是什么:大致我们就可看成是一个集成了web服务器的应用程序,通过规定的语法,让我们用平时只能在有python环境的机器上运行的结果,能在网页上做出来,我说的有点乱,大概意思就是用python来做一个简易的网站(我这里做的是一个简单的API)。


0x01:准备工作



家里有一台吃灰的树莓派,就打算在这上面搭建这个API服务了,如果自己有合适的服务器的也可以根据实际情况进行部署,配置这服务器的过程特别繁琐我就挑几个点讲一下:如果是linux的系统最好开启SSH登录,配置文件在/etc/ssh/sshd_config下,记住要安装pip和python环境,因为我装的镜像是buster,几乎就是最小的安装包了,连vim我都是自己装的,其次准备nginx,用来配置反向代{过}{滤}理,让机器的80端口和flask➕gunicorn部署的服务通过nginx来进行代{过}{滤}理,最后就是要准备flask和gunicorn了,前一个用pip安装后一个用apt安装就可以了,nginx也是用apt安装,准备工作就这些,细节后面我会再提到。

0x02:实践开发


因为是要准备一个api,所以前面判断是不是特定链接交给捷径来完成。
首先要熟悉flask的文档:http://docs.jinkan.org/docs/flask/
image.png
从上面可以看到官方给的最小的例子就是一个主页面,所以自己可以先写一个试试看(flask中可以用requests等模块,注意其只能返回str dict tuple 等类型信息 如果是Unicode或者response信息就会出现报错)

首先我们先去写一个函数,就是皮皮虾的无水印解析函数,让他对传入来的链接进行分析最后给出下载链接
image.png
第一句话中WApplication里面传入的__name__是必须的,后面的static_url_path=""参数的意思是,当在当前页面中需要引用某些文件会从当前目录下的static目录中去寻找,而且static是作为资源根目录来使用的,也就是说加上了这个参数就不需要写上完整路径了,比如<audio src="111.mp3"></audio>,如果不加那个参数就要把路径写完整,类似static/111.mp3。


然后我们可以看到这段代码,设置路由,比如我的内网IP是192.168.3.51,这段代码意思就是,当用户访问了192.168.3.51的时候,就会开始获取其中的get请求里面的url参数,如果没有url参数的话会返回最下面的一个简单主页,其他错误代码意思是啥我忘记了,总之如果url传入正确,便会返回无水印解析的结果。
image.png

接下来考虑到用户有时候会访问一个不存在的页面 比如/xxx,这个页面我是没有定义的,这时候页面便会反馈错误,所以加入一个处理404错误的函数,如果发生了404错误,那么在3秒后返回主页面

image.png

最后一个路由是自己写的一个html文件,用其函数渲染,如果细讲实在是很麻烦,所以建议去看flask官方文档,我只是做一个简单的流程和思路
image.png

image.png


大致结构:
image.png

这时候我们用python直接运行可以在本地实现调试,但是这不适于正式投入使用,所以接下来要部署,然后正式发布出去。


0x03:部署

个人综合比较下来觉得还是nginx+flask+gunicorn实现部署是最简单,快捷的方式了
首先写好flask应用之后,来配置nginx

cd /etc/nginx/conf.d/
vim default.conf
写入以下内容:
image.png

server_name那里填入自己的域名或者内网和公网ip,用空格分开
最后
systemctl restart nginx
这样就算配置好了
然后用gunciron来开启服务
image.png
-w参数表示几条线程运行这个服务
-b表示绑定的地址 这里要和在nginx中的proxy_pass值一致
最后Webmain表示文件名称
WApplication表示在文件中实例化flask的名称


可以配合screen来一起使用

最后需要让公网也可以访问了 这里根据大家实际情况 因为我家路由器自带NAT转发
所以需要配置的有两个 把内网的80端口映射到公网的5000端口上去(因为封了所有带80的端口)
image.png
把22端口也映射出去,方便远程管理(大家在这里可以试着用网络唤醒结合,快要到家的时候把电脑远程启动,我目前就是这么做的)
image.png

我把代码也给大家看一下吧(MAC代表自己电脑的MAC,把-去除拼在一起就可以了):
[Python] 纯文本查看 复制代码
import socket,binascii
mac = "3085A9997334"
magic_data = 'FF'*6 + mac *16
send_data = binascii.unhexlify(magic_data)
address='255.255.255.255'
port=9
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,1)
s.sendto(send_data,(address,port))
print("send success")




实在是不会排版大家将就看吧,还请大佬手下留情,我还在努力,目前还很菜,不要喷我,感谢。
image.png

免费评分

参与人数 17吾爱币 +20 热心值 +13 收起 理由
Hmily + 6 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
qaz007 + 1 + 1 用心讨论,共获提升!
苍穹之光 + 1 + 1 谢谢@Thanks!
wintenrsun + 1 用心讨论,共获提升!
人车聿 + 1 + 1 热心回复!
hanshalinfeng + 1 谢谢@Thanks!
lishixin23 + 1 + 1 此为违规行为,请遵守论坛版规!
960064995 + 1 + 1 先评分再看
zhiyuanzhai + 1 用心讨论,共获提升!
ma4907758 + 1 + 1 我很赞同!
2Burhero + 1 谢谢@Thanks!
忘了世界的人 + 1 + 1 我很赞同!
17376777302 + 1 热心回复!
笙若 + 1 + 1 谢谢@Thanks!
13594611244 + 1 + 1 用心讨论,共获提升!
深渊莫冥 + 1 + 1 谢谢@Thanks!
Ly_轮回 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pangdong697 发表于 2019-12-7 13:55
jidesheng6 发表于 2019-12-6 11:48
uwsgi我当时也试过,我感觉还是gunicorn方便,效率高,uwsgi又要弄配置文件啥的,太麻烦了。。

uwsgi的效率比不上gunicorn,它只是flask自带的一个调试服务器,还是用gunicorn比较稳定点 搭配
 楼主| jidesheng6 发表于 2019-12-6 20:55
羽天狂龙 发表于 2019-12-6 12:22
用树莓派搭建的flask+gunicorn+nginx这套web服务,性能怎样,访问延迟高不高

因为我是api,没有做什么完整的,延迟不咋样,没什么感觉,大型项目我就不知道了,得看你部署的服务器性能如何
xunan007 发表于 2019-12-5 19:55
zzgaot 发表于 2019-12-5 20:05
今天开始学习flask ,膜拜大神。
白泽1994 发表于 2019-12-5 20:07
膜拜大神
AzZ丶咖灰 发表于 2019-12-5 20:15
考完研开始学,膜拜一下
729 发表于 2019-12-5 20:22
慢慢来啦,我也学习这flask 用的很多东西,可以学习更高级的语法装饰器什么的。自己也弄了一个博客 不过弄着弄着暂时没弄了,部署的话用的是ngnix+uwsgi
 楼主| jidesheng6 发表于 2019-12-5 20:35
729 发表于 2019-12-5 20:22
慢慢来啦,我也学习这flask 用的很多东西,可以学习更高级的语法装饰器什么的。自己也弄了一个博客 不过弄 ...

自从弄了这东西老感觉少了点什么
pp125109139 发表于 2019-12-5 20:36
谢谢分享~~
山园小梅 发表于 2019-12-5 20:51
感谢楼主的分享
xubo 发表于 2019-12-5 20:52
多谢分享  感谢感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-29 01:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表