DRF(Django REST framework),算是一个Django的补丁?总之如果想用好Django满足一些更为便捷的开发功能,DRF就不可少。
安装指令pip install djangorestframework,我们在之前的环境重构时候就已经安装了。不过需要注意的是,如果我们想要用起来,还需要在mycrm/settings.py下把rest_framework加入app:

在Django原生的开发里,“模型”(model)把数据存到了数据库中,但需要给前端返回JSON数据或从前端接收JSON数据写入数据库,Django原生功能不太够用。 Django REST framework 里通过序列化器(serializer)来做这件事。 简单来说,serializers 就是数据模型和JSON之间的桥梁: 把模型对象转成JSON(序列化,输出) 把JSON数据解析成模型对象(反序列化,输入)。
Serializers
序列化器可以将原有的模型转换成JSON,我们在Customers下新建一个serializers.py的文件,用来写对应的序列化器。
from rest_framework import serializers
from .models import Customer
class CustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = '__all__'
这儿有两个问题,一是类里面套了另一个类,为什么?因为 Django 认为:Meta → 描述“配置/约束”。类主体 → 描述“数据结构/逻辑”,算是一种独特的写法,如果不想用,扔到__init__里面应该是类似效果。
二是fields参数的含义,这个是指定需要序列化的字段,比如model里某些字段不想序列化,那就不要写进来。如果我们只想处理id、name和email,那就fields = ['id','name','email']即可。当然,也可以写exclude = [除了id、name和email的其他字段],能起到同样的效果。
此外,我们也可以通过read_only_fields和extra_kwargs来配置每个字段规则,后面用到再说,不再赘述。
获取当前用户信息
此处我们增加一个获取当前用户信息的功能,以测试序列化的特点。
# customer/serializers
# 加入这样一个类
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['username', 'email']
# customer/views
# 加入一个类视图
class CurrentUserAPIView(APIView):
permission_classes = [IsAuthenticated]
# 确保只有登录的用户能访问
def get(self, request):
# 使用当前用户数据序列化
serializer = UserSerializer(request.user)
return Response(serializer.data)
# customer/urls
# 路由配置
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/current-user/', CurrentUserAPIView.as_view(), name='current_user'),
]
这样,就可以通过http://127.0.0.1:8000/api/current-user/来访问这个接口,看到当前登录用户的信息了。