Shirley使用说明

概述

一个基于fastapi的裸后端,主要是为了减少web相关的一些基础crud。orm基于tortoise-orm。 目标:

  • User、Group、Permission创建 √
  • 权限管理 √
  • 配置setting模块
  • model自定义权限
  • 分页依赖
  • 根据model的简单crud自动生成
  • 邮件和用户密码找回功能
  • 创建超级用户、创建数据库等的自动执行指令

安装

pip install Shirley

引入

from fastapi import FastAPI
from Chau import register #引入注册

app = FastAPI(debug=True, title="这是一个框架测试包")
...

register(app=app, modules=["models", 'model_test.models'])

权限列表会自动将所有注册的model创建相关的crud权限。

使用Shirley

使用User


from Shirley.schemas import OAuth2PasswordRequestForm
from fastapi import Depends
from Shirley.models import User
@app.post("/user")
async def create_user(user: OAuth2PasswordRequestForm = Depends()):
    print(user)
    res = await User.create(username=user.username, password=user.password, )
    return res

权限判断

from fastapi import Depends
from Shirley.depends import check_permission
from Shirley.models import User

@app.get("/users/me/items/")
async def read_own_items(current_user: User = Depends(check_permission("can read Item"))):
    return [{"item_id": "Foo", "owner": current_user.username}]

当然你也可以这样自己手写用户是否有相关权限:

from fastapi import Depends
from Shirley.err import PermissionError
from Shirley.depends import get_current_user
from Shirley.models import User
async def super_user(user: User = Depends(get_current_user)) -> User:
    """
    超级管理员权限依赖
    :param user:
    :return:
    """
    if not user.is_superuser:
        raise PermissionError()
    else:
        return user

配置

系统启动需要进行一些配置,这些配置都在.env环境变量里面获取,所以每个项目的根目录必须有一个文件.env,在里面配置相关的环境变量内容,例如: 大多数环境变量都有默认值,但是这个SECRET_KEY不能默认,在之后考虑脚本生成的时候会自动生成默认值。

SECRET_KEY='fjwyy#qht#nvoy%h4&m6hvbs-9s&##sh4710*f(ir(019!r3)c'

目前的环境变量有:

from pydantic import BaseSettings


class __Settings(BaseSettings):
    DB_URL: str="sqlite://db.sqlite3"
    LOGIN_URL = "/admin"
    SECRET_KEY: str
    ALGORITHM: str = "HS256"  # 加密算法
    ACCESS_TOKEN_EXPIRE_MINUTES: int = 30  # jwt有效期
    DEBUG: bool = True

    class Config:
        env_file = '.env'