本文首发自「慕课网」,想理解更多 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 圈优质内容,分享干货常识,大家一起独特成长吧!
本文原创公布于慕课网,转载请注明出处,谢谢合作