如圖1所示,上一篇文章就是使用方法寫的視圖。
2,使用API查看寫視圖層
from rest_framework.views import APIView
class TaskView(APIView):
def get(self, request):
pass
def post(self, request):
pass
def put(self, request):
pass
def delete(self, request):
pass
--------------------------------------------------------------
urls.py
urlpatterns = [
url('^task/$', views.TaskView.as_view())
]
3,使用泛型寫視圖。
這種方式如果有過濾,分頁,排序之類的就比較方便。使用視圖集的方式的話,我覺得也沒差多少,我更喜歡這種方式。
from rest_framework import generics
from rest_framework.pagination import PageNumberPagination
from django_filters.rest_framework import DjangoFilterBackend
class WarnPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
page_query_param = "page"
max_page_size = 100
class equipmentApiView(generics.ListAPIView):
serializer_class = equipmentWarnSerializer
filter_fields = ('dept_id', "status", "robot_id", "type")
filter_backends = (DjangoFilterBackend, filters.OrderingFilter)
pagination_class = WarnPagination
ordering_fields = ('dtime', 'level')
def get_queryset(self):
start_time = self.request.query_params.get('start_time')
end_time = self.request.query_params.get('end_time')
if all([start_time, end_time]):
queryset = EquipmentWarn.objects.filter(dtime__gte=start_time, dtime__lte=end_time)
else:
queryset = EquipmentWarn.objects.all()
return queryset
過濾的話還能使用的Django的的的過濾器自己寫個過濾類,但是我用的過濾比較簡單就不用了。
4,再這裏也寫下序列化到常用操作吧。
from rest_framework import serializers
class PositionSerializer(serializers.ModelSerializer):
area_name = serializers.CharField(source='area.name')
class Meta:
model = Position
fields = ('id', 'name', 'area_name', 'type')
class TaskPositionSerializer(serializers.ModelSerializer):
position = PositionSerializer()
class Meta:
model = Task_position
fields = ('position',)
fields =“__ all__”如果想使用全部字段可以這樣寫
字段如果是單獨填一個字段,必須是元組
序列化可以關聯外檢查看序列化其他信息。可以使用以上的兩種方式。
如果只是查外鍵的單獨一個信息使用第一種方式比較好。
無關:常用導包總結,不用每次都忘記複製黏貼。
from rest_framework.decorators import api_view
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import generics
from rest_framework.pagination import PageNumberPagination
from rest_framework import filters
import logging # 日誌操作
from django.contrib.auth.decorators import login_required # 登錄驗證
from django.utils.decorators import method_decorator # 用於類方法的裝飾器
from django.db import connection, transaction # 數據庫操作
logger = logging.getLogger('jikong')
# 開啓事務,如果沒有捕捉到錯誤,則正常寫入數據庫,如果有報錯,則返回到原點
try:
with transaction.atomic():
pass
except Exception as e:
logger.error(e)
...