{"id":25471507,"url":"https://github.com/zhouyl/flask-api-project","last_synced_at":"2026-05-15T12:34:51.934Z","repository":{"id":77284967,"uuid":"88028468","full_name":"zhouyl/flask-api-project","owner":"zhouyl","description":"Flask API Project","archived":false,"fork":false,"pushed_at":"2017-04-12T08:33:47.000Z","size":30,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-13T06:46:22.500Z","etag":null,"topics":["flask","flask-api","python","uwsgi"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zhouyl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2017-04-12T08:29:58.000Z","updated_at":"2024-05-25T17:11:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"0f0a85d9-3873-44f3-ab5d-75525126fdf3","html_url":"https://github.com/zhouyl/flask-api-project","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zhouyl/flask-api-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouyl%2Fflask-api-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouyl%2Fflask-api-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouyl%2Fflask-api-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouyl%2Fflask-api-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zhouyl","download_url":"https://codeload.github.com/zhouyl/flask-api-project/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zhouyl%2Fflask-api-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33067431,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["flask","flask-api","python","uwsgi"],"created_at":"2025-02-18T09:47:25.912Z","updated_at":"2026-05-15T12:34:51.928Z","avatar_url":"https://github.com/zhouyl.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 一、环境配置\n\n## 1、参考文档\n\n+ virtualenv (\u003chttps://virtualenv.pypa.io/en/stable/\u003e)\n+ flask (\u003chttp://www.pythondoc.com/flask/\u003e)\n\n## 2、安装 virtualenv\n\n首先在服务器或开发环境安装 `virtualenv`，在此之前你需要安装 `python2.7`\n\n```\n$ pip install virtualenv\n```\n\n在 ubuntu 下也可以尝试用以下命令安装\n\n```\n$ sudo apt-get install python-virtualenv\n```\n\n## 3、安装项目环境及依赖包\n\n```\n$ cd my.app/\n$ virtualenv --no-site-packages venv\n$ venv/bin/pip install -r requirements.txt\n```\n\n**如果后续开发过程中，有新增的   packages，请在根目录下运行以下命令**\n\n```\n$ venv/bin/pip freeze \u003e requirements.txt\n```\n\n## 4、环境配置及项目启动\n\n### 4.1) 开发环境\n\n在开发环境下，直接运行以下命令即可，web 服务将监听在 http://127.0.0.1:5000/：\n\n```\n$ venv/bin/python manage.py\n```\n\n### 4.2) 生产或测试环境部署\n\n配置 nginx\n\n```\nserver {\n    listen       80;\n    server_name  my.app;\n    location / {\n        include                    uwsgi_params;\n        uwsgi_pass                 127.0.0.1:8001;\n        uwsgi_param  UWSGI_PYHOME  /data/vhosts/my.app/venv;\n        uwsgi_param  UWSGI_CHDIR   /data/vhosts/my.app;\n        uwsgi_param  UWSGI_SCRIPT  manage:app;\n    }\n    access_log  /var/log/nginx/my.app.log  main;\n}\n```\n\n配置环境识别文件\n\n```\n$ touch /etc/env.testing # 测试环境\n$ touch /etc/env.production # 生产环境\n```\n\n启动 uwsgi 服务\n\n```\n$ bash bin/uwsgi.sh start\n```\n\n注册 uwsgi 守护进程\n\n可选择两种方式，通过 supervisor 或者 crontab\n\n```\n*/10 * * * * /data/vhosts/my.app/bin/uwsgi.sh start\n```\n\nsupervisor 配置方式请参考：http://supervisord.org/\n\n# 二、开发参考\n\n## 1、目录结构\n\n    ├── app\n    │   ├── blueprints      # Blueprint 存放目录\n    │   ├── models          # 业务模型存放目录\n    │   └── utils           # 项目开发工具包存放目录\n    ├── bin                 # 可执行脚本目录\n    │   ├── db.sh           # 数据库连接工具\n    │   └── uwsgi.sh        # uWSGI 服务管理脚本\n    ├── config              # 配置文件目录\n    │   ├── production      # 生产环境配置文件目录\n    │   └── testing         # 测试环境配置文件目录\n    ├── logs                # 日志目录\n    ├── venv                # python-virtualenv 生产目录\n    ├── db-connector.py     # 数据库连接工具\n    └── manage.py           # 项目管理启动脚本\n\n## 2、开发范例\n\n每一个 blueprint 需要指定一个 url 前缀，例如一个用户数据的 api 接口\n\n在 app/blueprints 下创建 user.py\n\n```python\n# -*- coding: utf-8 -*-\n\nfrom ..bootstrap import *\nfrom flask import Blueprint, request\nfrom ..models import user\n\nuserbp = Blueprint('user', __name__, url_prefix='/user')\n\n@userbp.route('/')\n@userbp.route('/index')\ndef index():\n    return make_response(dict(foo='bar'))\n\n@userbp.route('/profile/\u003cint:user_id\u003e')\ndef profile(user_id)\n    return make_response(user.profile(user_id))\n\napp.register_blueprint(userbp) # 这行一定要放在最后\n```\n\n在 app/models 下创建 user.py\n\n```python\n# -*- coding: utf-8 -*-\n\nfrom ..bootstrap import *\n\ndef profile(user_id):\n    return db('user').fetch_row('select * from users where user_id = %d' % user_id)\n```\n\n## 3、调试\n\n可通过浏览器或者 curl 进行调试\n\n```\n$ curl -X GET 'http://127.0.0.1:5000/user/index'\n```\n\n输出结果\n\n    {\n      \"message\": \"ok\",\n      \"code\": 200,\n      \"data\": [\n        \"foo\": \"bar,\n      ],\n      \"@timestamp\": 1491983914,\n      \"@datetime\": \"2017-04-12 07:58:34 UTC\"\n    }\n\n## 4、 统一输出标准\n\n请统一使用 make_response 方法进行数据输出\n\n```python\ndef make_response(data=None, code=200, message='ok'):\n    '''用于构造项目的标准数据输出格式'''\n    from flask import jsonify\n\n    return jsonify({\n        'code': code,\n        'message': message,\n        'data': {} if data is None else data,\n        '@timestamp': localtime(),\n        '@datetime': date_format('now', '%Y-%m-%d %H:%M:%S %Z'),\n    })\n```\n\n请注意 code 的值，参考 http status 进行错误处理，其中 `600` 之后的代码可用于业务逻辑错误\n\n```\n100: CONTINUE\n101: SWITCHING_PROTOCOLS\n200: OK\n201: CREATED\n202: ACCEPTED\n203: NON_AUTHORITATIVE_INFORMATION\n204: NO_CONTENT\n205: RESET_CONTENT\n206: PARTIAL_CONTENT\n207: MULTI_STATUS\n300: MULTIPLE_CHOICES\n301: MOVED_PERMANENTLY\n302: FOUND\n303: SEE_OTHER\n304: NOT_MODIFIED\n305: USE_PROXY\n306: RESERVED\n307: TEMPORARY_REDIRECT\n308: PERMANENT_REDIRECT\n400: BAD_REQUEST\n401: UNAUTHORIZED\n402: PAYMENT_REQUIRED\n403: FORBIDDEN\n404: NOT_FOUND\n405: METHOD_NOT_ALLOWED\n406: NOT_ACCEPTABLE\n407: PROXY_AUTHENTICATION_REQUIRED\n408: REQUEST_TIMEOUT\n409: CONFLICT\n410: GONE\n411: LENGTH_REQUIRED\n412: PRECONDITION_FAILED\n413: REQUEST_ENTITY_TOO_LARGE\n414: REQUEST_URI_TOO_LONG\n415: UNSUPPORTED_MEDIA_TYPE\n416: REQUESTED_RANGE_NOT_SATISFIABLE\n417: EXPECTATION_FAILED\n428: PRECONDITION_REQUIRED\n429: TOO_MANY_REQUESTS\n431: REQUEST_HEADER_FIELDS_TOO_LARGE\n444: CONNECTION_CLOSED_WITHOUT_RESPONSE\n500: INTERNAL_SERVER_ERROR\n501: NOT_IMPLEMENTED\n502: BAD_GATEWAY\n503: SERVICE_UNAVAILABLE\n504: GATEWAY_TIMEOUT\n505: HTTP_VERSION_NOT_SUPPORTED\n508: LOOP_DETECTED\n510: NOT_EXTENDED\n511: NETWORK_AUTHENTICATION_REQUIRED\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhouyl%2Fflask-api-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzhouyl%2Fflask-api-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzhouyl%2Fflask-api-project/lists"}