基于Django REST Framework教程(一分钟入门)文章后,继续讲一下如何集成开发系统的API。之前在文章中讲过web接口开发,那种手写代码显然又慢又不整洁,利用rest framework工具可以快速形成API。
打开cmd,输入
tree django_restAPI /F
之前开发web接口虽然没讲创建模型,但是实际上已经存在模型,因为开发系统时就已经将数据模型创建了,如:Event和Guest。
这里的话,我们是另外开设一个项目,所以依然也要创建,如图:
- from django.db import models
- # Create your models here.
- # 发布会
- class Event(models.Model):
- name = models.CharField(max_length=100)
- limit = models.IntegerField()
- status = models.BooleanField()
- address = models.CharField(max_length=200)
- start_time = models.DateTimeField('events time')
- create_time = models.DateTimeField(auto_now=True)
- def __str__(self):
- return self.name
- # 嘉宾
- class Guest(models.Model):
- event = models.ForeignKey('Event',on_delete=models.CASCADE)
- realname = models.CharField(max_length=64)
- phone = models.CharField(max_length=16)
- email = models.EmailField()
- sign = models.BooleanField()
- create_time = models.DateTimeField(auto_now=True,db_column='create_time')
- class Meta:
- unique_together = ('phone','event')
- def __str__(self):
- return self.realname
模型Event和Guest就是对应数据库中表及所设计的字段。
有了数据,当然就是数据以什么形式展示出来,DRF ( Django RestFramework ) Serializer的序列化方式可以类比Django的ModelForm组件的使用
- # 定义好了 Models,我们可以开始写 Serializers,这个相当于 Django 的 Form
- from rest_framework import serializers
- from api.models import Event,Guest
- # 定义API表现形式,序列化或反序列化模型
- class EventSerializer(serializers.ModelSerializer):
- class Meta:
- model = Event # 定义关联的 Model
- fields = ('url','name','address','start_time','limit','status') # 指定返回的 fields
- class GuestSerializer(serializers.ModelSerializer):
- class Meta:
- model = Guest # 定义关联的 Model
- fields = ('url','realname','phone','email','sign','event') # 指定返回的 fields
- # 以上就是定义一个Serializer最简单的代码,model指定对应的模型实体,fields指定要序列化的数据域(可理解为数据库表的某一列)
确定了数据展现形式,那么就是视图集:ViewSets。在Django中使用基于类的视图(ClassView),类中所定义的方法名称与Http的请求方法相对应,才能基于路由将请求分发(dispatch)到ClassView中的方法进行处理,而Django REST framework中可以突破这一点,通过ViewSets可以实现自定义路由。
简单点说,DRF的Viewsets就允许你将一批功能类似或者有流程的接口写在一个类里面。
- from django.shortcuts import render
- # Create your views here.
- from rest_framework import viewsets
- from api.serializers import,EventSerializer,GuestSerializer
- from api.models import Event,Guest
- class EventViewSet(viewsets.ModelViewSet):
- queryset = Event.objects.all() # 指定结果集
- serializer_class = EventSerializer # 指定序列化的类
- class GuestViewSet(viewsets.ModelViewSet):
- queryset = Guest.objects.all()
- print(queryset,111)
- serializer_class = GuestSerializer
- print(serializer_class,222)
上面已经说过ViewSet类可以实现自定义注册路由,并通过Router
类自动处理连接视图和URL的资源。
- from django.conf.urls import url, include
- from rest_framework import routers
- from api import views
- router = routers.DefaultRouter() # 定义路由地址
- router.register(r'users', views.UserViewSet) # 注册新的路由地址
- router.register(r'groups', views.GroupViewSet) # 注册新的路由地址
- router.register(r'events', views.EventViewSet) # 注册新的路由地址
- router.register(r'guests', views.GuestViewSet) # 注册新的路由地址
- from rest_framework.documentation import include_docs_urls
- API_TITLE = 'XX系统API文档'
- API_DESCRIPTION = '关键业务接口文档'
- # 使用自动URL路由连接我们的API。
- # 另外,我们还包括支持浏览器浏览API的登录URL。
- urlpatterns = [
- url(r'^', include(router.urls)),
- url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
- path('admin/', admin.site.urls),
- ]
我这里就没使用mysql数据库了,当然你可以使用,执行命令:
- python manage.py makemigrations
- python manage.py migrate
详细功能介绍:
删除和修改的功能:
执行依赖安装
pip install coreapi pygments markdown
安装上面依赖包后,只要修改urls.py文件即可:
- from rest_framework.documentation import include_docs_urls
- API_TITLE = 'XX系统API文档'
- API_DESCRIPTION = '关键业务接口文档'
- # 使用自动URL路由连接我们的API。
- # 另外,我们还包括支持浏览器浏览API的登录URL。
- urlpatterns = [
- url(r'^', include(router.urls)),
- url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
- path('admin/', admin.site.urls),
- path(r'docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION, authentication_classes=[],
- permission_classes=[])),
- url(r'^test1/$', views.test1),
- ]
其中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,不积跬步,无以至千里。
联系客服