1. api/views.py
from rest_framework.viewsets import ModelViewSet
class StudentModelView(ModelViewSet):
queryset = Student.objects.get_queryset().order_by('id')
serializer_class = StudentSerializer
pagination_class = StudentPageNumberPagination
from rest_framework.viewsets import GenericViewSet
class StudentSetView(GenericViewSet):
queryset = Student.objects.get_queryset().order_by('id')
serializer_class = StudentSerializer
pagination_class = StudentPageNumberPagination
parser_classes = [JSONParser]
def list(self, request, *args, **kwargs):
stus = self.get_queryset()
page_stus = self.paginate_queryset(queryset=stus)
ser = self.get_serializer(instance=page_stus, many=True)
return self.get_paginated_response(data=ser.data)
def create(self, request, *args, **kwargs):
name = request.data.get('name')
password = request.data.get('password')
grade = request.data.get('grade', None)
if not (name or password):
raise ParseError(_('name or password should not be empty'))
student, ok = Student.objects.update_or_create(name=name, defaults={'grade': grade, 'password': password})
# student = Student.objects.create(name=name, password=password)
token, ok = Token.objects.update_or_create(student=student, defaults={'token': get_md5_encode(name, password)})
res = dict()
res['code'] = 200
res['name'] = name
res['token'] = token.token
res['msg'] = '创建成功'
logger.info(pformat(res))
return Response(data=res, status=status.HTTP_200_OK)
from rest_framework.generics import GenericAPIView
class StudentView(GenericAPIView):
queryset = Student.objects.get_queryset().order_by('id')
serializer_class = StudentSerializer
pagination_class = StudentPageNumberPagination
def get(self, request, *args, **kwargs):
students = self.get_queryset()
stu_page = self.paginate_queryset(queryset=students)
ser = self.get_serializer(instance=stu_page, many=True)
return self.get_paginated_response(data=ser.data)
# return Response(ser.data)
2. api/urls.py
# -*- coding: utf8 -*-
from django.conf.urls import url
from .views import AuthView, TokenView, VersionView, StudentView, StudentSetView, StudentModelView
app_name = 'api'
urlpatterns = [
url(r'auth/', AuthView.as_view()),
url(r'studentset/', StudentSetView.as_view({'get': 'list', 'post': 'create'})),
url(r'studentmodel/$', StudentModelView.as_view({'get': 'list', 'post': 'create'})),
url(r'studentmodel/(?P<pk>\d+)/$', StudentModelView.as_view({'get': 'retrieve', 'delete': 'destroy', 'put': 'update', 'patch': 'partial_update'})),
url(r'student/', StudentView.as_view()),
url(r'version/token/', TokenView.as_view({'get': 'get'}), name='version'),
url(r'(?P<version>[v1|v2|v3]+)/token/$', TokenView.as_view({'get': 'get'}), name='version'),
# url(r'version/', VersionView.as_view()),
# url(r'^(?P<version>[v1|v2|v3]+)/$', VersionView.as_view()),
url(r'^version/$', VersionView.as_view(), name='version'),
# url(r'(?P<version>[v1|v2|v3]+)/$', VersionView.as_view(), name='version'),
# url()
]
3. postman
(1)
url: http://127.0.0.1:8011/api/student/?page=2&size=3&token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"count": 6,
"next": null,
"previous": "http://127.0.0.1:8011/api/student/?size=3&token=dbfa6b230b9ca22302a00ea918346f86",
"results": [
{
"id": 7,
"name": "student4"
},
{
"id": 8,
"name": "student5"
},
{
"id": 9,
"name": "student6"
}
]
}
(2)
url: http://127.0.0.1:8011/api/studentset/?token=dbfa6b230b9ca22302a00ea918346f86
method: post
data:
{
"name": "student7",
"password": "password7",
"grade": 3
}
return:
{
"code": 200,
"name": "student7",
"token": "cba545223540936795b6b4af2a12da2f",
"msg": "创建成功"
}
(3)
url: http://127.0.0.1:8011/api/studentset/?token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"count": 7,
"next": "http://127.0.0.1:8011/api/studentset/?page=2&token=dbfa6b230b9ca22302a00ea918346f86",
"previous": null,
"results": [
{
"id": 4,
"name": "student1"
},
{
"id": 5,
"name": "student2"
}
]
}
(4)
url: http://127.0.0.1:8011/api/studentmodel/?token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"count": 7,
"next": "http://127.0.0.1:8011/api/studentmodel/?page=2&token=dbfa6b230b9ca22302a00ea918346f86",
"previous": null,
"results": [
{
"id": 4,
"name": "student1"
},
{
"id": 5,
"name": "student2"
}
]
}
(5)
url: http://127.0.0.1:8011/api/studentmodel/1/?token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"detail": "Not found."
}
(6)
url: http://127.0.0.1:8011/api/studentmodel/5/?token=dbfa6b230b9ca22302a00ea918346f86
method: get
return:
{
"id": 5,
"name": "student2"
}