大家好,我有一个 Python web 项目需要在近期重构。
对我来说我的需求主要有两点,其一是我需要后端有较高的可用性,所以我必须要使用异步特性,其二是由于我与后端数据库交互中有很多涉及高级特性的操作,并不适合使用 ORM,大多数情况下需要直接写 SQL 。所以这几天在论坛里收集信息之后决定使用 FastAPI 这个框架。
我原先的项目是使用 aiohttp 构建的,基本上属于毛坯房中的毛坯房,涉及到参数读取、权限、数据库操作等各方面都需要自行配置。因为在同步时代也是使用 flask,这方面倒是没有给我造成太多困扰。根据以往的经验,项目中通常要配置大段的业务代码实现对输入参数的可靠读取,以及发生错误时返回完善的异常信息,而 fastapi 在这方面的自动化确实是很吸引人。
我在粗略通读 fastapi 的文档后,觉得还是需要来 v2 问一下使用过的大佬的经验,以免走弯路。再加上本着学习一门新工具的态度,我觉得还是要先问一下,不适合直接把以前的做法往上面套。
===============
我目前的问题是以下几点:
1 、我需要开发一个 SPA 网页项目,即引擎需要进行 html/js/css 的服务,同时使用 API,而不单纯是一个 API 接口,这似乎与这个框架的设计初衷不符,所以产生了两个问题。
其一是在文件服务的部分,我在粗读文档的过程中没有找到比较完善的项目模块化配置信息,也就是各种静态文件应该如何妥善安排结构、模板,并妥善地提供服务等等,我想知道 fastapi 是不是不适合做这方面的操作,有没有过去使用中遇到坑的朋友。
其二是在接口方面,fastapi 有完善的支持,并且能自动生成文档,但其中一些特性是我不需要的。举例来说,自动文档功能不是我所需要的,在大多数时候我不想暴露接口的详细信息,只需要在错误时返回可供 debug 的异常信息即可,对于如何关闭文档功能这方面,我在粗读 fastapi 文档时没有找到太多信息。
2 、关于权限系统,在接口的参数读取方面,fastapi 的文档中的说明令人欣喜,可以让我摆脱大段的业务代码维护可靠读取和可靠异常返回,但是关于权限我并未在文档中获取到太多信息。我目前的项目有一套依赖于 jwt 的权限认证,我想知道 fastapi 在这方面有没有集成,比如像 django 那样的有一套完善权限解决方案,还是我仍需要像以前一样自己实现一套权限系统。
3 、FastAPI 完全支持 OpenAPI, 但是我个人对这个标准不是十分熟悉,我想知道使用,或者不使用 openapi 这套规范是否会对我的项目产生什么影响?
4 、后端服务的连接方面有一些问题,如上文所述我需要在项目中直接连接关系型数据库,以及 redis 缓存服务器,在以往的框架使用经验中我需要自行配置这些客户端。但是由于 fastapi 同时需要使用另一个我没接触过的引擎 uvicorn 进行服务,我不太了解这个引擎的规则,例如通常我们在一个业务节点中(比如单台服务器)通常 prefork 出多个监听进程来利用 CPU 的多核心,我想知道 fastapi 里通用的配置规范是什么,哪些代码在 fork 前执行,哪些代码在 fork 之后,因为涉及交互,以及 logging 相关的操作,我希望节点能最大限度地公用连接。
比如 log 操作当中,多节点共同对一个文件写入日志,单纯写入并没有什么问题,但遇到日志过长,需要滚动的情况,fastapi 应该如何处理,让 logging 系统可以正常地清空不需要的内容?
5 、我目前的需求是,尽快地将项目的模块化配置好,然后实现一套完整的路由映射、权限管理、之后能让我比较快地进入到业务代码的开发(如同使用所有其他项目一样),由于业务代码逻辑复杂且繁重,工期还需要尽量快,这也是我使用 python 作为开发语言的原因,我想问一下有没有什么网上有的比较好的教学可以帮助我。
谢谢大家。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.