Api代码库 ******************** 基于django的代码示例 完整版: bilibili-api/django/examples/application 视图 ================================== .. tabs:: .. tab:: Django .. tabs:: .. tab:: 基于函数的视图 .. literalinclude:: /../../reference/api/view/django/views.py .. tab:: 基于类的视图 .. literalinclude:: /../../reference/api/view/django/class_based_views.py .. tab:: API视图 .. literalinclude:: /../../reference/api/view/django/api_views.py .. tab:: Go-Zero .. literalinclude:: /../../apiCode/demo/internal/logic/demologic.go :language: go 校验数据 ================================ .. tabs:: .. tab:: Django .. tabs:: .. tab:: django .. literalinclude:: /../../reference/api/validators/django/clean_.py .. tab:: djangorestframework .. literalinclude:: /../../reference/api/validators/django/validate_.py .. tab:: Flask https://gitee.com/luzhenxiong/bilibili-orm/tree/master/marshmallow .. literalinclude:: /../../reference/api/validators/flask/validate.py :linenos: :emphasize-lines: 62-82, 136-142, 155-157 .. tab:: Go-Zero 内置了一些基础的参数校验规则,想要更复杂的校验或者自定义校验,考虑使用validators库 demo.api .. literalinclude:: /../../apiCode/demo/demo.api :language: text 缓存 ======================================== .. tabs:: .. tab:: Django .. literalinclude:: /../../reference/api/cache/cache/views.py 测试 ========================================= .. tabs:: .. tab:: Django .. literalinclude:: /../../apiCode/dj/test/test_views.py 用到pytest-django的开源项目: * djangorestframework .. tab:: Flask 测试form表单 .. literalinclude:: /../../Api/Flask/coding/uploadfile/test_case.py 文件上传 ======================================== .. tabs:: .. tab:: Flask .. literalinclude:: /../../Api/Flask/coding/uploadfile/main.py 分布式锁 ========================================= https://redis.io/docs/latest/develop/use/patterns/distributed-locks/ .. tabs:: .. tab:: Django .. literalinclude:: /../../apiCode/dj/lock/views.py 数据 ========================================= 多对多关系数据 ---------------------------------------- 前端用穿梭狂 后端处理流程: 1. 取现有到数据到集合 2. 求差集获取新增数据,然后set.add 3. 差集获取删除数据, 然后set.delete 部署 ========================================= 方案一: ansible + supervisor + venv ---------------------------------------- 在宿主机部署django应用, 通过supervisor管理进程 场景1是celery程序, 部署方便 场景2是用到docker的地方 前期阶段可以编写单文件playbook.yml .. code-block:: text playbooks/ playbook.yml supervisor.conf.j2 后期再考虑分目录规范playbook剧本 方案二: docker容器 ---------------------------------------- cicd构建镜像, 推送到仓库, 在服务器上运行容器