打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Django基于rest_framework实现Restful接口

Django Rest Framework (DRF) 是一个用于构建 RESTful API 的强大框架。在这篇教程中,我们将探讨如何使用DRF来构建一个简单的API。

django restframework

1.安装RestFramework

1.首先,确保你已经安装了Django和DRF。你可以使用以下命令进行安装:

pip install djangopip install djangorestframework

安装好后,我们创建一个bbs应用。

python manage.py startapp bbs

2.序列化模型

序列化器允许把像查询集和模型实例这样的复杂数据转换为可以轻松渲染成JSON,XML或其他内容类型的原生Python类型。序列化器还提供反序列化,在验证传入的数据之后允许解析数据转换回复杂类型。

REST framework中的 serializers与 Django 的FormModelForm类非常像。restframework 提供了一个Serializer类,它为你提供了强大的通用方法来控制响应的输出,以及一个ModelSerializer类,它为创建用于处理模型实例和查询集的序列化程序提供了有用的快捷实现方式。

在bbs目录下,打开models.py文件,并定义一个简单的模型,例如:

from django.db import modelsfrom django.utils import timezone
# Create your models here.class Post(models.Model): title = models.CharField(max_length=200, verbose_name='标题') content = models.TextField(verbose_name='内容') pub_date = models.DateTimeField(auto_now_add=True, verbose_name='发布日期')
# 模型数据验证 def pub_date_valid(self): return self.pub_date < timezone.now()

另外,我们在 bbs 目录下,再创建一个新的文件 serializers.py,并添加以下代码:

from rest_framework import serializersfrom .models import Post
class PostSerializer(serializers.ModelSerializer): class Meta: model = Post fields = '__all__'

这里我们定义了一个PostSerializer,它继承自 DRF 的ModelSerializer类,并指定了要序列化的模型和字段。当然你也可以序列化属性,继承自 serializers.Serializer, 类似于:

class PostSerializer(serializers.Serializer): title = serializers.CharField(max_length=200) content = serializers.CharField() pub_date = serializers.DateTimeField()

3.基于函数的视图

from rest_framework.decorators import api_view
@api_view()def hello_world(request): return Response({'message': 'Hello, world!'})
# 区分 get、 post 方法@api_view(['GET', 'POST'])def get_post_hello_world(request): if request.method == 'POST': return Response({'message': 'Got POST data!', 'data': request.data}) return Response({'message': 'Hello, world!'})

url.py配置如下:

from .views import hello_world, get_post_hello_world
urlpatterns = [ path('/hello', hello_world), path('/get_post_hello', get_post_hello_world)]
api_view

4.ModelViewSet视图类

在 bbs 目录下,打开views.py文件,并添加以下代码:

from rest_framework import viewsetsfrom .models import Postfrom .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

这里我们创建了一个MyModelViewSet视图集,它继承自DRF的ModelViewSet类,并指定了模型和序列化器。打开bbs应用中的 urls.py 文件,并添加以下代码:

from django.urls import include, pathfrom .views import PostViewSetfrom rest_framework import routers
router = routers.SimpleRouter()router.register(r'posts', PostViewSet)
urlpatterns = [ path('/', include(router.urls)),]

这里我们注册了PostViewSet视图集,并将其映射到 /posts 路径下。接下来,我们只需访问路径,http://127.0.0.1:8000/bbs/posts/, 发现报错

restframework

不要灰心,我们检查一下 settings.py 文件, 并添加下面的配置:


INSTALLED_APPS = [ 'rest_framework',]REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', ]}

再次访问上述链接地址,非常 Wonderful!

JSONRenderer

5.总结及扩展使用:

本文中涉及的主要知识点包括,序列化serialize, 资源路由routers, 基于函数的视图api_view,以及基于viewset的ModelViewSet。

django rest framework

routers是一种用于自动化URL路由的工具。它提供了一种简化和标准化URL配置的方式,使开发人员可以轻松地定义API端点,并将它们映射到相应的视图函数或视图集上。如上述例子中的ModelViewSet正是利用了routers的这一特性。

ModelViewSet则是继承自ViewSet,通过继承DRF的ViewSet类或其中的一个子类,我们可以来定义自己的视图类。ViewSet类提供了一系列的标准操作方法,如listretrievecreateupdatedestroy,分别对应于API的listdetailcreateupdatedelete操作。

ViewSet类的主要特点如下:

·1、自动映射URL: ViewSet类自动将方法映射到URL路径,并将其与视图函数进行关联。例如,list方法会自动映射到GET /api/endpoint/,retrieve方法会映射到GET /api/endpoint/{pk}/,create方法会映射到POST /api/endpoint/,以此类推。·2、支持定制操作: 通过重写ViewSet类的方法,来定制每个操作的行为。例如,可以在list方法中加入自定义的过滤逻辑,来对返回的资源进行过滤。还可以重写序列化器类、查询集等,以满足您的特定需求。·3、分离视图逻辑 使用ViewSet,可以将相同功能的视图逻辑组织在一起,使代码更清晰、更易于维护。例如,可以将多个视图函数合并为一个ViewSet类,并将它们放在同一个文件中。

需要注意的是,ViewSet类并不是强制的,仍然可以使用自定义的视图函数来处理API请求。但使用ViewSet类可以提高代码的可读性和可维护性,并在很大程度上减少了代码的重复性。

以上就是本文的全部内容,代码可在我的github[1]上找到。

References

[1] github: https://github.com/liululee/poycode-django-learn



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
django rest framework 小小心得
03 认识Django REST framework
python测试开发django-63.基于函数的视图(@api_view())
测试开发你不得不学的 REST API 开发
Django-rest framework框架
Django REST Framework 集成系统API
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服