python (django) 8. view

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"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值