Django-Ninja Takeout
基于 7y 大佬的项目:Django Ninja 实战外卖项目
项目初始化
创建 Django 项目
直接使用 PyCharm 创建一个 Django 项目

创建应用
这一步创建三个应用user、product、order
普通创建
通过脚本命令,执行python manage.py startapp [应用名称]来创建
1 | (venv) ➜ takeout python manage.py startapp user |
专业版创建
通过 Tools -> Run manage.py Task…打开执行脚本命令行

可以通过带有提示的命令脚本执行 manage 下的脚本命令

创建好三个应用之后,通过在项目目录下创建一个
apps的包,将这三个应用移动至 apps 下

注册应用
在 Django 中需要把上面创建的 app 都注册进去
在/takeout/takeout/settings.py 中修改以下内容
1 | # 解决跨域 |
配置 Django-Ninja 依赖
安装 Ninja&pillow
pip install django-ninja pillow
配置静态路由
在/apps 下新建一个 api.py 文件
1 | # -*- coding:utf-8 -*- |
在/takeout/urls.py 加入 app 的 url
1 | from django.contrib import admin |
先在manage.py同级目录下创建文件夹/static, /media,再去takeout/takeout/settings.py有的修改、没有的追加
1 | DEBUG = True |
添加 static 静态资源路径
1 | """ |
运行项目
1 | 生成表 |
1 | (venv) ➜ takeout python manage.py migrate |



模型类
user
编写用户信息表和地址的模型类
1 | from django.db import models |
product
编写菜品类
1 | from django.db import models |
order
编写订单类
1 | from django.db import models |
迁移并生成表到 SQLite
执行以下迁移命令即可
1 | (venv) ➜ takeout python manage.py makemigrations |

管理后台
User 管理
调整 User
给 status 添加一个选择列表,可以再 admin 管理后台看到
1 | from django.db import models |
修改模型内容后迁移一下
1 | (venv) ➜ takeout python manage.py makemigrations |
实现用户管理
修改 app/user/admin.py 的内容
1 | from django.contrib import admin |


Product 管理
调整 Product
1 | from django.db import models |
修改模型内容后迁移一下
1 | (venv) ➜ takeout python manage.py makemigrations |
安装 json 展示插件
Django-admin 会默认直接展示 json 内容,不直观所以引入该插件
pip install django-jsoneditor
之后还需要在 settings.py 中注册一下
1 | INSTALLED_APPS = [ |
1 | (venv) ➜ takeout python manage.py collectstatic |
实现菜品管理
1 | from django.contrib import admin |


Order 管理
调整 Order
1 | from django.db import models |
修改完迁移下模型
1 | (venv) ➜ takeout python manage.py makemigrations |
实现订单管理
1 | from django.contrib import admin |


登录页面接口
通用响应模型
在/takeout/apps 下创建一个 schemas.py 文件
1 | # -*- coding:utf-8 -*- |
获取验证码接口
sendMsgPOST

接口实现
takeout/apps/user/schemas.py定义请求模型
1 | # -*- coding:utf-8 -*- |
takeout/apps/user/views.py
1 | import random |
注册 router
takeout/apps/api.py
1 | from ninja import NinjaAPI |
预览

登录接口
如果登录的用户存在 user 表中,则直接登录,否则注册并登录
请求参数 schemas
1 | # -*- coding:utf-8 -*- |
接口实现
1 | import random |
退出登录
1 | import random |

首页显示接口
takeout/apps/product目录下
Schema
takeout/apps/product/schemas.py
1 | import json |
分类列表
takeout/apps/product/views.py
1 | import os.path |
认证
某些接口需要用户登录之后才能操作,
takeout/apps/auth.py
1 | from ninja.errors import AuthenticationError |
预览
H5 商品价格显示问题,修改
takeout/static/front/index.html
1 | <!-- <div class="divBottom"><span>¥</span><span>{{item.price / 100}}</span></div> --> |

暂时到这里
更新: 2024-07-17 22:54:08
原文: https://www.yuque.com/zacharyblock/cx2om6/awbybg98ch6hs25g