使用rest_framework_mongoengine生成rest API

1. pip install rest_framework_mongoengine

2. 新建一个Django项目

3. 在setting.py中配置

4. 新建数据库模型

import mongoengine

# Create your models here.
STATUS = ((0, '启用'), (1, '废弃'))

class Company(mongoengine.Document):
    name = mongoengine.StringField(max_length=100, required=True)
    fullname = mongoengine.StringField(max_length=250, required=True)
    address = mongoengine.StringField(max_length=250)
    status = mongoengine.IntField(default=0, choices=STATUS, required=False)
    date = mongoengine.DateTimeField()
    meta = {'collection': 'company'}
    def __unicode__(self):
        return self.name

5. 序列化

from rest_framework_mongoengine import serializers
class CompanySerializer(serializers.DocumentSerializer):
    class Meta:
        model = Company
        fields = '__all__'

6. ModelViewSet

from rest_framework_mongoengine.viewsets import ModelViewSet
class CompanyView(ModelViewSet):
    queryset = Company.objects.all()
    serializer_class = CompanySerializer
或
from rest_framework_mongoengine import generics
class CompanyView(generics.ListCreateAPIView):
    queryset = Company.objects.all()
    serializer_class = CompanySerializer

使用filter过滤

class CompanyView(ModelViewSet):
    queryset = Company.objects.all()
    serializer_class = CompanySerializer
    my_filter_fields = ('name', 'status')

    def get_kwargs_for_filtering(self):
        filtering_kwargs = {}
        for field in self.my_filter_fields:
            print(field)
            print(self.request.query_params)
            field_value = self.request.query_params.get(field)
            if field_value:
                filtering_kwargs[field] = field_value
        return filtering_kwargs
    
    def get_queryset(self):
        queryset = Company.objects.all()
        filtering_kwargs = self.get_kwargs_for_filtering()
        if filtering_kwargs:
            queryset = Company.objects.filter(**filtering_kwargs)
        return queryset

7. 注册url

from rest_framework.routers import DefaultRouter
router = DefaultRouter()

router.register(r'company', views.CompanyView, base_name='company')

urlpatterns = router.urls

8. 完成,访问url

猜你喜欢

转载自blog.csdn.net/weixin_42336574/article/details/88304216