• 02 drf源码剖析之快速了解drf


    02 drf源码剖析之快速了解drf

    1. 什么是drf

    • drf是一个基于django开发的组件,本质是一个django的app
    • drf可以为我们快速开发出一个遵循restful规范的程序。

    2. 安装

    pip3 install djangorestframework
    

    3. 使用

    • 注册app

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          'rest_framework'
      ]
      
    • 写路由

      from django.conf.urls import url
      from django.contrib import admin
      from api import views
      urlpatterns = [
          url(r'^admin/', admin.site.urls),
      
          url(r'^drf/article/$', views.ArticleView.as_view()),
          url(r'^drf/article/(?P<pk>d+)/$', views.ArticleView.as_view()),
      ]
      
      # get获取列表
      # post增加数据
      
    • 写视图

      • 根据请求方式不同做不同的操作
      class ArticleView(APIView):
          def get(self,request,*args,**kwargs):
              pk = kwargs.get('pk')
              if not pk:
                  queryset = models.Article.objects.all()
                  ser = serializer.ArticleSerializer(instance=queryset,many=True)
                  return Response(ser.data)
              article_object = models.Article.objects.filter(id=pk).first()
              ser = serializer.ArticleSerializer(instance=article_object, many=False)
              return Response(ser.data)
      
          def post(self,request,*args,**kwargs):
              ser = serializer.ArticleSerializer(data=request.data)
              if ser.is_valid():
                  ser.save()
                  return Response(ser.data)
              return Response(ser.errors)
      
          def put(self,request,*args,**kwargs):
              """全部更新"""
              pk = kwargs.get('pk')
              article_object = models.Article.objects.filter(id=pk).first()
              ser = serializer.ArticleSerializer(instance=article_object,data=request.data)
              if ser.is_valid():
                  ser.save()
                  return Response(ser.data)
              return Response(ser.errors)
      
          def patch(self,request,*args,**kwargs):
              """局部"""
              pk = kwargs.get('pk')
              article_object = models.Article.objects.filter(id=pk).first()
              ser = serializer.ArticleSerializer(instance=article_object, data=request.data,partial=True)
              if ser.is_valid():
                  ser.save()
                  return Response(ser.data)
              return Response(ser.errors)
      
          def delete(self,request,*args,**kwargs):
              """删除"""
              pk = kwargs.get('pk')
              models.Article.objects.filter(id=pk).delete()
              return Response('删除成功')
      
      
    • serializers序列化

      • serializers数据校验
      • serializers序列化
      from rest_framework import serializers
      from api import models
      class ArticleSerializer(serializers.ModelSerializer):
          category_txt = serializers.CharField(source='category.name',required=False)
          x1 = serializers.SerializerMethodField()
      
          status_txt = serializers.CharField(source='get_status_display',required=False)
      
          x2 = serializers.SerializerMethodField()
          class Meta:
              model = models.Article
              # fields = "__all__"
              fields = ['id','title','summary','content','category','category_txt','x1','status','status_txt','x2']
              # depth = 1
      
          def get_x1(self,obj):
              return obj.category.name
      
          def get_x2(self,obj):
              return obj.get_status_display()
      
      
    • 利用postman进行前端校验

      • 模拟浏览器进行发送请求

    3. DRF的应用场景

    • 前后端分离项目
    • 为app写接口
    • 写移动端接口
    • 以上用drf会比较方便
  • 相关阅读:
    selenium——上传文件
    selenium——下拉框
    selenium——鼠标操作ActionChains:点击、滑动、拖动
    selenium定位元素—逻辑运算、xpath函数、轴定位
    spring设置webAppRootKey
    树莓3 集群
    redis集群搭建
    MQ基础
    MQ集群测试环境搭建(多节点负载均衡,共享一个kahaDB文件(nas方式))
    weblogic对jms实现的QueueConnection实现与TopicConnection实现问题
  • 原文地址:https://www.cnblogs.com/liubing8/p/11938113.html
Copyright © 2020-2023  润新知