<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          FastAPI 和 fastapi-amis-admin:強大而可擴展的后臺管理解決方案!

          共 4418字,需瀏覽 9分鐘

           ·

          2023-05-27 17:14

          66a46a5035d7a0c8c8f7bf9e1b9d1c99.webp

          大家好,我是安果!

          我們都知道 Django 生態(tài)豐富,功能強大,適用于中、大型項目,并且自帶了后臺管理系統(tǒng);而 FastAPI ?更適用于構建高性能的 API,后臺管理系統(tǒng)需要另外開發(fā)

          本篇文章將介紹 FastAPI 結合?fastapi-amis-admin 快速搭建后臺管理系統(tǒng)的步驟

          fastapi-amis-admin 是一款高性能、高效且易于擴展的 FastAPI 管理框架;它受到 django-admin 的啟發(fā),擁有與 django-admin 一樣多的強大功能

          項目地址:

          https://github.com/amisadmin/fastapi-amis-admin

          1、 安裝依賴

                  #?1、更新pip
          python3?-m?pip?install?--upgrade?pip

          #?2、安裝依賴fastapi_amis_admin
          pip?install?fastapi_amis_admin

          #?3、安裝數(shù)據(jù)庫管理依賴
          #?sqlite
          pip?install?aiosqlite??

          #?mysql
          pip?install?aiomysql?

          需要注意的是,fastapi-amis-admin 對 Python 最低兼容版本為 Python3.7,如果安裝了低版本,需要先更新版本

          2、 基礎使用

          這里以 sqlite 和 mysql 為例

          sqlite:保存在本地

          mysql:連接遠程數(shù)據(jù)庫

          首先,創(chuàng)建一個?AdminSite 對象,指定數(shù)據(jù)庫連接信息

          然后,創(chuàng)建數(shù)據(jù)模型對象(繼承于?SQLModel)映射數(shù)據(jù)庫中的某張表,定義表名及表字段,配置到后臺管理(繼承于 ModelAdmin)中去

          PS:如果數(shù)據(jù)庫中已經存在表,就直接使用;如果不存在,就創(chuàng)建一張新的表

          接著,創(chuàng)建一個 FastAPI 應用,使用 AdminSite 對象進行掛載

          最后,在初始化事件方法中初始化數(shù)據(jù)庫表

                  from?fastapi?import?FastAPI
          from?sqlmodel?import?SQLModel
          from?fastapi_amis_admin.admin.settings?import?Settings
          from?fastapi_amis_admin.admin.site?import?AdminSite
          from?fastapi_amis_admin.admin?import?admin
          from?fastapi_amis_admin.models.fields?import?Field

          #?創(chuàng)建FastAPI應用
          app?=?FastAPI()

          #?創(chuàng)建AdminSite實例
          #?sqlite(默認)
          #?site?=?AdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///amisadmin.db'))

          #?Mysql
          # username:數(shù)據(jù)庫配置信息(用戶名)
          # password:數(shù)據(jù)庫配置信息(密碼)
          # ip:數(shù)據(jù)庫配置信息(ip地址)
          # port:數(shù)據(jù)庫配置信息(數(shù)據(jù)庫端口號)
          # dbname:數(shù)據(jù)庫配置信息(數(shù)據(jù)庫名)
          site?=?AdminSite(settings=Settings(database_url_async='mysql+aiomysql://username:password@ip:port/dbname'))


          #?先創(chuàng)建一個SQLModel模型,映射數(shù)據(jù)庫中的表
          class?Category(SQLModel,?table=True):
          ????id:?int?=?Field(default=None,?primary_key=True,?nullable=False)
          ????name:?str?=?Field(title='CategoryName')
          ????description:?str?=?Field(default='',?title='Description')

          #?注冊ModelAdmin
          @site.register_admin
          class?CategoryAdmin(admin.ModelAdmin):
          ????page_schema?=?'分類管理'
          ????#?配置管理模型
          ????model?=?Category

          #?掛載后臺管理系統(tǒng)
          site.mount_app(app)


          #?創(chuàng)建初始化數(shù)據(jù)庫表
          @app.on_event("startup")
          async?def?startup():
          ????await?site.db.async_run_sync(SQLModel.metadata.create_all,?is_session=False)


          if?__name__?==?'__main__':
          ????import?uvicorn
          ????uvicorn.run(app,?debug=True)

          3、 用戶認證及權限配置

          通過上面的步驟,我們發(fā)現(xiàn)后臺管理系統(tǒng)缺少用戶認證及權限配置

          這里推薦使用?FastAPI-User-Auth

          項目地址:

          https://github.com/amisadmin/fastapi-user-auth

          FastAPI-User-Auth?是一個簡單而強大的 FastAPI 用戶 RBAC 認證授權庫,基于 FastAPI-Amis-Admin,可以提供可自由擴展的可視化管理界面

          我們需要先安裝依賴

                  #?用戶認證權限
          pip3?install?fastapi-user-auth

          我們接著對上面的代碼進行修改(僅需?3 步)

          首先,將 AdminSite 替換為其子類?AuthAdminSite,創(chuàng)建一個后臺管理授權對象

                  from?fastapi_user_auth.site?import?AuthAdminSite

          #?實例化后臺管理授權對象
          site?=?AuthAdminSite(settings=Settings(database_url_async='mysql+aiomysql://username:password@ip:port/dbname'))
          auth?=?site.auth

          然后,根據(jù)創(chuàng)建的 SQLModel 對象,注冊 ModelAdmin

                  from?fastapi_amis_admin.admin?import?admin

          #?自定義Model
          #?表名:custom_model
          class?CustomModel(SQLModel,?table=True):
          ????__tablename__?=?'custom_model'
          ????id:?int?=?Field(primary_key=True,?nullable=False,?unique=True)
          ????name:?str?=?Field(title="名稱",?max_length=100)
          ????url:?str?=?Field(max_length=1000,?title="URL地址")

          #?注冊ModelAdmin
          @site.register_admin
          class?CustomAdmin(admin.ModelAdmin):
          ????page_schema?=?'自定義表'
          ????model?=?CustomModel

          最后,在初始化事件中初始化數(shù)據(jù)庫表的同時,創(chuàng)建一個默認的管理員

          PS: 默認的管理員賬號密碼是 admin/admin,可以自行修改密碼或者創(chuàng)建賬號及權限設置

                  from?fastapi_amis_admin.admin?import?admin

          #?創(chuàng)建初始化數(shù)據(jù)庫表
          @app.on_event("startup")
          async?def?startup():
          ????await?site.db.async_run_sync(SQLModel.metadata.create_all,?is_session=False)
          ????await?auth.create_role_user(role_key='admin')

          4、 部署問題

          在部署到服務器時,可能會遇到?urllib3 不兼容的問題,我們只需要安裝特定版本的?urllib3 即可

                  #?可能遇到的問題
          urllib3?v2.0?only?supports?OpenSSL?1.1.1+,?currently?the?'ssl'?module?is?compiled?with?OpenSSL?1.0.2k-fips??26?Jan?2017.?

          #?解決方案
          #?安裝urllib特定版本
          pip3?install?urllib3==1.26.6

          推薦閱讀
          如何利用 Selenium 對已打開的瀏覽器進行爬蟲!
          如何利用 Playwright 對已打開的瀏覽器進行爬蟲!

          最全總結 | 聊聊 Selenium 隱藏瀏覽器指紋特征的幾種方式!


          END


          好文和朋友一起看~
          瀏覽 146
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中国操逼网 | 天天超碰 | 成人先锋影音AV黄色电影网 | 欧美口爆 | 什么网址可以在线看国产毛片 |