【Django】代码最佳实践【原创】

本文介绍了基于Django的项目开发最佳实践,包括创建虚拟环境、安装Django、应用目录结构、代码规范、API返回格式、日志配置、Sentry错误管理、Redis和MySQL的使用、Celery的集成以及rest-framework的使用。强调了业务逻辑应放在服务层,views层仅负责数据交互,并提供了详细的步骤指导。
摘要由CSDN通过智能技术生成

目录

参考

概要

目录结构

API返回格式

步骤

1. 建立虚拟环境

2. 安装和建立Django

3. 新建应用App

4. 修改settings.py

5. 测试

6. 增加函数库

7. 修改hello方法

8. 规范目录

9. 增加日志配置

10. 引入Sentry - 非必须

11. 引入Redis

12. 使用MySQL 

13. 建立超管

14. 引入Celery - 非必须

15. 引入rest-framework


参考

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值