# SRFProjectTemplate **Repository Path**: joesone/srf-project-template ## Basic Information - **Project Name**: SRFProjectTemplate - **Description**: sainc-rest-framework 项目模板 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-11-09 - **Last Updated**: 2023-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SRFProjectTemplate 想使用此模板必须认真阅读本关于 `README.md` 否则后果自负。推荐使用 md 阅读器阅读 # 如何使用 ## 第一步:如何起步及后期维护更新 + 先使用Git克隆项目 `git clone https://gitee.com/Wang_LaoSi/srf-project-template.git` + 再创建开发分支 `git checkout -b xxxxx` 这里 xxxx 推荐为 develop + 然后在 develop 分支中编码 + `srf-project-template` 如有更新则再次拉取主分支并合并即可 ```python # 与谁合并就切换到谁 m->d 则切换到 d git checkout develop # 拉取最新代码 git pull https://gitee.com/Wang_LaoSi/srf-project-template.git master # 合并 m->d git merge master ``` + 安装依赖 `python -m pip install -r requirements.txt` ---- ## 第二步:了解项目依赖及结构 + 项目依赖于 sanic_rest_framework, tortoise-orm, srf-apps-helper, Pillow + 基础目录如下 ```python # 所有APP都应该以文件夹的形式存在与apps文件夹下, # common 文件夹下是已经实现好的app`权限,用户,附件` # config.py 内控制着数据库链接信息及token加密信息 # signals.py 内是已经实现的数据初始程序,收集 权限 及 创建超级用户 # test 所有的单元测试都应该写在里面 project ├── apps │ └── __init__.py ├── common │ ├── accessory │ │ ├── __init__.py │ │ ├── models.py │ │ ├── permission.json │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views.py │ ├── auth │ │ ├── __init__.py │ │ ├── models.py │ │ ├── permission.json │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views │ │ ├── general.py │ │ ├── group.py │ │ ├── login.py │ │ ├── permission.py │ │ ├── role.py │ │ └── user.py │ └── utils │ ├── authentication.py │ ├── decorators.py │ ├── models.py │ ├── permission.py │ ├── site_views.py │ └── token_helper.py ├── settings.py ├── README.en.md ├── README.md ├── remember.md ├── requirements.txt ├── run.py ├── signals.py └── tests ``` ---- ## 第三步,编写第一个`app` 上一步我们已经了解了基本的项目结构 现在我们开始编写我们的第一个App 首先我们要知道以下知识: + 存在于 `project -> apps` 目录下的app程序将会被**自动加载** + 如果需要自定义apps目录,到`settings.py 内修改 APPS_FOLDER_NAME 配置`,再迁移`apps -> __init__.py`文件到新目录下 + 如果需要添加非apps目录中的app,请在`settings.py -> APP_MODULES`中修改或添加参数内容 现在我们来了解一下一个app的基础结构 ```python # apps文件夹的基本结构 apps └── goods # app项目的基本结构 │ ├── __init__.py │ ├── models.py │ ├── permission.json │ ├── serializers.py │ ├── urls.py │ └── views.py └── __init__.py ``` + apps 是基础目录 + goods 是app文件夹的名称 + `__init__.py` 一般是用来初始化app,一般情况下只有如下代码,初始化一个蓝图。 ```python # __init__.py from sanic.blueprints import Blueprint # xxx = Blueprint('xxx', '/auth') # 'xxx'必须与app的名称一致。 # 假如app为 'app_1' 那么就必须这么写 app_1 = Blueprint('app_1', '/auth') auth = Blueprint('auth', '/auth') ``` + `models.py` 是用来存放Model模型的,将会被映射为数据库内的表 ```python # 最小实现,基于 tortoise-orm from tortoise import fields from common.utils.models import BaseModel class UserModel(BaseModel): """用户表""" account = fields.CharField(18, description='账户') password = fields.CharField(32, description='密码') ``` + `permission.json` 用来初始化权限的,里面的内容将会被存放到 `PermissionModel` 模型内 ```json { // accessory_setting 名称可以自定义 此为 分类id "accessory_setting": { "label": "附件管理权限设置",// label对应的内容为分类名称 "permissions": { // code:name 都可以随意修改 // 例如:"can_wait":"准许等待" "add_accessory": "添加附件", "change_accessory": "修改附件", "delete_accessory": "删除附件", "view_accessory": "查看附件" } } } ``` + `serializers.py` 用来存放序列化器,所有的序列化器都应该存放于此,当序列化器过多时可以建立同名文件夹,然后在文件夹内进行细分。 + `urls.py` 用来存放路由文件,会被自动加载 ```python # urls.py 内必须存在 urls 列表 urls = [ # {'handler': AdminLogin.as_view(), 'uri': '/login', 'name': 'login',is_base:false} ] + router.urls ``` + `views.py` 视图文件,逻辑都是在这里面完成的 + 其余由为讲解的内容可以自己去看 common 文件夹内的 auth app + **一个文件夹想要被自动加载程序认定为app,就必须存在 `__init__.py` 文件** ---- ## 第四步,迁移模型 + 第一次迁移创建模型执行如下命令 ```python # 初始化配置 aerich init -t apps.TORTOISE_ORM # 初始化迁移文件并映射模型 aerich --app auth accessory init-db # 所有app都要执行一遍 aerich --app app_name init-db 命令 # 包括 common 内的 app ``` + 当发生修改时,迁移模型 ```python # 查询并生成迁移文件 aerich --app app_name migrate (--name drop_column) # 执行迁移文件 aerich --app app_name upgrade # 如果有特殊需求可以在生成迁移文件后,去修改对应的迁移文件,再执行迁移文件 # 例如:修改字段名称不删除数据 migrate -> Rename XXX yo XXXX? Y 修改对应迁移文件.sql -- upgrade -- eg:ALTER TABLE `tbl_name` CHANGE `col_old` `col_new` VARCHAR(100) COMMENT '备注'; upgrade ``` ---- ## 第五步,执行程序 ```python # windows python run.py # linux sudo python run.py # 执行完成后的输出 [2021-07-22 09:41:27 +0800] [20555] [INFO] AppsHelper: Start load app. [2021-07-22 09:41:27 +0800] [20555] [INFO] AppsHelper: ---------------auth--------------- [2021-07-22 09:41:27 +0800] [20555] [INFO] AppsHelper: Blueprint finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Urls finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Models finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Registered route finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: ---------------accessory--------------- [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Blueprint finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Urls finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Models finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Registered route finish [2021-07-22 09:41:28 +0800] [20555] [INFO] AppsHelper: Done [2021-07-22 09:41:28 +0800] [20555] [INFO] Goin' Fast @ http://0.0.0.0:81 ``` ## 第六步,验证程序 ```python # 访问指定url验证是否开启 ``` ## 进阶杂谈 需要修改或新增common内的APP功能时 请将期复制一份到 apps 下,再到`settings.py -> APP_MODULES`中修改对应APP的配置