本文首发自 [慕课网](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 ProjectDemo
django-admin startapp AppDemo
工程和利用创立实现后,目录构造如下图所示:
3. 注册 rest_framework 利用
Django REST framework 可视作是 Django 的一个利用,在应用之前,须要在 settings.py
的 INSTALLED_APPS 中注册。
# settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
在实现以上操作后,就能够应用 Django REST framework 开发 Restful Web API 了。接下来,咱们将以学生管理系统为例,带大家一览 Django REST framework 如何高效开发 REST API。
4. 创立、迁徙模型,并增加数据
构建数据模型,是搭建 Restful Web API 的根底。构建模型,相当于构建数据库构造,且无需繁琐的 SQL 语言,另一个益处是,即便切换不同的数据库引擎(mysql、SQL Server、Oracle 等),也无需从新构建。下方咱们构建一个学生信息表,蕴含学生姓名、学生年龄和学号。
# models.py
from django.db import models
class 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 makemigrations
python migrate
向数据库中增加演示数据,这里咱们能够应用 PyCharm 自带的 Database 工具来实现。因为咱们应用的是 sqlite3 作为数据库,增加数据时,可双击左侧文件目录中的 db.sqlite3 文件,而后在右侧 Database 工具中双击要操作的数据表(AppDemo_studentsmodel)。
在关上的数据表中,填入要填充的数据即可:
5. 创立序列化器
通常,API 蕴含两个方向的操作,其一是客户端向服务器申请数据,其二是客户端向服务器提交数据。当客户端向服务器申请数据时,服务器在数据库检索相应数据,通过序列化器序列化,再由视图交给客户端;客户端向服务器提交数据时,数据经由视图层进行解决,而后序列化器反序列化,最初存入数据库。
在 Restful Web API 中,序列化器相当于客户端和数据库之间数据对接的桥梁,它可将服务器中的数据,序列化为客户端可解析的数据模式,相同,也可将客户端提供的数据,反序列化为合乎数据库要求的数据模式。接下来,咱们在 AppDemo 利用中新建 serializers.py
用于保留该利用的序列化器。
创立一个 StudentsSerializer 用于序列化与反序列化学生信息:
# serializers.py
from rest_framework import serializers
from AppDemo.models import StudentsModel
class 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.py
from rest_framework import viewsets
from AppDemo.models import StudentsModel
from AppDemo.serializers import StudentsSerializer
class 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 admin
from django.urls import path, include
from rest_framework import routers
from AppDemo.views import StudentsViewSet
router = 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 圈优质内容,分享干货常识,大家一起独特成长吧!
本文原创公布于慕课网,转载请注明出处,谢谢合作