# [React x Django] Django REST Framework --- >https://www.django-rest-framework.org/ REST API 已經是目前業界的主流了,網站提供共通的介面,讓其他的應用程式像是手機應用程式、桌面應用程式等來呼叫、操作、使用。Django REST framework 顧名思義,就是為 Django 增加 REST API 功能的框架。在官方網站上的說明是這樣的:「Django REST framework 是強大而且有彈性,可以用來建立 Web API 的工具組。」 Django 本身也可以做 API, 但是純用 Django 來做,得自己處理 csrf 問題、資料驗證問題、身份驗證問題、權限問題等等的,這些問題都得自己來處理。用 REST framework 的好處是,他把 API 的處理流程,也就是上面提到的這些都歸納為一個 pattern、一個統一的處理流程,只要把該填的、該客製化的部份填上去,一個 API 就完成了。 > https://ithelp.ithome.com.tw/articles/10233867 --- 1. ```pip install djangorestframework``` 2. ```pip install markdown # Markdown support for the browsable API.``` ```pip install django-filter # Filtering support``` 3. 加入至```settings.py``` ```python= INSTALLED_APPS = [ . . . 'rest_framework', ] ``` 4. ```views.py``` ```python= from rest_framework.decorators import api_view ``` >[REST-Framework/api_view](https://www.django-rest-framework.org/api-guide/views/#api_view/) 5. 另外導入 ```python= from rest_framework.response import Response ``` 6. 使用```@api_view``` ```python= from rest_framework.decorators import api_view from rest_framework.response import Response @api_view(['GET']) def getRoutes(request): routes=[ '/api/products/', '/api/products/create/', '/api/products/upload/', '/api/products/<id>/reviews/', '/api/products/top/', '/api/products/<id>/', '/api/products/delete/<id>/', '/api/prodcuts/<update>/<id>/', ] return Response(routes) @api_view(['GET']) def getProducts(request): return Response(products) @api_view(['GET']) def getProduct(request,pk): product = None for i in products: if i['_id'] == pk: product = i break return Response(product) ``` 7. ```base/urls.py``` ```python= path('', views.getRoutes, name="routes"), path('products/', views.getProducts, name="products"), path('products/<str:pk>/', views.getProduct, name="product"), ``` 8. 結果: ```127.0.0.1:8000/api``` ![](https://i.imgur.com/LXIJ4ms.png) ```http://127.0.0.1:8000/api/products/``` ![](https://i.imgur.com/kbj8qyr.png) ```http://127.0.0.1:8000/api/products/1``` ![](https://i.imgur.com/0SY4xVd.png)