Django REST framework的各种技巧——1.基础讲解
寫在最上面的話
django是一個神奇的框架,而restframework又是遵循了這個框架的另一個神奇的框架,然而由于restframework的文檔稀爛無比,很多時候你必須看源碼才能寫出科學的代碼,這擋住了很多新手的路。
要用好restframework你必須對django或者說python的幾個概念有比較深刻的理解,GenericView,Mixin,子類父類集成調用,多繼承時的調用順序等等,這是用好restframework的第一步。
Django REST framework的各種技巧【目錄索引】
先說說rest
REST是一種標準,restful是一種規范,根據產品需求需要定出一份方便前后端的規范,因此不是所有的標準要求都需要遵循。
rest的一些資料
阮一峰的博客
百度百科
如何用restframework實現一個(一組)api
文檔先丟上
其實就是寫幾個東西,就可以快速的實現api
繼承某個GenericView,重寫里面的某個方法,最大的是get、post、put、patch、delete這些方法,然而并不推薦(應該重寫mixin里面的方法)
實現一個serilizer,json化response
寫一個url
作為寫框架的人,你需要考慮的事情還有那些?
每個項目總有第一個人做基礎構架,這個時候就不是僅僅實現一個api就ok了,你需要考慮跟多的事情,包括
統一的異常處理
api權限
統一的參數校驗
緩存如何可以做的更簡單統一
認證
統一的查詢過濾
代碼分層
基本api的demo,具體細節之后的博客會詳細講解
繼承某個Genricview,重寫對應方法
class CoursesView(ListCreateAPIView):filter_backends = (SchoolPermissionFilterBackend, filters.DjangoFilterBackend, filters.SearchFilter)permission_classes = (IsAuthenticated, ModulePermission)queryset = Course.objects.filter(is_active=True).order_by('-id')filter_fields = ('term',)search_fields = ('name', 'teacher', 'school__name')module_perms = ['course.course']def get_serializer_class(self):if self.request.method in SAFE_METHODS:return CourseFullMessageSerializerelse:return CourseSerializerdef get_queryset(self):return Course.objects.select_related('school', ).filter(is_active=True, school__is_active=True, term__is_active=True).order_by('-id')@POST('school', validators='required')def create(self, request, school, *args, **kwargs):if not SchoolPermissionFilterBackend().has_school_permission(request.user, school):raise Error(errors.PermissionDenied, err_message=u'沒有對應學校的權限', message=u'沒有對應學校的權限')serializer = self.get_serializer(data=request.data)serializer.is_valid(raise_exception=True)self.perform_create(serializer)headers = self.get_success_headers(serializer.data)return Response(CourseFullMessageSerializer(serializer.instance).data, status=status.HTTP_201_CREATED, headers=headers)實現一個serilizer,json化response
class CourseSerializer(serializers.ModelSerializer):class Meta:model = Courseread_only_fields = ('is_active',)class CourseFullMessageSerializer(CourseSerializer):school = SchoolLittleMessageSerializer()term = serializers.CharField(source='term.name', read_only=True)寫一個url
url(r'^courses/$', CoursesView.as_view(), name='course-list'),按照這個流程你可以迅速實現大量的api,這是最基本的用法。
總結
以上是生活随笔為你收集整理的Django REST framework的各种技巧——1.基础讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx与Apache的涉及的计算机原
- 下一篇: SQL Server 2008, 200