django-rest-framwork例子

本文深入探讨了一套经过十年磨砺的Java开发体系,包括REST框架的实现,通过HyperlinkedModelSerializer进行序列化,使用ModelViewSet处理视图逻辑,以及通过routers进行URL配置。文章详细介绍了如何在Django项目中集成这些组件,实现高效的数据管理和API服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rest_framwork Demo

下列代码中分别使用了如下功能:

  • serializers.HyperlinkedModelSerializer
  • viewsets.ModelViewSet
  • routers

代码如下:

settings.py

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "quickstart.apps.QuickstartConfig",
    "rest_framework"
]

models.py

from django.db import models


class TestGroup(models.Model):
    name = models.CharField(max_length=100, verbose_name="组名")
    desc = models.CharField(max_length=200, verbose_name="描述")
    role_id = models.IntegerField(default=1, verbose_name="1 主管 2组员")

    class Meta:
        db_table = "test_group"

    def __str__(self):
        return self.name

serialize.py

需自己新建

from django.contrib.auth.models import User, Group
from quickstart.models import TestGroup
from rest_framework import serializers


class TestGroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = TestGroup
        fields = ("name", "desc", "role_id")


class UserSerializer(serializers.HyperlinkedModelSerializer):
    def create(self, validated_data):
        pass

    def update(self, instance, validated_data):
        pass

    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'groups')


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ('url', 'name')

views.py

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

from quickstart.models import TestGroup
from quickstart.serialize import UserSerializer, GroupSerializer, TestGroupSerializer


# Create your views here.

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    queryset = Group.objects.all()
    serializer_class = GroupSerializer


class TestGroupViewSet(viewsets.ModelViewSet):
    queryset = TestGroup.objects.all()
    serializer_class = TestGroupSerializer

    def get_queryset(self):
        """自定义get请求"""
        role_id = self.request.query_params.get("role_id", None)
        if role_id is None:
            queryset = super(TestGroupViewSet, self).get_queryset()
        else:
            queryset = TestGroup.objects.filter(role_id)
        return queryset

    @action(methods=["GET"], detail=True)
    def get_user(self, request, pk):
        """
        获取主管方法:虽然request和pk在这里没使用,但也必须要传
        将生成以下路由:
        网址格式(url_path): test_group/1/director/
        网址名称(url_name): 'test_group-director'
        :param request:request
        :param pk:id
        :return:serializer object
        """
        queryset = self.get_object()  # 自动拿到pk并获取到queryset
        serialize = self.get_serializer(queryset)
        return Response(serialize.data)


urls.py

from django.urls import path, include
from rest_framework import routers

from quickstart.views import UserViewSet, GroupViewSet, TestGroupViewSet

router = routers.DefaultRouter()
router.register("user", UserViewSet)
router.register("group", GroupViewSet)
router.register("test_group", TestGroupViewSet)

urlpatterns = [
    path("", include(router.urls)),
    path("api-auth/", include("rest_framework.urls", namespace="rest_framework"))
]

实际使用:

223916_bL9y_2663968.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值