关于python:利用Django-REST-framework构建RESTful-Web-API

48次阅读

共计 4008 个字符,预计需要花费 11 分钟才能阅读完成。

本文首发自「慕课网」,想理解更多 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.pyINSTALLED\_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 圈优质内容,分享干货常识,大家一起独特成长吧!

本文原创公布于慕课网,转载请注明出处,谢谢合作

正文完
 0