引子:
最近在公司的gitlab上看到其他的测试工具,其中一套数据工程是依赖django的 rest_framework 实现的,自己写了个demo玩了一把,扩展一下。
目录结构:
代码:
models.py
from django.db import models # Create your models here. class UserInfo(models.Model): #id = models.AutoField(primary_key=True) name = models.CharField(max_length=255) sex = models.IntegerField() level = models.IntegerField() weight = models.IntegerField() class Meta: db_table = 'user_info'
serializers.py 在models层和views层中间加了个序列化器,作用呢就是把views获取的数据序列化成model实例,然后呢再把models反序列化成数据给用户
from rest_framework import serializers from app01.models import UserInfo class UserInfoSerializer(serializers.ModelSerializer): """序列化器""" class Meta: model = UserInfo fields = '__all__'
views.py 依赖于django的cbv实现
继承的父类 ModelViewSet ,这个类又继承了 GenericAPIView 然而 GenericAPIView 又继承了 views.APIView
from rest_framework.viewsets import ModelViewSet from app01.serializers import UserInfoSerializer,UserInfo class UserInfoView(ModelViewSet): # queryset 想想 django orm返回的数据结构 # 这里存储所有的数据库查询之后的返回 queryset = UserInfo.objects.all() # 制定在当前视图中 进行序列化以及反向序列化使用的序列化器 serializer_class = UserInfoSerializer
urls.py
这里的urls 是 django的根路由,当然可以用二级路由
from django.contrib import admin from django.urls import path,include from app01 import urls as app01_urls from rest_framework.routers import DefaultRouter from app01 import views router=DefaultRouter() router.register(r'users',views.UserInfoView,base_name='userss')# 在路由器专用注册视图 print(router.urls) urlpatterns = [ #path('admin/', admin.site.urls), path('', include(router.urls)), ]
效果:
总结 :
1、rest风格的接口,确实能减少代码量,达到快速开发的目的
2、serializers 序列化器的使用,能快速达到数据转换的目的
3、rest能使代码风格更加的简洁