ユーザビューの実装
パッケージのインストール
(recsys_full) backend$ pip install djangorestframework
(recsys_full) backend$ pip install django-filter
(recsys_full) backend$ pip freeze
...(略)...
django-filter==25.1
djangorestframework==3.16.0
...(略)...
アプリケーションの登録
backend/config/settings/base.py
...(略)...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api.online.apps.OnlineConfig',
    'corsheaders',
    'rest_framework',  # <- 追加
    'django_filters',  # <- 追加
]
...(略)...
マッパー
backend/api/online/mappers.py
class UserMapper:
    def __init__(self, obj):
        self.obj = obj
    def as_dict(self):
        user = self.obj
        return {
            'id': user.id,
            'email': user.get_email(),
        }
ビュー
backend/api/online/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import User
from .mappers import UserMapper
from .utils import hash
import uuid
class UsersView(APIView):
    """ユーザビュークラス
    """
    def get(self, request, format=None):
        """ユーザを取得する。
        
        Requests
        --------
        email : str
            emailアドレス
        Response
        --------
        user : json
            ユーザ
        """
        # リクエストパラメタの取得
        email = request.GET.get('email')
        if not email:
            return Response(None, status.HTTP_401_UNAUTHORIZED)
        email_hash = hash(email)
        
        # オブジェクトの取得
        users = User.objects.filter(email_hash=email_hash)
        # レスポンス
        users_dict = [UserMapper(user).as_dict() for user in users]
        data = {
            'users': users_dict,
        }
        return Response(data, status.HTTP_200_OK)
    def post(self, request, format=None):
        """ユーザを登録する。
        Requests
        --------
        email : str
            emailアドレス
        Response
        --------
        user : json
            ユーザ
        """
        # リクエストパラメタの取得
        email = request.data['email']
        # オブジェクトの登録
        id = str(uuid.uuid4())
        user = User(id=id)
        user.set_email(email)
        user.save()
        # レスポンス
        user_dict = UserMapper(user).as_dict()
        data = {
            'user': user_dict,
        }
        return Response(data, status.HTTP_201_CREATED)
URLマッピング
backend/api/online/urls.py
from django.urls import path
from . import views
urlpatterns = [
    path('users/', views.UsersView.as_view()),
]
backend/config/urls.py
from django.contrib import admin
from django.urls import path, include  # <- includeを追加
urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/online/', include('api.online.urls')),  # <- 追加
]
バックエンドサーバが起動している状態で、ブラウザで下記URLにアクセスしてください。
Contentフォームに、例えば下記のデータを入力し、POSTボタンをクリックしてください。
{
  "email": "user000@rsl.org"
}
usersテーブルに下記のようにユーザデータが登録されました。
recsys_full=# SELECT * FROM users ;
     id     |      email_encrypted      |        email_hash         
------------+---------------------------+---------------------------
 【ユーザID】 | 【暗号化されたemailアドレス】 | 【emailアドレスのハッシュ値】 
(1 row)
ブラウザで下記URLにアクセスしてください。
下記のように、登録したユーザの情報が取得できます。
{
    "users": [
        {
            "id": "【ユーザID】 ",
            "email": "user000@rsl.org"
        }
    ]
}
参考
- 横瀬明仁,『現場で使える Django の教科書《基礎編》』,2018.
    
- 4.3.3 モデルオブジェクトを dict に変換する