8000 GitHub - jxytest/pyapi: 一个基于Flask框架的api项目脚手架
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
/ pyapi Public
forked from xuke1668/pyapi

一个基于Flask框架的api项目脚手架

Notifications You must be signed in to change notification settings

jxytest/pyapi

{"props":{"initialPayload":{"allShortcutsEnabled":false,"path":"/","repo":{"id":421831020,"defaultBranch":"master","name":"pyapi","ownerLogin":"jxytest","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2021-10-27T13:32:06.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/49666494?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"refInfo":{"name":"master","listCacheKey":"v0:1635341528.4472032","canEdit":false,"refType":"branch","currentOid":"631bd274c69c6e28e2ed507fd2b6cf9eb3077145"},"tree":{"items":[{"name":"src","path":"src","contentType":"directory"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"manage.py","path":"manage.py","contentType":"file"},{"name":"myapp.py","path":"myapp.py","contentType":"file"},{"name":"requirement.txt","path":"requirement.txt","contentType":"file"},{"name":"run.sh","path":"run.sh","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":null,"totalCount":6,"showBranchInfobar":true},"fileTree":null,"fileTreeProcessingTime":null,"foldersToFetch":[],"treeExpanded":false,"symbolsExpanded":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/jxytest/pyapi/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null}},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/jxytest/pyapi.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone jxytest/pyapi","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2Fjxytest%2Fpyapi","zipballUrl":"/jxytest/pyapi/archive/refs/heads/master.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026repo=421831020"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"11","overviewFiles":[{"displayName":"README.md","repoName":"pyapi","refName":"master","path":"README.md","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003epyapi\u003c/h1\u003e\u003ca id=\"user-content-pyapi\" class=\"anchor\" aria-label=\"Permalink: pyapi\" href=\"#pyapi\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003epyapi是一个基于Flask框架的api项目脚手架,是从实际应用中精简而来,用于快速构建api项目,或者用于Flask框架初学者上手。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e简要说明\u003c/h2\u003e\u003ca id=\"user-content-简要说明\" class=\"anchor\" aria-label=\"Permalink: 简要说明\" href=\"#简要说明\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e使用蓝图结构\u003c/h4\u003e\u003ca id=\"user-content-使用蓝图结构\" class=\"anchor\" aria-label=\"Permalink: 使用蓝图结构\" href=\"#使用蓝图结构\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"src/api是蓝图包目录,如果有多个模块,可以创建多个。\nsrc/api/__init__是关于蓝图的特殊配置,如果多个蓝图有共同逻辑,也可以提取到项目包的__init__中。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003esrc/api是蓝图包目录,如果有多个模块,可以创建多个。\nsrc/api/__init__是关于蓝图的特殊配置,如果多个蓝图有共同逻辑,也可以提取到项目包的__init__中。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e统一认证身份\u003c/h4\u003e\u003ca id=\"user-content-统一认证身份\" class=\"anchor\" aria-label=\"Permalink: 统一认证身份\" href=\"#统一认证身份\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"src/auth.py有用来验证token的装饰器函数。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003esrc/auth.py有用来验证token的装饰器函数。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e统一处理返回值\u003c/h4\u003e\u003ca id=\"user-content-统一处理返回值\" class=\"anchor\" aria-label=\"Permalink: 统一处理返回值\" href=\"#统一处理返回值\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"src/response.py有用来做接口返回的函数。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003esrc/response.py有用来做接口返回的函数。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e自动生成接口文档\u003c/h4\u003e\u003ca id=\"user-content-自动生成接口文档\" class=\"anchor\" aria-label=\"Permalink: 自动生成接口文档\" href=\"#自动生成接口文档\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"src/doc.py有用来生成接口文档的函数,根据注册在Flask中视图函数的注释生成。(思路参考了apidoc项目)\n可以选择全局生成,也可以选择生成指定的蓝图模块文档,示例代码中生成的蓝图文档。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003esrc/doc.py有用来生成接口文档的函数,根据注册在Flask中视图函数的注释生成。(思路参考了apidoc项目)\n可以选择全局生成,也可以选择生成指定的蓝图模块文档,示例代码中生成的蓝图文档。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e功能插件\u003c/h4\u003e\u003ca id=\"user-content-功能插件\" class=\"anchor\" aria-label=\"Permalink: 功能插件\" href=\"#功能插件\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"src/logger.py是提供程序日志功能的插件,其实主要用来配置日志参数。\nsrc/cache.py是缓存插件,有基于内存的MemCache简单缓存和基于Redis的RedisCache缓存。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003esrc/logger.py是提供程序日志功能的插件,其实主要用来配置日志参数。\nsrc/cache.py是缓存插件,有基于内存的MemCache简单缓存和基于Redis的RedisCache缓存。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e配置文件\u003c/h4\u003e\u003ca id=\"user-content-配置文件\" class=\"anchor\" aria-label=\"Permalink: 配置文件\" href=\"#配置文件\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"src/config.py用来配置应用的参数,可以在工厂模式创建程序时选择不同的启动环境。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003esrc/config.py用来配置应用的参数,可以在工厂模式创建程序时选择不同的启动环境。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e启动管理\u003c/h4\u003e\u003ca id=\"user-content-启动管理\" class=\"anchor\" aria-label=\"Permalink: 启动管理\" href=\"#启动管理\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"manage.py用来在开发调试时使用,直接执行就可以了。\nrun.sh脚本使用uWSGI进行生产环境下的启动管理,注意如果有多环境,请使用正确的uWSGI程序。(仅在CentOS中正常使用过)\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003emanage.py用来在开发调试时使用,直接执行就可以了。\nrun.sh脚本使用uWSGI进行生产环境下的启动管理,注意如果有多环境,请使用正确的uWSGI程序。(仅在CentOS中正常使用过)\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e其他\u003c/h4\u003e\u003ca id=\"user-content-其他\" class=\"anchor\" aria-label=\"Permalink: 其他\" href=\"#其他\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"src/service.py中是一些调用外部服务的函数。\nsrc/tool.py中是一些常用的工具函数。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003esrc/service.py中是一些调用外部服务的函数。\nsrc/tool.py中是一些常用的工具函数。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e运行使用\u003c/h2\u003e\u003ca id=\"user-content-运行使用\" class=\"anchor\" aria-label=\"Permalink: 运行使用\" href=\"#运行使用\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e外部环境\u003c/h4\u003e\u003ca id=\"user-content-外部环境\" class=\"anchor\" aria-label=\"Permalink: 外部环境\" href=\"#外部环境\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"需要安装MySQL作为数据存储。\n可选安装Redis作为数据缓存,src/__init__示例文件中导入的是Redis缓存。也可以使用简单的内存缓存。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e需要安装MySQL作为数据存储。\n可选安装Redis作为数据缓存,src/__init__示例文件中导入的是Redis缓存。也可以使用简单的内存缓存。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e安装依赖\u003c/h4\u003e\u003ca id=\"user-content-安装依赖\" class=\"anchor\" aria-label=\"Permalink: 安装依赖\" href=\"#安装依赖\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"主要依赖都在requirement.txt中。\n值得说明的是由于示例接口中有使用阿里的oss存储头像文件,所以里面有个阿里oss的依赖包。这不是必须的,也可以用其他存储方式。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e主要依赖都在requirement.txt中。\n值得说明的是由于示例接口中有使用阿里的oss存储头像文件,所以里面有个阿里oss的依赖包。这不是必须的,也可以用其他存储方式。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e创建基本库表\u003c/h4\u003e\u003ca id=\"user-content-创建基本库表\" class=\"anchor\" aria-label=\"Permalink: 创建基本库表\" href=\"#创建基本库表\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"使用Python执行manage.py脚本的init_db选项初始化表结构。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e使用Python执行manage.py脚本的init_db选项初始化表结构。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e运行程序\u003c/h4\u003e\u003ca id=\"user-content-运行程序\" class=\"anchor\" aria-label=\"Permalink: 运行程序\" href=\"#运行程序\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"在开发环境中(以pychram举例),配置【Run/Debug configurations】,使用正确的Python环境运行manage.py即可。\n在生产环境中(以CentOS举例),配置run.sh中uWSGI程序的正确路径,配置uWSGI的启动端口,然后运行脚本即可。\n需要注意的是示例脚本中uWSGI是以socket形式启动的,需要配置Web服务器作为代理(如Nginx)。或者将start函数中用于uWSGI启\n动的【-s ${host}:${port}】命令项改为【--http-socket ${host}:${port}】这样就能直接访问了。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e在开发环境中(以pychram举例),配置【Run/Debug configurations】,使用正确的Python环境运行manage.py即可。\n在生产环境中(以CentOS举例),配置run.sh中uWSGI程序的正确路径,配置uWSGI的启动端口,然后运行脚本即可。\n需要注意的是示例脚本中uWSGI是以socket形式启动的,需要配置Web服务器作为代理(如Nginx)。或者将start函数中用于uWSGI启\n动的【-s ${host}:${port}】命令项改为【--http-socket ${host}:${port}】这样就能直接访问了。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e开始使用\u003c/h4\u003e\u003ca id=\"user-content-开始使用\" class=\"anchor\" aria-label=\"Permalink: 开始使用\" href=\"#开始使用\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"可以先使用示例接口里的注册接口进行账号注册,然后体验其他几个接口。\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e可以先使用示例接口里的注册接口进行账号注册,然后体验其他几个接口。\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e相关文档\u003c/h2\u003e\u003ca id=\"user-content-相关文档\" class=\"anchor\" aria-label=\"Permalink: 相关文档\" href=\"#相关文档\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://dormousehole.readthedocs.io/en/latest/\" rel=\"nofollow\"\u003eFlask中文文档\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/index.html\" rel=\"nofollow\"\u003euWSGI中文文档\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":1,"text":"pyapi","anchor":"pyapi","htmlText":"pyapi"},{"level":2,"text":"简要说明","anchor":"简要说明","htmlText":"简要说明"},{"level":4,"text":"使用蓝图结构","anchor":"使用蓝图结构","htmlText":"使用蓝图结构"},{"level":4,"text":"统一认证身份","anchor":"统一认证身份","htmlText":"统一认证身份"},{"level":4,"text":"统一处理返回值","anchor":"统一处理返回值","htmlText":"统一处理返回值"},{"level":4,"text":"自动生成接口文档","anchor":"自动生成接口文档","htmlText":"自动生成接口文档"},{"level":4,"text":"功能插件","anchor":"功能插件","htmlText":"功能插件"},{"level":4,"text":"配置文件","anchor":"配置文件","htmlText":"配置文件"},{"level":4,"text":"启动管理","anchor":"启动管理","htmlText":"启动管理"},{"level":4,"text":"其他","anchor":"其他","htmlText":"其他"},{"level":2,"text":"运行使用","anchor":"运行使用","htmlText":"运行使用"},{"level":4,"text":"外部环境","anchor":"外部环境","htmlText":"外部环境"},{"level":4,"text":"安装依赖","anchor":"安装依赖","htmlText":"安装依赖"},{"level":4,"text":"创建基本库表","anchor":"创建基本库表","htmlText":"创建基本库表"},{"level":4,"text":"运行程序","anchor":"运行程序","htmlText":"运行程序"},{"level":4,"text":"开始使用","anchor":"开始使用","htmlText":"开始使用"},{"level":2,"text":"相关文档","anchor":"相关文档","htmlText":"相关文档"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fjxytest%2Fpyapi"}}],"overviewFilesProcessingTime":0}},"appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-263cab1760dd.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-2e7f7047116e.js","githubDevUrl":null,"enabled_features":{"copilot_workspace":null,"code_nav_ui_events":false,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_integration":false}}}}
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pyapi

pyapi是一个基于Flask框架的api项目脚手架,是从实际应用中精简而来,用于快速构建api项目,或者用于Flask框架初学者上手。

简要说明

使用蓝图结构

src/api是蓝图包目录,如果有多个模块,可以创建多个。
src/api/__init__是关于蓝图的特殊配置,如果多个蓝图有共同逻辑,也可以提取到项目包的__init__中。

统一认证身份

src/auth.py有用来验证token的装饰器函数。

统一处理返回值

src/response.py有用来做接口返回的函数。

自动生成接口文档

src/doc.py有用来生成接口文档的函数,根据注册在Flask中视图函数的注释生成。(思路参考了apidoc项目)
可以选择全局生成,也可以选择生成指定的蓝图模块文档,示例代码中生成的蓝图文档。

功能插件

src/logger.py是提供程序日志功能的插件,其实主要用来配置日志参数。
src/cache.py是缓存插件,有基于内存的MemCache简单缓存和基于Redis的RedisCache缓存。

配置文件

src/config.py用来配置应用的参数,可以在工厂模式创建程序时选择不同的启动环境。

启动管理

manage.py用来在开发调试时使用,直接执行就可以了。
run.sh脚本使用uWSGI进行生产环境下的启动管理,注意如果有多环境,请使用正确的uWSGI程序。(仅在CentOS中正常使用过)

其他

src/service.py中是一些调用外部服务的函数。
src/tool.py中是一些常用的工具函数。

运行使用

外部环境

需要安装MySQL作为数据存储。
可选安装Redis作为数据缓存,src/__init__示例文件中导入的是Redis缓存。也可以使用简单的内存缓存。

安装依赖

主要依赖都在requirement.txt中。
值得说明的是由于示例接口中有使用阿里的oss存储头像文件,所以里面有个阿里oss的依赖包。这不是必须的,也可以用其他存储方式。

创建基本库表

使用Python执行manage.py脚本的init_db选项初始化表结构。

运行程序

在开发环境中(以pychram举例),配置【Run/Debug configurations】,使用正确的Python环境运行manage.py即可。
在生产环境中(以CentOS举例),配置run.sh中uWSGI程序的正确路径,配置uWSGI的启动端口,然后运行脚本即可。
需要注意的是示例脚本中uWSGI是以socket形式启动的,需要配置Web服务器作为代理(如Nginx)。或者将start函数中用于uWSGI启
动的【-s ${host}:${port}】命令项改为【--http-socket ${host}:${port}】这样就能直接访问了。

开始使用

可以先使用示例接口里的注册接口进行账号注册,然后体验其他几个接口。

相关文档

About

一个基于Flask框架的api项目脚手架

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 97.4%
  • Shell 2.6%
0