[Day17] - Django-REST-Framework 第一个 API 实作

了解了 Django 的运作之後,相信大家一步步对 Django 的操作更佳的熟悉,在前面我们介绍了 Model , View, Url,疑,那 MTV 当中的 T - Template 呢? 由於这系列文章为 API的实作,比较不会用到 Template 的功能,为了怕模糊焦点,就不多介绍 Template了。有兴趣的朋友还是可以到 Django 官网进行学习。

API 实作

目录结构:
app
│── manage.py
├── app
│ ├── settings
│ ├── init.py
│ ├── urls.py
│ └── wsgi.py
├── products
│ ├── migrations
│ │ └── init.py
│ ├── init.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py

serializer

透过 serializer 将资料进行序列化,与 Model 进行互动。
在 products 资料夹下新增 serializers.py 档

from rest_framework import serializers
from models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
         model = Product
        fields = ('id', 'name', 'uploader', 'status', 'description', 'view', 'price')
        read_only_fields = ('id',)

修改 views.py

from models import Product
from serializers import ProductSerializer

class ProductViewSet(viewsets.ModelViewSet):

    queryset = Product.objects.all()
    serializer_class = ProductSerializer

新增 products 下之 urls.py 的路径

from django.urls import path, include
from .views import *
from rest_framework.routers import DefaultRouter

from products import views


router = DefaultRouter()
router.register('', views.ProductViewSet)
app_name = 'products'

urlpatterns = [
    path('', include(router.urls) ),
]

在app 资料夹下的 urls.py 新增路径

path('products/', include('products.urls')),

启动服务

重新启动 DRF 应用

docker-compose up

查看网页

输入 ”http://127.0.0.1:9000/products/"
,可以看到我们实作的功能。

  • 查看 Database 里面 Product 的资料。
  • 以 POST 新增 Product

https://ithelp.ithome.com.tw/upload/images/20210930/20140477AWV4cplqyD.png

https://ithelp.ithome.com.tw/upload/images/20210930/201404777gqjq7Yb0X.png

结语

今天带大家使用 DRF 实作第一个 API,不知道大家感觉如何呢?
虽然需要熟悉 DRF的方法需要一些时间,但是熟悉之後可以帮助我们很高效率的建立 API !


<<:  [Day15] 建立订单交易API_8

>>:  [Day15] Server - 中场来点 NGINX 设定

【Day 5_ Arm Mali GPU家族究竟是何方神圣_下篇】

延续上篇还没介绍完的Arm Mali GPU系列解决方案,今天要来接着介绍Mali-G510 GPU...

< 关於 React: 开始打地基| function、class function >

09-05-2021 React Component 是基於元件化的思考模式 本章内容 Compon...

[Android Studio 30天自我挑战] EditText的元件介绍

EditText与TextView相似,但EditText用於APP需要输入资料时,例如:输入姓名、...

业务驱动者和推动者(Business Drivers and Enablers)

-波特的价值链(Porter’s Value Chain) 业务就是提供产品和服务以创造价值并实现...

[Day 27] Reactive Programming - RSocket

前言 Reactive的世界里,我们已经知道了从接收request(Spring WebFlux)进...