请输入图片描述
写这篇文章其实是因为云函数火起来之后,我的小脚本也跟着慢慢开始从本地迁(bai)移(piao)上云了
不过有一个挺严重的问题,就是国内的XX云之类的都不支持存储的,而程序嘛,总少不了要存点中间数据以方便下次用的
官方解决方案的话要么开通数据库,要么就是redis,作为资深白嫖党,这简直太不巴适了,没办法,只能舍近求远,远程搞个服务来实现了

作为资深CV工程师,在开工之前肯定少不了看下有没有现成的轮子可用,然后去gayhub放狗搜了圈,结果还真有
也就是这玩意--> https://github.com/rhming/pythonanywhere
搭建步骤也很简单,照着【搭建.md】里面的教程一步步走很容易就搭起来了


搭建完后,打开页面是一个测试api的界面,还有个后台,里面可以管用户和key,整体来说比较简单,但是也够用了
请输入图片描述
请输入图片描述

然后翻了一圈,并没看到具体的API文档什么的,但毕竟是开源的嘛,于是乎扒了下源代码,很轻松就找到了
其实源代码也没几行,原理就是用python读写一个sqlite库,全局key是唯一的,value大小没看到限制,但毕竟是网络读写数据,一般value存个十几K就足够了


查询:GET https://xxx.pythonanywhere.com/?key=key
增:直接POST json到 https://xxx.pythonanywhere.com/ 或者在from参数携带

{
    "key": "key",
    "value": "test"
}

然后并没发现删除的API,在后台是有的,但传的是ID,估计作者没做,这个简单,改下代码就好
1.点击Files标签,在线编辑/home/用户名/DataStorage/views.py 文件
2.将update_or_create方法修改一下,直接用下面的代码覆盖,在CV的时候务必注意python语法的缩进
_del是我留的,因为我的业务不可能拿这个当value,有其他需要你可以自己改动
3.保存,重启应用即可

def update_or_create(self):
    model = self.Meta.model
    if "_del" == self.validated_data['value']:
        data_obj = model.objects.get(key=self.validated_data['key'])
        data_obj.delete()
        return "ok"
    else:
        instance, _ = model.objects.update_or_create(
            key=self.validated_data['key'],
            defaults=self.validated_data
        )
        return instance.to_dict()

删除:直接POST json到 https://xxx.pythonanywhere.com/ 或者在from参数携带

{
    "key": "key",
    "value": "_del"
}

这几个接口返回结果的格式都是一样的,直接封装就好

HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "msg": true,
    "data": {
        "key": "test",
        "createtime": "2022-02-17T15:47:21.836531Z",
        "updatetime": "2022-02-17T15:47:21.836573Z"
    },
    "extra": null
}

最后吐槽一下:
请输入图片描述
测试用了那么久这东西唯一的限制也就是那个python运行平台cpu时间和磁盘限制了
程序正常装完之后大概还有400多MB磁盘可以用,存那点中间数据问题不大
cpu时间的话,看你数据库和key的大小,我一天读写个万吧次100秒是够用的(哪怕用到100%了,程序也只是被限制速度了,而不是被禁用
平台需要定期续期签到的话,平台自带自动任务,作者也已经做了自动续期了,这个可以无视
免费的账户只有一个应用,这个简单,不就是开小号嘛,不过一个应用的资源也够用了
至于安全性,服务器自带https,api本身没认证,用的是http Basic简单认证方式,对于我一个内部用的安全性足够了
此外数据备份也简单,直接备份/home/用户名/DataStorage/db.sqlite3文件就足够了
唯一的缺点就是因为平台是外网的,对国内来说网络是有点不太友好,不过用了那么久,除了延迟有点高之外,其他的还没有什么,最主要是这玩意是免费的,既然免费要求那么多干嘛

最后希望这个服务能活久点吧