【DRF】使用Django开发REST接口(2)

在这里插入图片描述


我们以在Django框架中使⽤的频道- 类别案例来写⼀套⽀持类别数据增删改查的REST API接⼝,来理解REST API的开发。
前后端传值都是JSON格式数据。

1、创建视图

import json

from django.http import JsonResponse, HttpResponse
from django.shortcuts import render
from django.views.generic.base import View

# Create your views here.
from app1.models import NewsChannel


class ChannelsAPIView(View):
    def get(self, request):
        '''
        GET  /channels/
        查询所有的频道信息
        :param request:
        :return:
        '''
        channel_queryset = NewsChannel.objects.all()

        channel_list = []

        for channel in channel_queryset:
            channel_list.append({
                'id': channel.id,
                'name': channel.name,
                'url': channel.url
            })

        return JsonResponse(channel_list,safe=False)

    def post(self,request):
        '''
        POST /channels/
        新增频道信息
        :param request:
        :return:
        '''
        #接收前端传递过来的参数
        params=request.body
        #校验参数
        if not params:
            return JsonResponse({'errormsg':'请求参数有误'})

        #将bytes类型转换为json格式的数据
        params_str=params.decode()
        #将str转换成dict歌颂数据
        params_dict=json.loads(params_str)

        #入库操作
        channel=NewsChannel.objects.create(name=params_dict.get('name'),
                                   url=params_dict.get('url'))
        #响应结果
        return JsonResponse({
                'id': channel.id,
                'name': channel.name,
                'url': channel.url
            },status=201)

class ChannelAPIView(View):
    def get(self,request,pk):
        '''
        GET  /channels/pk/
        #查询频道详细信息
        :param request:
        :param pk:
        :return:
        '''
        try:
            channel=NewsChannel.objects.get(pk=pk)
        except NewsChannel.DoesNotExist:
            return HttpResponse(status=404)

        return JsonResponse({
                'id': channel.id,
                'name': channel.name,
                'url': channel.url
            },status=201)

    def put(self,request,pk):
        '''
        PUT  /channels/pk/
        修改某条数据
        :param request:
        :return:
        '''
        try:
            channel=NewsChannel.objects.get(pk=pk)
        except NewsChannel.DoesNotExist:
            return HttpResponse(status=404)

        params = request.body
        if not params:
            return JsonResponse({'errormsg':'缺少必传参数'})

        params_str=params.decode()
        params_dict=json.loads(params_str)
        channel.name=params_dict.get('name','')
        channel.url=params_dict.get('url','')
        channel.save()

        return JsonResponse({
            'id': channel.id,
            'name': channel.name,
            'url': channel.url
        }, status=201)
    
    def delete(self,request,pk):
        '''
        DELETE /channels/pk/
        删除某条频道数据
        :param request: 
        :return: 
        '''
        try:
            channel=NewsChannel.objects.get(pk=pk)
        except NewsChannel.DoesNotExist:
            return HttpResponse(status=404)
        
        channel.delete()
        
        return HttpResponse(status=204)

2、注册路由

根路由

from django.contrib import admin
from django.urls import path,re_path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^',include('app1.urls'))
]

子路由

from django.urls import path,re_path
from . import views

urlpatterns=[
    re_path('^channels/$',views.ChannelsAPIView.as_view()),
    re_path('^channels/(?P<pk>\d+)/$',views.ChannelAPIView.as_view())
]

3、测试

查询列表数据
在这里插入图片描述

增加数据
在这里插入图片描述

查询单条数据
在这里插入图片描述

修改数据
在这里插入图片描述

删除数据
在这里插入图片描述

4、DRF开发REST接⼝步骤

在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增、删、改、查的实现流程基本套路化,所以这部分代码也是可以复⽤简化编写的:

增:校验请求数据 -> 执⾏反序列化过程 -> 保存数据库 -> 将保存的对象序列化并返回
删:判断要删除的数据是否存在 -> 执⾏数据库删除
改:判断要修改的数据是否存在 -> 校验请求的数据 -> 执⾏反序列化过程 ->保存数据库 -> 将保存的对象序列化并返回
查:查询数据库 -> 将数据序列化并返回

反序列化:将json格式的数据转化成模型类对象数据

序列化:将模型类对象数据转化成json格式的数据

5、DRF 特点

提供了定义序列化器Serializer的⽅法,可以快速根据 Django ORM 或者其它库⾃动序列化/反序列化;
提供了丰富的类视图、Mixin扩展类,简化视图的编写;
丰富的定制层级:函数视图、类视图、视图集合到⾃动⽣成 API,满⾜各种需要;
多种身份认证和权限认证⽅式的⽀持;
内置了限流系统;
直观的 API web 界⾯;
可扩展性,插件丰富

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django REST Framework (DRF) 是一个用于构建 Web API 的强大工具,它是基于 Django 框架的。DRF 提供了方便的方式来处理 HTTP 请求,定义视图、序列化器、路由以及认证等组件,使得开发RESTful API变得更加高效和易于维护。 接口文档是DRF中非常关键的一部分,它帮助开发者、团队成员和外部用户提供对API的清晰理解。在DRF中,你可以使用`rest_framework.authtoken`或`drf_yasg`库(如Swagger UI)来生成详细的API文档。以下是生成和使用DRF接口文档的一些步骤: 1. 安装必要的库(如`drf_yasg`): ```bash pip install djangorestframework drf-yasg ``` 2. 配置settings.py中的SWAGGER设置: ```python INSTALLED_APPS = [ # ... 'drf_yasg', 'rest_framework_swagger', ] ``` 3. 在`urls.py`中包含API和文档的URL路径: ```python from drf_yasg.views import get_schema_view schema_view = get_schema_view(title='Your API Name', public=True) urlpatterns = [ # Your API routes... path('openapi/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), ] ``` 4. 创建视图和定义序列化器: 使用DRF的ViewSet和Serializer为你的API资源定义行为。 5. 使用`@api_view`装饰器或`@action`方法来定义API操作。 6. 运行服务器并访问`http://yourserver.com/openapi/`,通常会显示一个交互式的Swagger UI页面,其中包含了你的API的所有公开接口和描述。 相关问题: 1. Swagger UI在DRF中起到什么作用? 2. 如何在DRF使用`@api_view`装饰器定义API? 3. 如何自定义接口文档的主题和样式?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值