写一个资源共享服务 - 01.我们的目标和一些必要的说明
需要解决的问题
我们总是有一些在电脑和手机之间共享某些资源的需求, 一段文本或者一个文件。
当然现有的工具也能很好的完成我们的需求, 比如最简单方便的qq微信, 或者其他更专业强大的工具软件和类库框架等。
但是作为爱折腾的我们肯定希望用上自己亲手实现的工具, 而且我们在自己的一亩三分地上想怎么玩就怎么玩, 不会受到任何限制。
事情刚开始的时候我们可以降低我们的需求, 这里不考虑安全问题, 没有身份验证; 对用户输入无任何额外的处理,
如果你打算让其他人也使用你的共享服务, 那么我们要处理的问题就比较多了, 比如最基本的安全问题, 需要一个用户账号系统; 需要防范潜在的恶意破坏。 还要一个用户共享权限, 比如一个文件除了他的所有者; 还有哪些用户有何种程度的权限。
关于这些我们暂时不考虑, 只要解决核心需求就可以了。
我们实现命令行界面; Windows图形用户界面和web界面, 手机客户端暂不考虑, 到目前为止本人完全不会折腾手机程序, 哈哈哈, 如果哪位童鞋有时间欢迎编写手机客户端的实现部分。
后台服务用python的flask框架; 数据存储用sqlite3; GUI部分用wxpython; web部分那肯定是html+js了!
所以大家还需要一定的python和js的基础。
关于数据存储
其实数据存储有其他更加丰富的方案, 像mysql; 或者mongoDB这些相对主流的解决方案都可以随意选用, 但是我喜欢sqlite3的超级简单, 当然如果你觉得sqlite3过于简陋可以选择其他任何数据存储方案。
文章给我们一个参照, 具体实现完全可以从自身实际出发; 按照自己喜好行驶!
后台提供一个通用的数据存储接口, 完全不关心数据存储的具体来源, 可以是mysql; 可以是mongoDB; 也可以是文件系统, 这样我们的后台可以任意改变数据存储方案了。
总而言之, 我们的共享服务实现一个分而治之的目的, 牵一发而动全身的结果是我们锁不希望看到的。
定义资源模型
我们的模型特别简单, 一个资源有如下几个字段:
id 自动产生 唯一标记资源
description 不可留空, 一个简短的描述, 比如, 某人的联系方式; 某个网站的URL, 某个文件的名称等等
content 不可留空, 具体内容, 通常是一段二进制数据,
type 不可留空, 资源类型, 文件或者文本
invalid 1有效, 0无效, 通常来说把用户删除的内容标记为0, 这些被标记为0的资源需要在合适的时候清理,
datetime 一个int64类型的整数记录资源的时间戳
定义好了资源的模型后剩下的就是对这些资源的存取; 展示和传递了。
创建项目
我们这次用poetry来管理我们的项目, 在一个合适的位置输入如下命令创建一个poetry项目:
D:\Src\python>poetry new reshub |
我们的服务就叫资源枢纽吧, 英文名称叫reshub, resource hub!
而后我们打开编辑pyproject.toml文件, 如下是我这边的配置, 大家根据需要修改就可以了:
[tool.poetry] |
这里你可以按照自己的喜好来修改name; description; version和authors , 需要注意的是name最好用英文; version使用语义化版本, authors从你的git配置里获取你的用户名和邮箱地址。
tool.poetry.source是后来加进去的, 是当前项目的依赖项网络元。
其余的文件夹和文件可以随意处理, 删除也行, 改名做其他用途也可以。
到此为止我们的项目已经创建好了, 接下来就是编码实现了。
首先激活我们的poetry虚拟环境:
D:\Src\python>cd reshub |
输出也许和我这边不太一样, 只要不报错就说明已经进入了虚拟环境, 接下来我们所有工作都在这个虚拟环境下进行, 为了不混淆, 建议暂时删除全局的flask; wxpython; requests这些模块。
当然如果你始终确定永远在虚拟环境下工作, 也完全可以保留全局任何模块。
总之虚拟环境的提示符和Windows命令提示符相同是一个不小的隐患!
反正我从poetry帮助里既没看到如何检测当前虚拟环境是否激活, 也没看到poetry虚拟环境提示符配置项, 或者调试的时候干脆不用激活虚拟环境了, 直接用poetry run。
总之调试的时候需要格外注意你的项目在什么环境下运行, 是全局环境或者当前项目的虚拟环境。
行了, 这次到此为止做个总结。
总结
第一篇我们明确了需求, 定义了资源模型, 创建了项目。
额外注意调试程序的时候留意项目运行在何种环境, 确保项目始终运行在当前虚拟环境下。
下次我们解决数据存取问题, 未完待续……