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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 概念
FBV(function base views) 顧名思義基于函數的視圖類

CBV(class base views)基于類的視圖類

至于區別呢? 我覺得只是寫法上的不一樣, 實現的結果都是一樣的, 我比較喜歡用CBV模式, 因為在Django中內部幫我做了請求方式的判斷, 無需用戶實現方法判斷邏輯, 來看看代碼的區別吧

二. 實現代碼
1.FBV?
fbv就是在url中一個路徑對應一個函數. 在工程下的url中寫如下代碼

from api import viewsurlpatterns = [path('admin/', admin.site.urls),path('', include('api.urls')),url(r'^test/', views.test_fbv) ]


然后在api的views中寫如下測試函數:

def test_fbv(request):if(request.method == 'POST'):return HttpResponse("post")if (request.method == 'PUT'):return HttpResponse("put")if (request.method == 'GET'):return HttpResponse("get")

然后運行整個整個工程, 命令行輸入python manage.py runserver

因為我的是linux系統, 就選用restclient這個插件進行api的測試

點完send后再看看 返回什么數據, 在response中可以 看到get

可以看到和我們想象的結果一樣, 那我們在試試其他的請求方式, 比如put, post等 和我們代碼寫的一樣, 這里我就不截圖了

基于方法的視圖

REST framework 也允許使用基于函數的視圖。它提供了一套簡單的裝飾器來包裝你的函數視圖,以確保它們接收?Request(而不是?Django HttpRequest)實例并允許它們返回?Response(而不是?Django HttpResponse),并允許你配置該請求的處理方式。

@api_view()

用法:@api_view(http_method_names=['GET'])

api_view?是一個裝飾器,用?http_method_names?來設置視圖允許響應的 HTTP 方法列表,舉個例子,編寫一個簡單的視圖,手動返回一些數據。

from rest_framework.decorators import api_view@api_view() def hello_world(request):return Response({"message": "Hello, world!"})

默認情況下,只有?GET?方法會被接受。其他方法將以?"405 Method Not Allowed"?進行響應。要使用其他方法,請指定視圖允許的方法,如下所示:

@api_view(['GET', 'POST']) def hello_world(request):if request.method == 'POST':return Response({"message": "Got some data!", "data": request.data})return Response({"message": "Hello, world!"})

API 策略裝飾器 (policy decorators)

為了覆蓋默認設置,REST framework 提供了一系列可以添加到視圖中的附加裝飾器。這些必須在?@api_view?裝飾器之后(下方)。

例如,要創建一個使用?throttle?來確保它每天只能由特定用戶調用一次的視圖,請使用?@throttle_classes?裝飾器,傳遞一個?throttle?類列表:

from rest_framework.decorators import api_view, throttle_classes from rest_framework.throttling import UserRateThrottleclass OncePerDayUserThrottle(UserRateThrottle):rate = '1/day'@api_view(['GET']) @throttle_classes([OncePerDayUserThrottle]) def view(request):return Response({"message": "Hello for today! See you tomorrow!"})

這些裝飾器對應于?APIView上設置的策略屬性。

可用的裝飾器有:

@renderer_classes(...)

@parser_classes(...)

@authentication_classes(...)

@throttle_classes(...)

@permission_classes(...)

每個裝飾器都有一個參數,它必須是一個類列表或者一個類元組。

?

2. CBV
CBV就是在url中一個路徑對應一個類

在上述工程下的urls下添加如下代碼

? urlpatterns = [path('admin/', admin.site.urls),path('', include('api.urls')),url(r'^test_FBV/', views.test_FBV),url(r'^test_CBV/', views.test_CBV.as_view()) ]

注意當用cbv模式寫url時類后面一定要用as_view()方法, 這是規定格式

然后在api下的views文件中寫如以下邏輯代碼

from django.views import Viewclass test_CBV(View):# 以get形式訪問會執行get函數,一般情況下獲取數據def get(self, *args, **kwargs):return HttpResponse('get')# 以post形式訪問的話會執行post函數,一般情況下發送數據def post(self, *args, **kwargs):return HttpResponse('post')

這里做幾點說明:

1.cbv模式下的視圖類一定要繼承Views類

2. 然后重定向get, post, put請求方法等, 實現不同的請求方法實現不同的邏輯代碼, api驗證這部分我就不說了, 直接用restclient測試就可以了
?

總結

以上是生活随笔為你收集整理的FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类的全部內容,希望文章能夠幫你解決所遇到的問題。

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