4 Star 46 Fork 35

Aeasringnar / django-RESTfulAPI

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

drfAPI

基于 Django 3.2 的 RESTfulAPI 风格的项目模板,用于快速构建高性能的服务端。

技术栈

  • 框架选择:基于 Django 3.2 + django-rest-framework 3.12
  • 数据模型:基于 MySQL 存储,使用 mysqlclient 作为驱动,测试也可使用内置 sqlite3
  • 授权验证:基于 JWT 鉴权,来自 PyJWT,并做了单点登录的优化。
  • 内置功能:自定义命令、代码生成、文件处理、用户系统、异常处理、异步处理、全文检索、动态权限、接口返回格式化、Swagger文档、日志格式化、分页、模糊查询、过滤、排序、动态缓存、分布式锁、国际化等

快速入门

如需进一步了解,参见 Django 文档

本地开发

pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
python manage.py loaddata apps/user/user.json
python manage.py ruserver 0.0.0.0:8000
open http://localhost:8000/swagger/

如何创建新的 App

1、使用自定义命令创建 App

python manage.py startmyapp your_app_name

2、将 App 加入到 Settings 中

INSTALLED_APPS = [
   ...
   'apps.your_app_name',
   ...
]

3、编写您的 models、serializers、views、urls

一般来说,您的正常开发流程如下:

  1. 根据业务编写您的模型文件 models.py
  2. 根据模型和您的需求编写您的序列化器 serializers.py
  3. 根据模型、序列化器、权限来编写您的视图文件 views.py
  4. 根据视图文件编写您的路由文件 urls.py
  5. 最后将您的路由添加到入口路由文件中,默认它位于 ./drfAPI/urls.py

4、本项目提供了对于 CRUD 代码的自动生成命令

首先需要创建好需要的模型文件

然后将需要生成的信息更新到生成代码的json文件中,它需要遵循以下的逻辑,它的位置在./configs/generateCode.json

注意:json 文件中的 key 是不能更改的

[
  {
    "app_name": "public", # 标明你要生成代码的AppName
    "models": [ # 标明你要生成代码的模型
      {
        "model_name": "ConfDict", # 具体的模型类名
        "verbose": "系统字典", # 模型的中文标识
        "searchs": [ # 标明这个模型生成的代码需要的搜索字段,如果不需要可以删除
          "dict_key",
          "dict_value"
        ],
        "filters": [ # 标明这个模型生成的代码需要的过滤字段,如果不需要可以删除
          "dict_type"
        ]
      }
    ]
  }
]

执行生成代码的命令

python manage.py generatecode

然后查看你的 App,再进行自定义的微调。

国际化支持

当前模版使用英文作为默认语言 在 settings 中已经做了中英文适配,要实现 i18n 的流程如下

1、修改 settings 配置文件

...
from django.utils.translation import gettext_lazy as _
...

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware', # 国际化中间件
    ...
]
...
LOCALE_PATHS = [
    Path.joinpath(Path.joinpath(BASE_DIR, 'i18n'), 'locale')
]
LANGUAGES = [
    ('en', _('English')),
    ('zh-hans', _('Simplified Chinese')),
]
LANGUAGE_CODE = 'en'  # 默认使用英文
...

2、标记需要翻译的文本 注意的是你在返回 json 时需要翻译的文本,需要先进行标记,例如:

from django.utils.translation import gettext_lazy


class TestView(APIView):
    authentication_classes = (JwtAuthentication, )
    permission_classes = (AllowAny, )
    throttle_classes = (VisitThrottle, )
    
    def get(self, request):
        # 使用 gettext_lazy 标记需要翻译的文本
        res = MyJsonResponse(res_data={'msg': gettext_lazy('test success')})
        return res.data

3、使用命令生成消息文件

在项目根目录执行命令

如果你在根目录使用了虚拟环境,需要使用 -i 指定你的虚拟环境目录,用去忽略该目录。如果不这么做可能会发生问题

-l en 表示生成英文的翻译文件

-l zh_hans 表示生成中文的翻译文件

python manage.py makemessages -l zh_hans -i venv

如果看到输出 processing locale zh_hans 表明消息文件生成好了

并且可以看到设置 LOCALE_PATHS 目录内会生成好指定的 django.po 文件,内容如下

...
#: apps/public/views.py:101
msgid "test success"
msgstr ""

#: drfAPI/settings.py:144
msgid "English"
msgstr ""

#: drfAPI/settings.py:145
msgid "Simplified Chinese"
msgstr ""
...

这个文件需要手动修改 msgstr 为对应的中文翻译,如下示

...
#: apps/public/views.py:101
msgid "test success"
msgstr "测试成功"

#: drfAPI/settings.py:144
msgid "English"
msgstr "英语"

#: drfAPI/settings.py:145
msgid "Simplified Chinese"
msgstr "简体中文"
...

4、生成二进制 .mo 文件

在项目根目录执行命令

python manage.py compilemessages -i venv

如果看到输出 processing file django.po in 你的项目目录/django-RESTfulAPI/i18n/locale/zh_hans/LC_MESSAGES 表明二进制文件生成好了

线上部署

bash server.sh start  # 获取帮助:bash sever.sh help 默认启动端口为 8001
MIT License Copyright (c) 2022 aeasringnar Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于 Django 3.2 的 RESTfulAPI 风格的项目模板,用于快速构建企业级高性能的服务端。 展开 收起
Python 等 3 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/aeasringnar/django-RESTfulAPI.git
git@gitee.com:aeasringnar/django-RESTfulAPI.git
aeasringnar
django-RESTfulAPI
django-RESTfulAPI
master

搜索帮助