• django rest framework快速使用


    一、安装相关的依赖
    $ pip install djangorestframework
    $ pip install markdown       # Markdown support for the browsable API.
    $ pip install django-filter  # Filtering support
    
    • 1
    • 2
    • 3
    二、将rest_framework添加到INSTALLED_APPS中

    setting.py

    INSTALLED_APPS = [
        ...
        'rest_framework',
    ]
    
    • 1
    • 2
    • 3
    • 4
    三、基础例子
    1. 创建一个django项目并创建book app

      $ python djang-admin createproject myapp
      $ python manage.py startapp book
      
      • 1
      • 2
    2. 新建model

      book/models.py

      from django.db import models
      class Book(models.Model):
          title = models.CharField(max_length=32, verbose_name='书籍名称')
          price = models.IntegerField(verbose_name="价格")
          pub_date = models.DateField(verbose_name="出版日期")
      
      • 1
      • 2
      • 3
      • 4
      • 5
    3. 创建Book序列化器和Book view

      book/views.py

      # 序列化器
      class BookViewSerializer(serializers.Serializer):
          title = serializers.CharField(max_length=32)
          price = serializers.IntegerField()
           # 自定义映射参数中的字段和model字段
          date = serializers.DateField(source='pub_date')
      
          def create(self, validated_data):
              saved_book = Book.objects.create(**validated_data)
              return saved_book
      
          def update(self, instance, validated_data):
              Book.objects.filter(pk=instance.pk).update(**validated_data)
              return Book.objects.get(pk=instance.pk)
      
      # 视图
      class BookView(APIView):
      
          def get(self, request):
              book_list = Book.objects.all()
              b = BookViewSerializer(instance=book_list, many=True)
              return Response(b.data)
      
          def post(self, request):
              data = request.data
              # 反序列化
              sers = BookViewSerializer(data=data)
              # 校验字段
              if sers.is_valid():
                  valid_data = sers.validated_data
                  sers.save()
                  # print(saved_book)
                  return Response(sers.data)
              else:
                  return Response(sers.errors)
      
      # 视图
      class BookDetailView(APIView):
          def get(self, request, id):
              book = Book.objects.get(pk=id)
              res = BookViewSerializer(instance=book)
              return Response(res.data)
      
          def put(self, request, id):
              data = request.data
              query_data = Book.objects.get(pk=id)
              sers = BookViewSerializer(instance=query_data, data=data)
              if sers.is_valid():
                  print(sers.validated_data)
                  sers.save()
                  return Response()
              else:
                  return Response(sers.errors)
      
          def delete(self, request, id):
              Book.objects.filter(pk=id).delete()
              return Response()
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
    4. 配置路由

      book/urls.py

      from django.urls import path, re_path
      
      from . import views
      urlpatterns = [
          path('book/', views.BookView.as_view()),
          re_path('book/(\d+)', views.BookDetailView.as_view()),
      ]
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
    5. 将应用路由添加到项目路由中

      myapp/urls.py

      urlpatterns = [
          ...
          path('book/', include('book.urls'))
      ]
      
      • 1
      • 2
      • 3
      • 4
    6. 安装app

      myapp/settings.py

      INSTALLED_APPS = [
          ...
          'rest_framework',
        	'book',
      ]
      
      • 1
      • 2
      • 3
      • 4
      • 5
    7. 访问路由

      列表:curl http://server/book/book/ get
      详情:curl http://server/book/book/1 get
      添加:curl http://server/book/book/ post
      更新:curl http://server/book/book/1 put
      删除:curl http://server/book/book/1 delete
      
      • 1
      • 2
      • 3
      • 4
      • 5
    四、Django rest framework高度封装例子

    在步骤三中的项目为基础,model无变化

    1. Views.py修改

      book/views.py

      from rest_framework.viewsets import ModelViewSet
      from rest_framework import serializers
      # 序列化器
      class BookViewSerializer(serializers.ModelSerializer):
          date = serializers.CharField(source='pub_date') # 自定义映射参数中的字段和model字段
          class Meta:
              model = Book
              exclude = ['pub_date']
      # 视图        
      class BookView(ModelViewSet):
          queryset = Author.objects.all()
          serializer_class = AuthorSerializer
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    2. urls.py修改

      from rest_framework import routers
      router = routers.DefaultRouter()
      
      router.register('book', views.BookView)
      
      urlpatterns = [
          ...
      ]
      urlpatterns += router.urls
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      router.register(‘book’, views.BookView)将会生成和步骤三.4一样的路由

      path('book/', views.BookView.as_view()),
      re_path('book/(\d+)', views.BookDetailView.as_view()),
      
      • 1
      • 2

      后面的访问和步骤三一致。

  • 相关阅读:
    基于typescript开发的threejs3D动画项目
    1768.交替合并字符串
    【2022秋招面经】——测试
    自学Python需要掌握哪些知识点?怎么学?
    “memory“ clobber
    Linux命令行操作:使用“more“命令进行分页显示
    观成科技:证券行业加密业务安全风险监测与防御技术研究
    Direct3D中的绘制
    java计算机毕业设计共享汽车管理系统MyBatis+系统+LW文档+源码+调试部署
    Java 入门练习(21 - 25)
  • 原文地址:https://blog.csdn.net/fggdgh/article/details/126443483