今天來進行 user 端點的製作。
以功能來說跟之前的專案很類似,差別只在於介面,除此之外,API 還會加上授權的功能。首先,先創建一個 User app,並加入settings.py
中:
python manage.py startapp user
再來,我們要建立一個可以處理 JSON 資料的程式,在 rest_api/user 中創建serializer.py
檔案,並加入:
"""
Serializers for the user API View.
"""
from django.contrib.auth import get_user_model
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
"""Serializer for the user object."""
class Meta:
model = get_user_model()
fields = ['email', 'password', 'name']
# 特定欄位的額外資訊,此處指定密碼最少五個字元長且只供讀取
extra_kwargs = {'password': {'write_only': True, 'min_length': 5}}
# 覆蓋原本 model 的create 函式,資料要先通過上方驗證才會由此函式創建
# 預設create是直接創建
def create(self, validated_data):
"""Create and return a user with encrypted password."""
return get_user_model().objects.create_user(**validated_data)
ModelSerializer 可對應至特定 model 進行序列化,省去自己定義的時間,在 DRF 內建的其他 Serializer 還有以下,每種都有不同的應用場景:
get_user_model() 可指定 ModelSerializer 要使用的 Model,此處指向 User。fields 指定了要處理的欄位,此處為 email, password 及 name。當客戶端 POST 資料時,Serializer 便會驗證 email, password 及 name 欄位是否正確。接著在views.py
可導入此 serializer 並製作創建使用者 view:
"""
Views for the API.
"""
from rest_framework import generics
from user.serializers import UserSerializer
class CreateUserView(generics.CreateAPIView):
"""Create a new user in the system."""
serializer_class = UserSerializer
這邊指定 UserSerializer 為創建使用者時使用的 view。最後在 user 中創建urls.py
並加入 path:
"""
URL mappings for the user API.
"""
from django.urls import path
from user import views
app_name = 'user'
urlpatterns = [
path('create/', views.CreateUserView.as_view(), name='create'),
]
這邊也是使用 class,所以要記得用as_view()
。最後到 rest_api/urls.py 中加入 user 的 url:
# ...
from django.urls import path, include
urlpatterns = [
# ...
path('api/user/', include('user.urls')),
]
結束後儲存,接著可以啟動伺服器測試,就可以看到多了一個端點了。
完成了第一個端點後,後續的進度就會快上一些,接下來會介紹及完成驗證的功能。下一篇文章見~