基于FastAPI实现短链重定向(1) -设计

前言

对于深受广大开发者喜爱的FastAPI框架,我在此之前已经投入学习并实践了一段时日。随着掌握深入,我利用此框架改造并提升了原先的代码覆盖率统计服务。然而,为了能进一步掌握并熟练运用该框架,我总是心怀一种想要着手完成更多练习项目的强烈欲望。近日,无意间获得了这样一份颇具挑战性的训练机会,那便是在公司业务推广中采用以短信形式向客户传递推广信息,同时为此需在短信中加入特定的推广链接。阿里云提供的短信服务规定了短信最大长度为500字符,因此对过长过细的网址进行简化转变无疑是非常必要的。以此项目为契机,我会倾尽全力,参照业内在实际开发中的典型思维模式,充分利用FastAPI框架来进行实践,力求通过此次锻炼,更熟练地掌握这一优秀的编程框架。

需求分析

关键需求: 短链重定向

附加需求: 记录点击链接的次数、依据不同渠道批量生成短链内容、构建短链用以验证用户身份及权限

技术实施

我们选用基于SQLite 3数据库以存储短链信息,同时利用SQLAlchemy进行异步的数据交换。

表格设计

此需求相对简单明了,为了满足现有需求,我们初步拟定设计以下表格:分别称之为用户信息表(user)和短链信息表(short_url)。这两大表便构成我们实现需求所需的全部基础要素。

user表用于存储用户登录详情,其中包括如下字段:

  • username:表示用户名;
  • password:为用户设置的密码;
  • created_at:存储用户添加账号的日期;

而short_url表则包括如下元素:

  • short_tag:代表短链的标签标记;
  • short_url:将完整的短链地址汇聚其中;
  • long_url:存储指向实际页面的长链地址;
  • visits_count:记录短链被访问的总次数;
  • created_at:记录短链生成的具体时刻;
  • created_by:描述短链出自哪位用户之手所构造;
  • msg_context:展示短链中所包含的群发信息细节。

项目结构设计

FastAPI官方为有意于学习或上手的战友们提供了许多具有指导意义的demo资源。若您对此饶有兴致,不妨前往查阅:github.com/tiangolo/fu...

参考上述公开资料以及其他知名开源项目的设计理念,经过慎重考虑后,我决定将项目整体架构设计成如下格局:

  • api:主要放置已然编译好的API,其中包括用户登陆以及短链访问跳转入驻等关键路由信息。
  • config:主要储存设定信息,囊括数据库连接配置诸如此类的必要资讯。
  • db:主要储存定义与数据库便捷建立关联关联的相关配置以及与之紧密相连的非腹腔化对象实例。
  • dependencies:专用来妥善保管相关的依赖注入依赖项。
  • models:概括性地抽象出数据库表格中映射的ORM模型类。
  • schemas:墙纸如何展现各个接口的入站参数集、结束输出集的各个字段类型的固定含义。
  • services:集中存放按照ORM模型类精炼好的CRUD基本操作。
  • utils:容纳了项目期间实际运用到的各类实用工法类。
  • app.py:用于精确定制FastAPI的对象属性以及与初始化相关的路由注册操作流程。
  • main.py:真正见证了应用程序启动的核心入口文件。

后续展望

遵照所需,我们已完成初步方案,包括精确设定数据库和分布项目等环节。现正全力以赴实现各功能特性。尽管不可避免地会遭遇全新领域的挑战,但请放心,届时我们将适时发布相关文章提供深入解读与说明。

敬请期待:下一期会详尽介绍数据库与模型定义的基础设置,诚挚邀请志同道合者继续关注此专栏,并为其点赞及收藏支持,谢谢啦。

相关推荐
码界奇点8 分钟前
基于Spring Boot和Vue.js的视频点播管理系统设计与实现
java·vue.js·spring boot·后端·spring·毕业设计·源代码管理
程序员根根9 分钟前
MySQL 事务全解析:从 ACID 特性到实战落地(部门 - 员工场景)
数据库·后端
智航GIS10 分钟前
ArcGIS大师之路500技---048计算流水号
python·arcgis
yongche_shi12 分钟前
第九十九篇:Python在其他领域的应用:游戏开发、物联网、AIoT简介
开发语言·python·物联网·游戏开发·aiot
回家路上绕了弯19 分钟前
分布式事务本地消息表详解:中小团队的低侵入落地方案
分布式·后端
武子康20 分钟前
大数据-196 scikit-learn KNN 实战:KNeighborsClassifier、kneighbors 与学习曲线选最优 案例1红酒 案例2乳腺
大数据·后端·机器学习
技术工小李28 分钟前
大屏平板签到,为格恩半导体会议注入高效新体验
python
kobe_OKOK_30 分钟前
Django缓存接口数据
python·缓存·django
昔时扬尘处31 分钟前
【题外话】台式机配件选型与组装流程
python·电脑·台式机
小鸡吃米…32 分钟前
带 Python 的人工智能——神经网络
人工智能·python·神经网络