当前位置: 首页 > wzjs >正文

网站建设的收费企业网站主页模板

网站建设的收费,企业网站主页模板,网站建设策划书结束语,短网址服务平台Django DRF API 编写规范(程序设计规则) 为了确保 Django DRF 代码的可维护性、可扩展性和高质量,API 设计不仅要符合 RESTful 规范,还需要遵循一定的程序设计规则。以下是一些关键的编写规范,以保证代码的清晰性、可…

Django DRF API 编写规范(程序设计规则)

为了确保 Django DRF 代码的可维护性、可扩展性和高质量,API 设计不仅要符合 RESTful 规范,还需要遵循一定的程序设计规则。以下是一些关键的编写规范,以保证代码的清晰性、可读性和稳定性。


一、代码组织与结构

(一)项目目录结构

建议遵循 Django 的最佳实践,将 API 代码模块化,保持清晰的层次结构:

my_project/
│── my_app/
│   │── models.py          # 数据模型
│   │── serializers.py     # 序列化器
│   │── views.py          # 视图
│   │── urls.py           # 路由
│   │── permissions.py    # 权限
│   │── paginations.py    # 分页
│   │── filters.py        # 过滤器
│   │── services.py       # 业务逻辑
│   └── tests/            # 单元测试
│── config/
│   │── settings.py       # 项目配置
│   │── urls.py           # 主路由
│── manage.py
  • models.py:定义数据库模型
  • serializers.py:定义数据序列化逻辑
  • views.py:编写 API 逻辑
  • permissions.py:自定义权限
  • paginations.py:自定义分页逻辑
  • filters.py:定义过滤器
  • services.py:封装业务逻辑,避免视图代码膨胀
  • tests/:单元测试,提高代码质量

二、视图层规范

(一)优先使用 ViewSet

避免 APIView,尽可能使用 ModelViewSet 来减少代码重复:

from rest_framework.viewsets import ModelViewSet
from .models import User
from .serializers import UserSerializerclass UserViewSet(ModelViewSet):queryset = User.objects.all()serializer_class = UserSerializer

如果 ViewSet 过重,可以拆分逻辑到 services.py,避免过多业务逻辑混杂在视图层。

(二)限制 ViewSet 的 HTTP 方法

如果某个 ViewSet 只需要支持部分 HTTP 方法,应在 viewset 里限制:

class UserViewSet(ModelViewSet):queryset = User.objects.all()serializer_class = UserSerializerhttp_method_names = ['get', 'post', 'patch', 'delete']

三、序列化器(Serializers)规范

(一)使用 ModelSerializer

尽可能使用 ModelSerializer,减少重复代码:

from rest_framework import serializers
from .models import Userclass UserSerializer(serializers.ModelSerializer):class Meta:model = Userfields = ["id", "username", "email", "created_at"]

(二)避免 serializers.Serializer 直接定义字段

除非是特殊业务数据结构,否则不推荐手写字段:

# ❌ 不推荐
class CustomSerializer(serializers.Serializer):username = serializers.CharField()email = serializers.EmailField()

尽量使用 ModelSerializer 直接绑定模型,减少维护成本。

(三)字段验证逻辑放在 validate_xxx

class UserSerializer(serializers.ModelSerializer):class Meta:model = Userfields = ["id", "username", "email"]def validate_email(self, value):if "spam" in value:raise serializers.ValidationError("Email contains spam content")return value

四、业务逻辑拆分(Services 层)

为了避免 views.py 代码过于庞大,建议将业务逻辑封装到 services.py

# services.py
def create_user(username, email):if User.objects.filter(email=email).exists():raise ValueError("Email already exists")return User.objects.create(username=username, email=email)

然后在 views.py 里调用:

from .services import create_userclass UserViewSet(ModelViewSet):...def perform_create(self, serializer):create_user(serializer.validated_data["username"], serializer.validated_data["email"])

五、权限控制(Permissions)

(一)尽可能使用 permissions.py 单独管理权限

避免直接在 views.py 里写权限判断,而是使用 Django DRF 的 permissions 机制:

from rest_framework.permissions import BasePermissionclass IsAdminUserOrReadOnly(BasePermission):def has_permission(self, request, view):if request.method in ['GET']:return Truereturn request.user and request.user.is_staff

然后在 views.py 里使用:

class UserViewSet(ModelViewSet):permission_classes = [IsAdminUserOrReadOnly]

六、查询优化

(一)使用 select_relatedprefetch_related

避免 N+1 查询:

class UserViewSet(ModelViewSet):queryset = User.objects.select_related("profile").all()

(二)使用分页减少数据库压力

配置全局分页:

REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination','PAGE_SIZE': 10
}

七、异常处理

(一)全局异常处理

exception_handler.py 里统一管理异常:

from rest_framework.views import exception_handlerdef custom_exception_handler(exc, context):response = exception_handler(exc, context)if response is not None:response.data = {"code": response.status_code,"message": response.data.get("detail", "An error occurred")}return response

settings.py 里配置:

REST_FRAMEWORK = {'EXCEPTION_HANDLER': 'my_app.exception_handler.custom_exception_handler'
}

八、单元测试(Tests)

(一)测试 API 逻辑

编写 pytest 测试,确保 API 可用:

import pytest
from rest_framework.test import APIClient@pytest.mark.django_db
def test_create_user():client = APIClient()response = client.post("/api/users/", {"username": "john", "email": "john@example.com"})assert response.status_code == 201

(二)覆盖率标准

使用 pytest 运行测试,并确保代码覆盖率:

pytest --cov=my_app

总结

  1. 遵循 Django 项目目录结构,保持模块化设计
  2. 使用 ViewSet 处理 API 逻辑,并限制 HTTP 方法
  3. 优先使用 ModelSerializer,避免重复字段定义
  4. 业务逻辑拆分到 services.py,避免 views.py 代码过重
  5. 权限控制统一放在 permissions.py,避免手写权限逻辑
  6. 使用 select_relatedprefetch_related 进行查询优化
  7. 使用 custom_exception_handler 统一异常处理
  8. 编写 pytest 单元测试,确保代码稳定

通过这些规则,可以提升 Django DRF API 的可维护性、扩展性和高效性,使代码更加清晰易读。


文章转载自:

http://9CLyACGa.bybhj.cn
http://lTqdb9mw.bybhj.cn
http://dPyV1VJU.bybhj.cn
http://ZJjxCRfA.bybhj.cn
http://FH1oI63P.bybhj.cn
http://NXd3ohpL.bybhj.cn
http://1qoppcPc.bybhj.cn
http://X8d3ueei.bybhj.cn
http://TDUeNV7u.bybhj.cn
http://7XFu9J0X.bybhj.cn
http://x4Wj8WUC.bybhj.cn
http://IcYoTvsK.bybhj.cn
http://jvhBn8ck.bybhj.cn
http://cw1GfxhB.bybhj.cn
http://fhKFmmxJ.bybhj.cn
http://aPoUGGsw.bybhj.cn
http://Iqv06ba0.bybhj.cn
http://YOlyik5Z.bybhj.cn
http://RvGVq5K9.bybhj.cn
http://fGDXyrRi.bybhj.cn
http://LfaaKoDc.bybhj.cn
http://x3lqQJvj.bybhj.cn
http://tqNekKw1.bybhj.cn
http://5PvqrYXC.bybhj.cn
http://NcAiT5Ln.bybhj.cn
http://OWYn1szU.bybhj.cn
http://B28Pgv4A.bybhj.cn
http://9AYrT6ke.bybhj.cn
http://7Tn7llZc.bybhj.cn
http://8juMvFAF.bybhj.cn
http://www.dtcms.com/wzjs/604732.html

相关文章:

  • 大学生兼职网网站建设计划书成都建设二维码网站
  • 上海哪家做网站关键词排名百度淘宝网
  • 威海城乡和住房建设局网站江门鹤山最新消息新闻
  • 高端网站服务范围微信获客crm平台
  • 国产做的视频网站wordpress 免费 博客主题
  • 学习网站制作汽车网站设计论文
  • 可以自己做网站网络产品及其推广方法
  • 免费下载软件的网站有哪些常州做网站麦策电商
  • 邢台建设专业网站万网科技
  • 深圳平台网站建设外包网站销售如何做业绩
  • 天津设计网站建设网站设计规划表答案
  • 网站建设上线多久个人网站代做
  • 国家建设部网站平台合肥市建设信息中心网站
  • 哪些网站是营销型网站安徽省高路建设有限公司网站
  • 代做cad平面图的网站网站建设350元
  • 下载官方网站appwordpress付费版
  • 做网站的公司深圳开源的低代码开发平台
  • 变化型网页网站有哪些中卫装修设计
  • 网站做wanzhihou品牌官方网站
  • 湖南房产网电商网站如何做seo
  • 做商贸网站怎么代理传奇手游
  • 坪山商城网站建设哪家便宜网页程序编写
  • 微商城网站建设怎么样网站建设第三方
  • 凡科建站官网免费注册大数据营销
  • 建设银行杭州分行网站上海城隍庙属于哪个区
  • 专业人士怎样建网站网站开发开票交税
  • 鞍山网站制作小程序室内设计效果图一套
  • 建网站 服务器需要安装 tomcatpython发布WordPress
  • 北京市朝阳区网站制作广西住房城乡建设厅网站
  • 美术馆网站页面设计中邮通建设咨询有限公司官方网站