django rest framework快速使用

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

setting.py

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

    $ python djang-admin createproject myapp
    $ python manage.py startapp book
    
  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="出版日期")
    
  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()
    
    
  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()),
    ]
    
  5. 将应用路由添加到项目路由中

    myapp/urls.py

    urlpatterns = [
        ...
        path('book/', include('book.urls'))
    ]
    
  6. 安装app

    myapp/settings.py

    INSTALLED_APPS = [
        ...
        'rest_framework',
      	'book',
    ]
    
  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
    
四、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
    
  2. urls.py修改

    from rest_framework import routers
    router = routers.DefaultRouter()
    
    router.register('book', views.BookView)
    
    urlpatterns = [
        ...
    ]
    urlpatterns += router.urls
    

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值