# [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)