Restful—分页和过滤
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 8,
'DEFAULT_FILTER_BACKENDS':('rest_framework.filters.DjangoFilterBackend',
'rest_framework.filters.SearchFilter'),
'DEFAULT_RENDERER_CLASSES': (
'utils.renderResponse.CustomJsonRenderer',
)
}
from django.db import models
class Student(models.Model):
s_name = models.CharField(max_length=10)
s_tel = models.CharField(max_length=11)
s_yuwen =models.DecimalField(max_digits=3, decimal_places=1, null=True)
s_operate_time = models.DateTimeField(null=True)
STATUS = [
('NONE','正常'),
('NEXT_SCH', '留级'),
('DROP_SCH', '退学'),
('LEAVE_SCH', '休学')
]
s_status = models.CharField(max_length=20,choices=STATUS,default='NONE')
s_delete = models.BooleanField(default=0)
class Meta:
db_table = 'day5_student'
import django_filters
from rest_framework import filters
from stu.models import Student
class StuFilter(filters.FilterSet):
name = django_filters.CharFilter('s_name', lookup_expr='icontains')
tel = django_filters.CharFilter('s_tel')
status = django_filters.CharFilter('s_status')
operate_time_min = django_filters.DateTimeFilter('s_operate_time', lookup_expr='gt')
operate_time_max = django_filters.DateTimeFilter('s_operate_time', lookup_expr='lt')
yuwen_min = django_filters.NumberFilter('s_yuwen', lookup_expr='gte')
yuwen_max = django_filters.NumberFilter('s_yuwen', lookup_expr='lte')
class Meta:
model=Student
fields = []
from rest_framework import serializers
from stu.models import Student
class StudentSerializer(serializers.ModelSerializer):
s_name = serializers.CharField(error_messages={
'blank': '用户名不能为空',
'max_length': '用户名不能超过10个字符'
}, max_length=10)
s_tel = serializers.CharField(error_messages={
'blank': '电话不能为空'
})
class Meta:
model = Student
fields = ['id', 's_name', 's_tel','s_yuwen', 's_operate_time', 's_status']
def to_representation(self, instance):
data = super().to_representation(instance)
try:
data['s_addr'] = instance.studentinfo.i_addr
except Exception as e:
data['s_addr'] = ''
data['s_status'] = dict(Student.STATUS)[data['s_status']]
return data
from django.conf.urls import url
from django.contrib.auth.decorators import login_required
from rest_framework.routers import SimpleRouter
from stu import views
router = SimpleRouter()
router.register(r'student', views.StudentEdit)
urlpatterns = [
]
urlpatterns += router.urls
class StudentEdit(mixins.ListModelMixin, # 获取所有数据
mixins.RetrieveModelMixin, # 获取某一个数据
mixins.UpdateModelMixin, # 更新数据,可以使用put和patch
mixins.DestroyModelMixin, # 删除数据,可以是用delete
mixins.CreateModelMixin, # 创建数据,可以使用post方法
viewsets.GenericViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializer
filter_class = StuFilter
def get_queryset(self):
query = self.queryset
return query.filter(s_delete=0).order_by('-id')
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.s_delete = 1
instance.save()
return Response({'msg':'删除成功', 'code': 200})