首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 这3个框架,能让你少写一半样板代码

Python 这3个框架,能让你少写一半样板代码

作者头像
用户11081884
发布2026-07-20 20:10:34
发布2026-07-20 20:10:34
260
举报

Python Web开发有个让人头疼的规律:不管什么项目,前期总要花大量时间配环境、搭脚手架、写和业务无关的基础代码。等这些都搞完,动力已经去了一半。

今天介绍三个框架,不是说它们“效率翻倍”这种虚话,而是这三个东西确实在各自的场景里能帮你少写很多重复代码:FastAPI适合写API、Django REST Framework适合企业级项目、Pynecone适合不想碰JavaScript的全栈场景。


FastAPI

FastAPI基于Python类型提示,用Pydantic做数据验证,Starlette处理Web层,原生支持异步。它最省事的地方在于:写完接口,/docs页面的交互式文档就自动生成了,不用单独维护。

安装:

代码语言:javascript
复制
pip install fastapi uvicorn

一个用户管理的基础示例:

代码语言:javascript
复制
fromfastapiimportFastAPI, HTTPException
frompydanticimportBaseModel
fromtypingimportOptional
fromdatetimeimportdatetime

app = FastAPI(title="用户管理系统")

classUser(BaseModel):
    id: int
    username: str
    email: str
    created_at: datetime = datetime.now()
    is_active: bool = True

users_db = []

@app.post("/users/", response_model=User)
asyncdefcreate_user(user: User):
    """创建新用户"""
    users_db.append(user)
    returnuser

@app.get("/users/{user_id}", response_model=User)
asyncdefread_user(user_id: int):
    """根据ID获取用户"""
    foruserinusers_db:
        ifuser.id == user_id:
            returnuser
    raiseHTTPException(status_code=404, detail="用户不存在")

@app.get("/users/", response_model=list[User])
asyncdeflist_users(active_only: bool = True):
    """列出用户列表"""
    ifactive_only:
        return [userforuserinusers_dbifuser.is_active]
    returnusers_db

if__name__ == "__main__":
    importuvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

跑起来之后访问 http://127.0.0.1:8000/docs,Swagger UI已经在那等着了,直接测接口不用另外写测试脚本。

适合的场景:需要高并发的API服务、微服务、对接文档要求高的项目。如果团队里没有专职后端、需要前端或数据工程师也能快速接入,FastAPI的自动文档很有用。


Django REST Framework

DRF建在Django上,提供了序列化、视图集、路由器、认证权限这一整套东西。代码量比FastAPI多,但覆盖的场景也更全——特别是已经在用Django的项目,接进去几乎没有额外成本。

安装:

代码语言:javascript
复制
pip install djangorestframework

一个商品管理的完整示例,从模型到路由:

代码语言:javascript
复制
# models.py
fromdjango.dbimportmodels

classProduct(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)

    def__str__(self):
        returnself.name

# serializers.py
fromrest_frameworkimportserializers
from .modelsimportProduct

classProductSerializer(serializers.ModelSerializer):
    classMeta:
        model = Product
        fields = ['id', 'name', 'description', 'price', 'stock', 'created_at']
        read_only_fields = ['created_at']

# views.py
fromrest_frameworkimportviewsets, permissions
from .modelsimportProduct
from .serializersimportProductSerializer

classProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    defperform_create(self, serializer):
        serializer.save()

# urls.py
fromdjango.urlsimportpath, include
fromrest_framework.routersimportDefaultRouter
from .viewsimportProductViewSet

router = DefaultRouter()
router.register(r'products', ProductViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
    path('api-auth/', include('rest_framework.urls')),
]

跑起来访问 http://127.0.0.1:8000/api/products/,GET/POST/PUT/PATCH/DELETE全部自动支持,还有可浏览的HTML界面方便调试。分页、过滤、搜索也内置好了,不用从头写。

适合的场景:已有Django项目、需要用户认证和权限管理、后台管理界面是刚需。如果是从零开始且不需要Django生态,FastAPI通常更轻量。


Pynecone

Pynecone(现已更名为Reflex)是个有点不一样的框架——前后端都用Python写,底层会把Python组件编译成React,不需要写任何JavaScript。

安装:

代码语言:javascript
复制
pip install pynecone

初始化项目:

代码语言:javascript
复制
pc init

一个带计数器和待办列表的小应用:

代码语言:javascript
复制
importpyneconeaspc

classState(pc.State):
    """应用状态"""
    count: int = 0
    items: list[str] = []
    new_item: str = ""

    defincrement(self):
        self.count += 1

    defdecrement(self):
        self.count -= 1

    defadd_item(self):
        ifself.new_item:
            self.items.append(self.new_item)
            self.new_item = ""

    defremove_item(self, item: str):
        self.items.remove(item)

defindex():
    """主页组件"""
    returnpc.container(
        pc.vstack(
            pc.heading("Pynecone Todo应用", size="2xl"),
            pc.hstack(
                pc.button("减少", on_click=State.decrement),
                pc.text(State.count, font_size="2xl"),
                pc.button("增加", on_click=State.increment),
                spacing="1em"
            ),
            pc.hstack(
                pc.input(
                    placeholder="输入待办事项",
                    value=State.new_item,
                    on_change=State.set_new_item
                ),
                pc.button("添加", on_click=State.add_item),
                spacing="1em"
            ),
            pc.vstack(
                pc.foreach(
                    State.items,
                    lambdaitem: pc.hstack(
                        pc.text(item),
                        pc.button(
                            "删除",
                            on_click=lambda: State.remove_item(item)
                        ),
                        spacing="1em"
                    )
                )
            ),
            spacing="2em",
            padding_top="5%"
        ),
        max_width="600px"
    )

app = pc.App(state=State)
app.add_page(index)
app.compile()

pc run之后访问 http://localhost:3000,支持热重载,改完代码页面自动刷新。

适合的场景:数据科学背景、不想学JavaScript但需要做个可交互的Web界面、内部工具或原型。需要说明的是,Pynecone的生态还在成长,复杂UI需求可能会碰到文档不足的问题,生产环境要留意。


怎么选

FastAPI

Django REST Framework

Pynecone

学习曲线

低-中

中-高

开发速度

中等

性能

中等

中等

适合规模

小到大

中到大

小到中

生态成熟度

良好

优秀

成长中

简单来说:写API首选FastAPI,已有Django项目或需要完整权限体系用DRF,想用纯Python搞前后端一体化试试Pynecone。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • FastAPI
  • Django REST Framework
  • Pynecone
  • 怎么选
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档