日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django REST framework的各种技巧——1.基础讲解

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.基础讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。