Django之rest_framework

引子:

  最近在公司的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能使代码风格更加的简洁

posted @ 2021-05-30 12:19  Yuan_x  阅读(367)  评论(0编辑  收藏  举报