天涯论坛

 找回密码
 立即注册
搜索
查看: 15|回复: 2

fastapi-admin实现

[复制链接]

2995

主题

220

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99099158
发表于 2024-10-10 04:16:46 | 显示全部楼层 |阅读模式

1、集思广益

FastAPI操作数据库的文案,网上有非常多

FastAPI因其原生支持异步,且支持Pydantic标准格式校验,广泛受到研发者的喜爱

那样怎样支持异步数据库?并继续支持Pydantic呢?

那样FastAPI能不可像Django那样支持 admin后台呢?能够快捷的对数据库表进行CRUD呢?

2、SQLModel

这里咱们运用SQLModel

SQLModel 是一个库,用于经过 Python 代码和 Python 对象与SQL 数据库进行交互。它被设计为直观、易于运用、高度兼容和强大。

SQLModel基于 Python 类型注释,由Pydantic和SQLAlchemy供给支持。

重点特点是:

编写直观:强大的编辑器支持。处处圆满。更少的调试时间。旨在易于运用和学习。阅读文档的时间更少。易于运用:它拥有恰当的默认值,并在底层做了非常多工作以简化您编写的代码。兼容:它旨在与FastAPI、Pydantic 和 SQLAlchemy 兼容。可扩展:您持有 SQLAlchemy 和 Pydantic 的所有功能。简短:最小化代码重复。单个类型注解能够完成非常多工作。无需在 SQLAlchemy 和 Pydantic 中复制模型。

配置示例代码:db_config.py

from sqlalchemy.orm import declarative_base from sqlmodel importcreate_engine sqlite_file_name ="alert.db" sqlite_url = f"sqlite:///{sqlite_file_name}" # mysql or sqlite all is ok mysql_url = mysql+mysqlconnector://root:mysql@127.0.0.1:3306/alert_test_db engine = create_engine(mysql_url, echo=True) Base = declarative_base()

模型示例代码:db_models.py

from typing importList, Optionalfrom sqlmodel import Field, Relationship, Session, SQLModel, create_engine class HeroTeamLink(SQLModel, table=True):team_id: Optional[int] = Field( default=None, foreign_key="team.id", primary_key=True ) hero_id: Optional[int] = Field( default=None, foreign_key="hero.id", primary_key=True ) class Team(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) name: str = Field(index=True) headquarters: str heroes: List["Hero"] = Relationship(back_populates="teams", link_model=HeroTeamLink) class Hero(SQLModel, table=True):id: Optional[int] = Field(default=None, primary_key=True) name: str = Field(index=True) secret_name: str age: Optional[int] = Field(default=None, index=True) teams: List[Team] = Relationship(back_populates="heroes", link_model=HeroTeamLink) sqlite_file_name = "database.db" sqlite_url = f"sqlite:///{sqlite_file_name}" engine = create_engine(sqlite_url, echo=True) def create_db_and_tables(): SQLModel.metadata.create_all(engine) def create_heroes(): withSession(engine)as session: team_preventers = Team(name="Preventers", headquarters="Sharp Tower") team_z_force = Team(name="Z-Force", headquarters="Sister Margaret’s Bar") hero_deadpond = Hero( name="Deadpond", secret_name="Dive Wilson", teams=[team_z_force, team_preventers], ) session.add(hero_deadpond) session.commit()def main(): create_db_and_tables() create_heroes() if __name__ == "__main__": main()

3、fastapi-amis-admin

fastapi-amis-admin 是一个持有高性能,有效率,易拓展的fastapi管理后台框架 启发自Django-Admin,并且持有不逊色于Django-Admin的强大功能.

官网文档 http://docs.amis.work/

界面预览

浏览器打开:<http://127.0.0.1:8000/admin/>

image.png

amdin/doc预览

浏览器打开:http://127.0.0.1:8000/admin/docs :

快速运用 fastapi-amis-admin

安装

pip install fastapi_amis_admin

简单示例

from fastapi importFastAPIfrom fastapi_amis_admin.admin.settings import Settings from fastapi_amis_admin.admin.site import AdminSite # 创建FastAPI应用 app = FastAPI() # 创建AdminSite实例 site = AdminSite(settings=Settings(database_url_async=sqlite+aiosqlite:///amisadmin.db)) # 挂载后台管理系统 site.mount_app(app) if __name__ == __main__: importuvicorn uvicorn.run(app, debug=True)

更加多高级用法





上一篇:针对登录页面的渗透测试办法
下一篇:2020HW时期颁布漏洞总结:深信服,绿盟,天融信,泛微云显现漏洞,害处级别:危急
回复

使用道具 举报

3089

主题

3万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098770
发表于 2024-10-14 09:02:53 | 显示全部楼层
seo常来的论坛,希望我的网站快点收录。
回复

使用道具 举报

3123

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99108625
发表于 2024-10-16 07:34:53 | 显示全部楼层
楼主发的这篇帖子,我觉得非常有道理。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 03:18 , Processed in 0.141498 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.