目录
参考
https://www.freebuf.com/column/165233.html
https://www.freebuf.com/column/165968.html
概要
代码规范可以参考【Python】代码规范【原创】
基于Django的项目最佳实践
注意:不支持Django3.0,会报错,主要是Celery那里会报错
- 接入Sentry,实现错误日志管理
- 使用rest-framework,实现API的restful风格
- 使用数据库来作为存储
- 支持使用Redis
- 接入Celery,实现异步和定时任务
- 定时任务支持由admin管理后台来控制
- 增加日志配置
代码可以参考:代码仓库
目录结构
大概的目录结构如下:
项目名
|—— 项目名
| |—— __init__.py
| |—— settings.py
| |—— urls.py
| |—— wsgi.py
| |—— views.py
| |—— config
| |—— __init__.py
| |—— local.py
| |—— dev.py
| |—— prod.py
|—— 应用名
| |—— migrations
| |—— __init__.py
| |—— models
| |—— __init__.py
| |—— base_model.py
| |—— user.py
| |—— views
| |—— __init__.py
| |—— user.py
| |—— services
| |—— __init__.py
| |—— user_service.py
| |—— serializers
| |—— __init__.py
| |—— user.py
| |—— tasks
| |—— __init__.py
| |—— xxx_task.py
| |—— __init__.py
| |—— tests.py
| |—— apps.py
| |—— admin.py
| |—— urls.py
|—— sql
| |—— init.sql
| |—— 20190808_create_table.sql
|—— common
| |—— __init__.py
| |—— functions.py
|—— docs
|—— nginx
| |—— xxxx.conf
|—— supervisor
| |—— __init__.py
| |—— gunicorn_conf.conf
| |—— local.conf
| |—— dev.conf
| |—— prod.conf
|—— collectedstatic
| |—— admin
| |—— css
| |—— vendor
| |—— xxx.css
| |—— fonts
| |—— img
| |—— xxx.jpg
| |—— js
| |—— vendor
| |—— xxx.js
| |—— 应用名
| |—— css
| |—— vendor
| |—— xxx.css
| |—— fonts
| |—— img
| |—— xxx.jpg
| |—— js
| |—— vendor
| |—— xxx.js
|—— requirements.txt
|—— manage.py
|—— README.md
注意:应用目录下的tasks目录是Celery任务需要的,非必须
原则
应用的views层里面不写具体的业务逻辑,只从请求中获取参数以及返回数据给前端即可,具体的业务逻辑都写在服务层(services),通过服务层去调用模型层(model)的数据,进行筛选和处理然后返回给views层,views层再返回给前端
API返回格式
API返回Json格式,需要返回三个字段,data的格式并不限制,一般是字符串、字典或列表
{
"code": 0,
"message": "success",
"data": {}
}
步骤
1. 建立虚拟环境
注意:怎么安装和使用虚拟环境可以参考:【Virtualenv】Python的虚拟环境Virtualenv和Virtualenvwrapper【原创】
mkvirtualenv 项目名
workon 项目名
2. 安装和建立Django
pip install django
django-admin startprojrct 项目名
注意:建议使用Django 2.2版本,不使用最新的Django3.0版本,会存在admin管理页面进不去(Django 3.0.3和Python 3.7有可能会冲突导致Django停止运行)以及和Celeat-beat冲突
3. 新建应用App
cd 项目名
python manage.py startapp app
4. 修改settings.py
增加config目录,config目录里面新增3个文件:local.py,dev.py,prod.py,除了prod.py的Debug模式需要关闭外其他都要开启
local.py:
# -*- coding:UTF-8 -*-
# debug模式为开启
DEBUG = True
修改settings.py:
INSTALLED_APPS = [
...
'app'
]
# 允许其他的机器访问该服务器的Django应用
ALLOWED_HOSTS = ['*']
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
# 获取环境变量
ENV_PROFILE = os.getenv("ENV")
# 根据环境来加载不同的配置文件
if ENV_PROFILE == "prod":
from .config.prod import *
elif ENV_PROFILE == "dev":
from .config.dev import *
else:
ENV_PROFILE = 'local'
from .config.local import *
注意:注释掉settings.py中的DEBUG
5. 测试
app/views.py:
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def hello(request):
result = {
'code': 0,
'message': 'success',
'data': [],
}
return JsonResponse(result)
app目录增加urls.py:
from django.urls import path
from app import views
urlpatterns = [
path('hello', views.hello),
]
urls.py增加app的路由:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/app/', include('app.urls'))
]
浏览器访问127.0.0.1:8000/api/app/hello来测试
6. 增加函数库
先下载相关依赖:
pip install requests
pip install IPy
增加common目录,common目录下新增functions.py
具体的函数库代码可以参考:【Django】函数库
7. 修改hello方法
app/views.py:
from common.functions import render_json
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def hello(request):
return render_json(0, 'success', 'Hello')
8. 规范目录
增加sql、logs目录
增加requirements.txt文件:
pip freeze > requirement.txt
app目录下增加models包目录和services包目录,app下删掉models.py文件
app/models目录下新增:base_model.py:
from django.db import models
class BaseModel(m