搞明白了序列化器,让我们继续往下,那就是喵喵CRM第一个重要的模块——客户管理模块!
models.py和serializers.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}/→ 删除客户