打开APP
userphoto
未登录

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

开通VIP
Django REST Framework 集成系统API

  引言

  基于Django REST Framework教程(一分钟入门)文章后,继续讲一下如何集成开发系统的API。之前在文章中讲过web接口开发,那种手写代码显然又慢又不整洁,利用rest framework工具可以快速形成API。

  项目结构

  打开cmd,输入

tree django_restAPI /F

  创建模型

  之前开发web接口虽然没讲创建模型,但是实际上已经存在模型,因为开发系统时就已经将数据模型创建了,如:Event和Guest。

这里的话,我们是另外开设一个项目,所以依然也要创建,如图:

  1. from django.db import models
  2. # Create your models here.
  3. # 发布会
  4. class Event(models.Model):
  5. name = models.CharField(max_length=100)
  6. limit = models.IntegerField()
  7. status = models.BooleanField()
  8. address = models.CharField(max_length=200)
  9. start_time = models.DateTimeField('events time')
  10. create_time = models.DateTimeField(auto_now=True)
  11. def __str__(self):
  12. return self.name
  13. # 嘉宾
  14. class Guest(models.Model):
  15. event = models.ForeignKey('Event',on_delete=models.CASCADE)
  16. realname = models.CharField(max_length=64)
  17. phone = models.CharField(max_length=16)
  18. email = models.EmailField()
  19. sign = models.BooleanField()
  20. create_time = models.DateTimeField(auto_now=True,db_column='create_time')
  21. class Meta:
  22. unique_together = ('phone','event')
  23. def __str__(self):
  24. return self.realname

  模型Event和Guest就是对应数据库中表及所设计的字段。

  创建序列化器

  有了数据,当然就是数据以什么形式展示出来,DRF ( Django RestFramework ) Serializer的序列化方式可以类比Django的ModelForm组件的使用

当涉及到一对多或者多对多字段时,我们可以通过自定制操作来获得我们想要的数据形式。
  1. # 定义好了 Models,我们可以开始写 Serializers,这个相当于 Django 的 Form
  2. from rest_framework import serializers
  3. from api.models import Event,Guest
  4. # 定义API表现形式,序列化或反序列化模型
  5. class EventSerializer(serializers.ModelSerializer):
  6. class Meta:
  7. model = Event # 定义关联的 Model
  8. fields = ('url','name','address','start_time','limit','status') # 指定返回的 fields
  9. class GuestSerializer(serializers.ModelSerializer):
  10. class Meta:
  11. model = Guest # 定义关联的 Model
  12. fields = ('url','realname','phone','email','sign','event') # 指定返回的 fields
  13. # 以上就是定义一个Serializer最简单的代码,model指定对应的模型实体,fields指定要序列化的数据域(可理解为数据库表的某一列)

  视图集

  确定了数据展现形式,那么就是视图集:ViewSets。在Django中使用基于类的视图(ClassView),类中所定义的方法名称与Http的请求方法相对应,才能基于路由将请求分发(dispatch)到ClassView中的方法进行处理,而Django REST framework中可以突破这一点,通过ViewSets可以实现自定义路由。

简单点说,DRF的Viewsets就允许你将一批功能类似或者有流程的接口写在一个类里面。

  1. from django.shortcuts import render
  2. # Create your views here.
  3. from rest_framework import viewsets
  4. from api.serializers import,EventSerializer,GuestSerializer
  5. from api.models import Event,Guest
  6. class EventViewSet(viewsets.ModelViewSet):
  7. queryset = Event.objects.all() # 指定结果集
  8. serializer_class = EventSerializer # 指定序列化的类
  9. class GuestViewSet(viewsets.ModelViewSet):
  10. queryset = Guest.objects.all()
  11. print(queryset,111)
  12. serializer_class = GuestSerializer
  13. print(serializer_class,222)

  路由注册

  上面已经说过ViewSet类可以实现自定义注册路由,并通过Router 类自动处理连接视图和URL的资源。

  1. from django.conf.urls import url, include
  2. from rest_framework import routers
  3. from api import views
  4. router = routers.DefaultRouter() # 定义路由地址
  5. router.register(r'users', views.UserViewSet) # 注册新的路由地址
  6. router.register(r'groups', views.GroupViewSet) # 注册新的路由地址
  7. router.register(r'events', views.EventViewSet) # 注册新的路由地址
  8. router.register(r'guests', views.GuestViewSet) # 注册新的路由地址
  9. from rest_framework.documentation import include_docs_urls
  10. API_TITLE = 'XX系统API文档'
  11. API_DESCRIPTION = '关键业务接口文档'
  12. # 使用自动URL路由连接我们的API。
  13. # 另外,我们还包括支持浏览器浏览API的登录URL。
  14. urlpatterns = [
  15. url(r'^', include(router.urls)),
  16. url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
  17. path('admin/', admin.site.urls),
  18. ]

  数据迁移

  我这里就没使用mysql数据库了,当然你可以使用,执行命令:

  1. python manage.py makemigrations
  2. python manage.py migrate

  登录系统

 详细功能介绍:

 删除和修改的功能:

  自动生成API文档

  执行依赖安装

pip install coreapi pygments markdown

  安装上面依赖包后,只要修改urls.py文件即可:

  1. from rest_framework.documentation import include_docs_urls
  2. API_TITLE = 'XX系统API文档'
  3. API_DESCRIPTION = '关键业务接口文档'
  4. # 使用自动URL路由连接我们的API。
  5. # 另外,我们还包括支持浏览器浏览API的登录URL。
  6. urlpatterns = [
  7. url(r'^', include(router.urls)),
  8. url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
  9. path('admin/', admin.site.urls),
  10. path(r'docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION, authentication_classes=[],
  11. permission_classes=[])),
  12. url(r'^test1/$', views.test1),
  13. ]

  其中authentication_classess是认证,permission_classes 是权限。这里就先不讲这两个东西了。

配置好后直接重启程序,浏览器输入:http://127.0.0.1:1334/docs/

测试一下:

以上就是接口新增,修改,删除和查询的操作,下面补充一点知识:

1.关于前后端分离,可以参考我csdn的文章:https://blog.csdn.net/liudinglong1989/article/details/104321325

2.REST(Representational State Transfer):表现层状态转移,一种软件架构风格,不是标准。既然不是标准,我可以遵守,也可以不遵守!!

3.什么是RESTful? RESTful是一种开发理念,基于REST构建的API就是Restful风格,称之为RESTful框架。

4.表示API的具体网址,每个网站代表一种资源

  • 资源作为网站,不能有动词,而且所用的名词往往与数据库的表名对应

  • API中的名词应该使用复数,无论子资源或者所有资源

  • 动词:

  • GET(SELECT):从服务器取出资源(一项或多项)。

  • POST(CREATE):在服务器新建一个资源。

  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

  • DELETE(DELETE):从服务器删除资源。

  附录

  以上就是集成系统API的案例,这些远远还不够,但带你入门是绰绰有余了,如果深入学习,可以研究官网文档。

  如果对python测试开发相关技术感兴趣的伙伴,欢迎加入测试开发学习交流QQ群:696400122,不积跬步,无以至千里。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Django基于rest_framework实现Restful接口
django rest framework 小小心得
快用Django REST framework写写API吧
django rest swagger
Django REST Framework教程(7): 如何使用JWT认证(神文多图)
初识 Django | Django 文档 | Django
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服