Django-客户管理模块(1)增删改查
Django-客户管理模块(1)增删改查

Django-客户管理模块(1)增删改查

搞明白了序列化器,让我们继续往下,那就是喵喵CRM第一个重要的模块——客户管理模块!

models.pyserializers.py暂时不管,之前讲过,定义好即可。

我们看下views.py怎么搞

class CurrentUserAPIView(APIView):
    permission_classes = [IsAuthenticated]
    # 确保只有登录的用户能访问

    def get(self, request):
        # 使用当前用户数据序列化
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

class CustomersSet(viewsets.ModelViewSet):
    serializer_class = CustomerSerializer
    filter_backends = [SearchFilter, OrderingFilter]
    search_fields = ["name", "email", "phone", "address"]
    ordering_fields = ["created_at", "updated_at", "name"]
    # 启用 DRF 自带的过滤后端。
    # SearchFilter:允许在 URL 上用 ?search=关键字 来搜索数据。
    # OrderingFilter:允许在 URL 上用 ?ordering=字段名 来排序。

    def get_queryset(self):
        return Customer.objects.all()

    def perform_create(self, serializer):
        serializer.save()
        # perform_create 是 DRF 在执行 create() 方法时会调用的钩子。
        # 默认 serializer.save() 就会把数据存进数据库。

客户管理和当前用户信息显示不同,是基于ModelViewSet模块。ModelViewSet 是 DRF 提供的一个“全家桶”,自动实现 增删改查(CRUD)

filter则是过滤器,search就是搜索,ordering就是排序,比如:/api/customers/?ordering=-created_at → 按创建时间倒序排列。/api/customers/?search=Tom → 搜索 name/email/phone/address 中包含 “Tom” 的客户。

proform_create就是 DRF 在执行 create() 方法时会调用的钩子。

钩子就是框架留的“插口”。框架在运行某个流程时,会在关键节点“留一个口子”,让我们可以插自己的逻辑进去,不需要去改动框架本身。

然后把urls.py改一下:

from . import views
from .views import CurrentUserAPIView, CustomersSet
from django.urls import path, include
from rest_framework.routers import DefaultRouter


router = DefaultRouter()
router.register(r"customers", CustomersSet, basename="customer")

urlpatterns = [
    path("register/", views.register_view, name="register"),
    path("login/", views.login_view, name="login"),
    path("logout/", views.logout_view, name="logout"),
    path("home/", views.home_view, name="home"),
    path("api/", include(router.urls)),
]

然后就可以这样访问:

  • GET /api/customers/ → 获取客户列表
  • POST /api/customers/ → 新建客户
  • GET /api/customers/{id}/ → 获取客户详情
  • PUT /api/customers/{id}/ → 更新客户(整体更新)
  • PATCH /api/customers/{id}/ → 更新客户(部分更新)
  • DELETE /api/customers/{id}/ → 删除客户

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注