--- tags: Python, Django --- django rest framework === settings.py ```python= INSTALLED_APPS = [ ..., 'rest_framework', ... ] ``` ```python= REST_FRAMEWORK = { # Use Django's standard `django.contrib.auth` permissions, # or allow read-only access for unauthenticated users. 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly', 'rest_framework.permissions.IsAuthenticated', ], 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 } ``` urls.py 定義序列化器 ```python= from django.conf.urls import url, include from django.contrib.auth.models import User from rest_framework import routers, serializers, viewsets # Serializers define the API representation. class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ['url', 'username', 'email', 'is_staff'] # ViewSets define the view behavior. class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer # Routers provide an easy way of automatically determining the URL conf. router = routers.DefaultRouter() router.register(r'users', UserViewSet) # Wire up our API using automatic URL routing. # Additionally, we include login URLs for the browsable API. urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) ] ``` views.py ```python= from django.contrib.auth.models import User, Group from rest_framework import viewsets from tutorial.quickstart.serializers import UserSerializer, GroupSerializer class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): """ API endpoint that allows groups to be viewed or edited. """ queryset = Group.objects.all() serializer_class = GroupSerializer ``` 按照使用者篩選api結果 ```python #user 跟 period是外鍵 # serializers.py class BookedHolidaySerializer(serializers.HyperlinkedModelSerializer): user = CustomUserSerializer(required=False) period = PeriodSerializer(required=True) class Meta: model = Booked_holiday fields = ('id', 'url', 'user', 'period', 'date') # views.py class BookedHolidayViewSet(viewsets.ModelViewSet): queryset = Booked_holiday.objects.filter(user=1) serializer_class = BookedHolidaySerializer def get_queryset(self): queryset = self.queryset query_set = queryset.filter(user=self.request.user) return query_set ```