本文首发自[慕课网](imooc.com) ,想理解更多IT干货内容,程序员圈内热闻,欢送关注"慕课网"及“慕课网公众号”!
作者: ExcellentDavid|慕课网讲师
终于到了入手操作的环节啦,这一节,咱们以师生管理系统为例,率领大家搭建一套 framework Web API。“工欲善其事,必先利其器”,咱们选用当下最为风行的 Django REST framework 为工具,疾速实现这套API。
装置 Django REST framework 须要以下依赖:
Python (3.5, 3.6, 3.7, 3.8)Django (1.11, 2.0, 2.1, 2.2, 3.0)
Django REST framework是以 Django 扩大利用的形式提供的,所以咱们能够间接利用已有的Django环境而无需从新创立。(若没有Django环境,须要先创立环境装置Django)
1. 装置 Django REST framework
pip install django pip install djangorestframework
django 装置过程:
django-rest-framework 装置过程:
2.创立工程和利用
django-admin startproject ProjectDemodjango-admin startapp AppDemo
工程和利用创立实现后,目录构造如下图所示:
3. 注册rest_framework利用
Django REST framework 可视作是 Django 的一个利用,在应用之前,须要在 settings.py
的 INSTALLED_APPS 中注册。
# settings.pyINSTALLED_APPS = [ ... 'rest_framework',]
在实现以上操作后,就能够应用 Django REST framework 开发 Restful Web API 了。接下来,咱们将以学生管理系统为例,带大家一览 Django REST framework 如何高效开发 REST API。
4.创立、迁徙模型,并增加数据
构建数据模型,是搭建 Restful Web API 的根底。构建模型,相当于构建数据库构造,且无需繁琐的 SQL 语言,另一个益处是,即便切换不同的数据库引擎(mysql 、SQL Server、Oracle等),也无需从新构建。下方咱们构建一个学生信息表,蕴含学生姓名、学生年龄和学号。
# models.pyfrom django.db import modelsclass StudentsInfo(models.Model): ''' 学生信息模型 ''' # 以下为学生信息表中的各个字段,CharField、IntegerField申明了字段类型别离为字符串类型和整型,max_length规定了字段最大长度,verbose_name相当于给字段取了一个别名,未来在治理页面会显示这个别名,否则显示字段名。例如,如果设置了verbose_name,那么在治理页面中,s_name字段将一“学生姓名”显示进去,如果没有设置verbose_name,则间接显示“s_name”。verbose_name只是不便用户当前的应用,设置与否不影响外部数据的存储。 s_name = models.CharField(max_length=8, verbose_name='学生姓名') s_age = models.IntegerField(verbose_name='学生年龄') s_number = models.CharField(max_length=16, verbose_name='学号')
终端中运行命令以迁徙模型
python manage.py makemigrationspython migrate
向数据库中增加演示数据,这里咱们能够应用 PyCharm 自带的 Database 工具来实现。因为咱们应用的是sqlite3 作为数据库,增加数据时,可双击左侧文件目录中的 db.sqlite3 文件,而后在右侧 Database 工具中双击要操作的数据表(AppDemo_studentsmodel)。
在关上的数据表中,填入要填充的数据即可:
5. 创立序列化器
通常,API 蕴含两个方向的操作,其一是客户端向服务器申请数据,其二是客户端向服务器提交数据。当客户端向服务器申请数据时,服务器在数据库检索相应数据,通过序列化器序列化,再由视图交给客户端;客户端向服务器提交数据时,数据经由视图层进行解决,而后序列化器反序列化,最初存入数据库。
在 Restful Web API 中,序列化器相当于客户端和数据库之间数据对接的桥梁,它可将服务器中的数据,序列化为客户端可解析的数据模式,相同,也可将客户端提供的数据,反序列化为合乎数据库要求的数据模式。接下来,咱们在 AppDemo 利用中新建 serializers.py
用于保留该利用的序列化器。
创立一个 StudentsSerializer 用于序列化与反序列化学生信息:
# serializers.pyfrom rest_framework import serializersfrom AppDemo.models import StudentsModelclass StudentsSerializer(serializers.ModelSerializer): class Meta: # 对StudentsModel进行序列化 model = StudentsModel # __all__示意对 StudentsModel 中所有字段序列化进行序列化 fields = '__all__'
- model :指明该序列化器解决的数据字段从模型类 StudentsModel 参考生成;
- fields :指明该序列化器蕴含模型类中的哪些字段,'all’指明蕴含所有字段。
5. 编写视图
在 Restful Web API 中,视图表演的角色是数据处理器。例如,客户端须要获取一个学生一次期末考试后各科问题的平均值,而数据库中仅存了各科的问题,这时,就须要视图对数据处理,依据各科问题求出平均值后返回给客户端。因为本案例无需对数据进行解决,视图实现较为简单。在 booktest 利用的 views.py 中创立视图 BookInfoViewSet,这是一个视图汇合。
# views.pyfrom rest_framework import viewsetsfrom AppDemo.models import StudentsModelfrom AppDemo.serializers import StudentsSerializerclass StudentsViewSet(viewsets.ModelViewSet): queryset = StudentsModel.objects.all() # 应用上一步创立的StudentsSerializer对模型进行序列化 serializer_class = StudentsSerializer
- queryset 指明该视图集在查问数据时应用的查问集;
- serializer_class 指明该视图在进行序列化或反序列化时应用的序列化器。
6. 定义路由
路由是用来定义 RESTful Web API 不同接口所对应的不同门路地址。在本案例中,咱们是要取得学生的信息,依据第 3 节中介绍的设计规范,地址应设计为:http://www.demo.com/api/students
。在 ProjectDemo 的 urls.py
中定义路由信息。
from django.contrib import adminfrom django.urls import path, includefrom rest_framework import routersfrom AppDemo.views import StudentsViewSetrouter = routers.DefaultRouter() # 创立路由器router.register(r'students', StudentsViewSet) # 在路由器中注册视图集路由地址urlpatterns = [ # 拼接路由门路 path('api/', include(router.urls)),]
8. 运行测试
终端中运行以后程序(与运行 Django 一样):
python manage.py runserver
此时,咱们的 RESTful Web API 已构建结束。因为咱们是在本地测试,所以 API 域名局部采纳本机地址。在浏览器地址栏输出 http://127.0.0.1:8000/api,即可看到以后我的项目中所有接口连贯.
点击链接 http://127.0.0.1:8000/api/students/ 即可返回学生信息接口,能够获取所有学生的信息,如下图所示:
在页面底部的表单中,咱们能够输出学生信息,点击 POST 按钮,即可实现向学生列表中增加新的学生信息:
点击 POST 按钮后,返回如下信息:
此时再点击 GET 按钮,咱们发现上一步中增加的学生(小白)曾经显示在所有学生信息中。
在浏览器中输出网址 127.0.0.1:8000/api/students/2/,能够拜访获取单个学生信息的接口(id 为 2 的学生),如下图所示:
如果须要批改该学生的信息,可在页面底部表单中填写须要批改的信息,即可拜访批改单个学生的接口。咱们将小红年龄批改为 20:
点击 PUT,返回如下页面信息,此时小红的年龄信息曾经批改结束:
点击 DELETE 按钮,能够拜访删除学生的接口:
点 DELETE 后返回,如下页面,此时 id 为 2 的学生小红已被删除:
9.小结
本文次要解说了 Django 和 Django REST framework 装置办法,并利用 Django REST framework 实现了一个简略的学生管理系统 RESTful Web API。至此,一个合乎 RESTful 标准的简略 API 就创立实现了。
欢送关注「慕课网」官网帐号,咱们会始终保持提供IT圈优质内容,分享干货常识,大家一起独特成长吧!
本文原创公布于慕课网 ,转载请注明出处,谢谢合作