Django REST框架中的可浏览API
Django REST框架中的可浏览API功能为不同的资源生成了HTML输出。它有助于通过任何网络浏览器与RESTful网络服务进行交互。要启用这个功能,我们应该在请求头中为Content-Type键指定text/html。它可以帮助我们使用网络浏览器来浏览API,并可以进行不同的HTTP请求。在本节中,我们将使用Django REST API框架中的可浏览API功能。
创建一个简单的项目来演示可浏览的API
让我们来创建我们的应用程序机器人所需的模型、序列化器和视图。
创建模型
在Django中,模型是以面向对象的方式处理数据库的类。每个模型类指的是一个数据库表,模型类中的每个属性指的是一个数据库列。在这里,我们将创建以下模型。
- RobotCategory (Robot Categories)
- Manufacturer (Manufacturer Details)
- Robot (Robot Details)
RobotCategory模型要求。
- 机器人类别名称
制造商模式要求。
- Manufacturer name
机器人模型需要。
- Robot name
- 一个指向机器人类别模型的外键
- 一个指向制造商模型的外键
- Currency
- Price
- Manufacturing date
让我们来看看HTTP动词,范围语义在我们的机器人Restful网络服务中的应用。
HTTP动词 | 范围 | 语义 | URL |
---|---|---|---|
GET | 机器人类别 | 检索一个机器人类别 | http://localhost:8000/robocategory/{id}/ |
GET | 机器人类别的集合 | 检索集合中的所有机器人类别 | http://localhost:8000/robocategory/ |
POST | 机器人类别的集合 | 在集合中创建一个新的机器人类别 | http://localhost:8000/robocategory/{id}/ |
PUT | 机器人类别 | 更新一个机器人类别 | http://localhost:8000/robocategory/{id}/ |
DELETE | 机器人类别 | 删除一个机器人类别 | http://localhost:8000/robocategory/{id}/ |
GET | 制造商 | 检索一个制造商 | http://localhost:8000/manufacturer/{id}/ |
GET | 制造商集合 | 检索集合中的所有制造商 | http://localhost:8000/manufacturer/ |
POST | 制造商的集合 | 在集合中创建一个制造商 | http://localhost:8000/manufacturer/{id}/ |
PUT | 制造商 | 更新一个制造商 | http://localhost:8000/manufacturer/{id}/ |
DELETE | 制造商 | 删除一个制造商 | http://localhost:8000/manufacturer/{id}/ |
GET | 机器人 | 检索一个机器人 | http://localhost:8000/robot/{id}/ |
GET | 机器人的集合 | 检索集合中的所有机器人 | http://localhost:8000/robot/ |
POST | 机器人的集合 | 在集合中创建一个机器人 | http://localhost:8000/robot/{id}/ |
PUT | 机器人 | 更新一个机器人 | http://localhost:8000/robot/{id}/ |
DELETE | 机器人 | 删除一个机器人 | http://localhost:8000/robot/{id}/ |
让我们为机器人类别、制造商、机器人以及它们之间的关系创建模型。你可以在models.py文件中加入以下代码。
这里我们有三个类是django.db.models.Model类的子类。
- RobotCategory
- Manufacturer
- Robot
机器人类与RobotCategory模型和Manufacturer模型保持多对一的关系。这种关系是通过使用 django.db.models.ForeignKey 类实现的。代码如下。
related_name参数创建了一个反向关系。在这里,related_name的值’robots’创建了一个从RobotCategory到Robot,以及从制造商到Robot的反向关系。这有利于获取属于某个机器人类别的所有机器人,也有利于基于制造商的机器人。
接下来,你可以执行迁移过程并应用所有生成的迁移。你可以使用下面的命令
python manage.py makemigrations
python manage.py migrate
创建序列化器
现在,我们需要将RobotCategory、Manufacturer和Robot实例序列化。这里,我们将使用HyperlinkedModelSerializer来处理模型关系。你可以查看DRF序列化器关系主题来详细了解。
RobotCategorySerializer和ManufacturerSerializer类是HyperlinkedModelSerializer类的子类,反向关系(RobotCategory到Robot和Manufacturer到Robot)使用HyperlinkedRelatedField来表示,并将许多和read_only属性设置为True。View_name – robot-detail – 允许可浏览的API功能为用户提供一个点击设施,以呈现超链接。
RobotSerializer类也是HyperlinkedModelSerializer类的一个子类。RobotSerializer类声明了两个属性–robot_category 和 manufacturer–持有serializers.SlugRelatedField的实例。一个SlugRelated Field通过一个唯一的slug属性代表一种关系。
创建视图
让我们利用Django REST框架提供的基于类的通用视图来处理HTTP请求并提供适当的HTTP响应。你可以查看DRF基于类的视图的详细解释。
在这里,我们的视图类从rest_framework.generics导入,我们利用了两个基于通用类的视图 – ListCreateAPIView和RetrieveUpdateDestroyAPIView。
你可以注意到一个ApiRoot类,它是generics.GenericAPIView的子类,为我们的网络服务的根创建了一个端点。它为使用可浏览的API功能浏览资源提供了便利。
get方法返回一个Response对象(作为字符串的键/值对),其中有视图的描述性名称和它的URL。
设置URL Conf
进入应用程序(robots)文件夹,创建一个名为urls.py文件的新文件。你可以添加以下代码。
它定义了请求中必须匹配的URL模式,以执行views.py文件中定义的基于类的视图的特定方法。现在我们必须设置根URL的配置。你可以添加下面的代码。
如何使用可浏览的API向API发出请求
让我们编写并发送HTTP请求,在响应中生成text/html内容。RESTFul网络服务使用BrowsableAPIRenderer类来生成HTML内容。接受text/html的HTTPie命令如下。
http -v :8000/robot/ “Accept:text/html”
分享命令提示的截图供你参考
在使用可浏览API之前,让我们使用HTTPie命令为机器人类别、制造商和机器人创建一个新条目。该命令如下。
http POST :8000/robocategory/ name=”Articulated Robots”
http POST :8000/manufacturer/ name=”Fanuc”
http POST :8000/robot/ name=”FANUC M-710ic/50″ robot_category=”Articulated Robots” manufacturer=”Fanuc” currency=”USD” price=37000 manufacturing_date=”2019-10-12 00:00:00+00:00″
GET HTTP请求
现在,让我们用浏览器来浏览 “robots “Restful网络服务。你可以使用下面的URL。
http://localhost:8000/
分享一下浏览器的截图供大家参考
你可以点击与机器人类别、制造商和机器人相对应的链接,查看数据。分享显示机器人结果的浏览器截图(http://localhost:8000/robot/)
POST HTTP请求
接下来,让我们创建一个新的机器人类别。你可以浏览下面的链接并向下滚动。
http://localhost:8000/robocategory/
分享浏览器截图供您参考
你可以输入新的机器人类别的名称,然后点击POST按钮。这里,它以HTML形式显示。如果你选择Raw数据,选择媒体类型为application/json,将新的机器人类别名称填入名称字段中,然后点击POST按钮。分享该截图供您参考。
分享输出截图
让我们创建一个新的制造商,你可以浏览以下网址
http://localhost:8000/manufacturer/
分享浏览器屏幕截图
你可以输入制造商名称(ABB)并点击POST按钮。浏览器显示的输出如下所示
最后,让我们为机器人创建一个新条目。你可以浏览下面的网址并向下滚动。
http://localhost:8000/robot/
让我们来填充数据。分享一下浏览器的截图供大家参考
在这里,你可以注意到,机器人类别、制造商和货币是下拉字段。在填入条目后,你可以点击POST按钮。下面分享一下显示的输出截图。
PUT HTTP请求
让我们来编辑有pk值2的机器人的价格。你可以浏览下面的网址并向下滚动。
http://localhost:8000/robot/2/
分享一下浏览器的截图。你可以把价格改为27000,然后点击PUT按钮。
分享一下输出的屏幕截图。
DELETE HTTP请求
你可以创建一个新的测试条目,用pk值浏览URL。
http://localhost:8000/robot/2/
你可以注意到一个DELETE按钮。分享一下下面的浏览器屏幕截图。
在点击删除按钮时,浏览器也会进行确认。你可以在确认窗口中点击删除按钮。分享下面的屏幕截图。
如果删除成功,会显示以下输出。
让我们总结一下
通过本节,我们了解了如何利用Django REST API框架中的可浏览API功能。我们组成并发送了HTTP请求,生成了文本/html内容作为响应,还在网络浏览器中分析了响应。