{"id":13795779,"url":"https://github.com/heyfavour/vue-element-admin-fastapi","last_synced_at":"2025-04-09T13:10:51.884Z","repository":{"id":37479106,"uuid":"281312653","full_name":"heyfavour/vue-element-admin-fastapi","owner":"heyfavour","description":"vue-element-admin-fastapi","archived":false,"fork":false,"pushed_at":"2023-04-21T02:41:50.000Z","size":969,"stargazers_count":229,"open_issues_count":7,"forks_count":58,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-02-14T21:36:57.981Z","etag":null,"topics":["celery","fastapi","python-socketio","socket-io","vue","vue-element-admin"],"latest_commit_sha":null,"homepage":"","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/heyfavour.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-21T06:19:05.000Z","updated_at":"2024-08-03T23:05:52.067Z","dependencies_parsed_at":"2024-08-03T23:05:51.040Z","dependency_job_id":"18e1d974-9e43-4a41-87f1-1cbc50b7b895","html_url":"https://github.com/heyfavour/vue-element-admin-fastapi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyfavour%2Fvue-element-admin-fastapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyfavour%2Fvue-element-admin-fastapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyfavour%2Fvue-element-admin-fastapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/heyfavour%2Fvue-element-admin-fastapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/heyfavour","download_url":"https://codeload.github.com/heyfavour/vue-element-admin-fastapi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045245,"owners_count":21038554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["celery","fastapi","python-socketio","socket-io","vue","vue-element-admin"],"created_at":"2024-08-03T23:01:02.068Z","updated_at":"2025-04-09T13:10:51.860Z","avatar_url":"https://github.com/heyfavour.png","language":"Vue","funding_links":[],"categories":["Admin"],"sub_categories":[],"readme":"# vue-element-admin-fastapi\nvue-element-admin-fastapi\n  \nfrontend:vue-element-admin  \nbackend:fastapi and Full Stack FastAPI and PostgreSQL\n\n```\nroot:[vue-element-admin-fastapi]\n|--frontend\t\t#vue-element-admin\n|--backend\n|      |--app\n|      |      |--alembic\t#alembic\n|      |      |--app\n|      |      |      |--api\n|      |      |      |      |--api_v1\n|      |      |      |      |      |--api.py\n|      |      |      |      |      |--endpoints\n|      |      |      |      |      |--report\t#excel export api 敏捷开发 \n|      |      |      |      |      |      |--gen_excel.py\n|      |      |      |      |      |      |--gen_report.py\n|      |      |      |      |      |      |--report\n|      |      |      |      |      |      |--__init__.py\n|      |      |      |      |      |--system\n|      |      |      |      |      |--websocket\t#python-socketio,异步类视图区分命名空间\n|      |      |      |      |      |      |--server.py\n|      |      |      |      |--deps.py\n|      |      |      |--celery_app\t#celery\n|      |      |      |      |--celery_app.py\n|      |      |      |      |--worker\n|      |      |      |      |      |--example.py\n|      |      |      |--core\n|      |      |      |      |--config.py\n|      |      |      |      |--security.py\n|      |      |      |--crud\n|      |      |      |--db\n|      |      |      |      |--base.py\n|      |      |      |      |--session.py\n|      |      |      |--extensions\n|      |      |      |      |--exception.py\t#全局异常捕获 暂时没有使用的需要,所以没用\n|      |      |      |      |--logger.py\t#替代原来的日志\n|      |      |      |      |--request_id.py\t#日志全链路追踪\n|      |      |      |      |--utils.py\t\t#utils 主要使用了其中的list_to_tree\n|      |      |      |--initial_data.py\t\t#初始化数据\n|      |      |      |--main.py\n|      |      |      |--middleware\t\t\t#中间件\n|      |      |      |      |--access_middle.py\t\t#中间件 登陆日志\n|      |      |      |--models\t\t#models \tTable\n|      |      |      |--schemas\t\t#schemas\tPydantic\n|      |      |      |--tests\n|      |      |      |--__init__.py\n|      |      |--pyproject.toml\t\t#项目所需要的包\n|      |      |--scripts\n|--logs\t\t\t\t#日志路径\n|      |--backend\n|      |--celery\n```\n#### socket.io\nfrontend:socket.io-client  \nbackend:python-socketio  \n前后端版本兼容请去官网检查，我使用的已经是最新的版本  \n前端：socket.io-client version 3.X  \n后端：python-socketio  version 5.X  \n\n#### celery\ncelery-redis  \nstart celery:sh backend\\app\\worker-start.sh   \n#### middleware\n\n\n#### EXCEL敏捷开发\naxios发送get请求携带token,通过访问header['content-disposition']获取文件名(需要后端设置Access-Control-Expose-Headers)\n\nfrontend:frontend\\vue-element-admin-fastapi\\frontend\\src\\utils\\ruoyi.js   function download\nbackend:backend\\app\\app\\api\\api_v1\\report\\\\_\\_init\\_\\_.py\n\n\n\n#### DEMO:服务器到期了,暂时不续\n\n\n\n#### 开发规则整理：  \n1.模块化  \n2.router.include_router下对根路由的RESTFUL请求需要结尾加\"/\",这个需要前端配合，其他都不需要加\"/\"\n\n\n#### 如何快速本地启动\n##### python packages\n```\ncd vue-element-admin-fastapi\\backend\\app\npip install -r requirements.txt\n```\n##### ip及数据库连接\n```\nfrontend\n#websocket连接的ip\nvue-element-admin-fastapi\\frontend\\src\\views\\monitor\\server\\index.vue \n#开发环境连接的后端ip\nvue-element-admin-fastapi\\frontend\\.env.development\t\n#生产环境连接的后端ip\nvue-element-admin-fastapi\\frontend\\.env.production\t\n\nbackend\n#alembic的数据库连接\nvue-element-admin-fastapi\\backend\\app\\alembic\\env.py\n#后端的数据库连接\nvue-element-admin-fastapi\\backend\\app\\app\\core\\config.py\n#celery的数据库连接\nvue-element-admin-fastapi\\backend\\app\\app\\celery_app\\celery_app.py\n```\n##### 数据准备\nvue-element-admin-fastapi\\backend\\app\\prestart.sh\n```\n#检查数据库连接\npython /app/app/db_pre_start/backend_pre_start.py\n#alembic初始化本地表结构\nalembic revision --autogenerate -m \"first commit\"\nalembic upgrade head\n#初始化数据\npython /app/app/initial_data.py\n```\n##### 开发环境启动\n```\nfrontend:npm run dev\nbackend:python main.py\ncelery:见启动脚本\n```\n\n\n#### 联系方式:\nQQ：619511821\n\n#### 其他\n##### 日志统计\n私下用两台服务器搭了hadoop+hive+spark。log存到了hive中并用spark统计了访问频率，使用airflow进行任务调度  \n但是考虑到项目简洁纯粹,所以并没有提交。  \n把结果放到了生产，给大家看看结果，尤其是异常API访问，看看经常被扫描的API有哪些\n\n#### TODO\n计划今年升级到sqlalchemy1.4\n\n#### 待框架解决问题\n中间件日志记录参数问题  \nuvicorn -\u003eapp(revice,send) -\u003e receive = queue.get()-\u003eapi(revice)-\u003esend  \n以上是请求流程，如果在中间件中使用request.body() or reqeust.receive 就会导致queue中的参数被消耗掉,导致中间件的call_next block  \n有人采用重写reqeust.receive的办法，但是这种办法会导致streambody or 巨大的body无法获取的问题(框架通过more body = True 多次receive，重写后循环获取无法停止)。  \nfastapi作者尝试在apirouter中记录参数日志。但是个人觉得这种方法很不python，所以暂不采用。  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheyfavour%2Fvue-element-admin-fastapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fheyfavour%2Fvue-element-admin-fastapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fheyfavour%2Fvue-element-admin-fastapi/lists"}