DjangoのFBVとCBVの例説明

不言
不言転載
2019-03-06 14:54:431975ブラウズ

この記事では、Django の FBV と CBV の説明例を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

FBV: 関数ベース ビュー。ビュー内の関数を使用してリクエストを処理します。

urlpatterns = [
    path('index/', views.index),
]
# 视图函数里
def index(request):
    return render(request,"index.html")

CBV: クラス ベース ビュー。ビュー内のクラスを使用してリクエストを処理します。

urlpatterns = [
    path("login/",views.LoginView.as_view())
]
# 视图函数里
class LoginView(View):

    def dispatch(self, request, *args, **kwargs):
        """
        重写dispatch方法, 可以放一些专属于LoginView的操作
        """
        return ...

    def get(self,request):
        return HttpResponse("OK")

    def post(self,request):
        return HttpResponse("OK")

    def put(self,request):
        return HttpResponse("OK")

    def delete(self,request):
        return HttpResponse("OK")

CBV のソース コード分析:

Django の URL は、クラスではなく呼び出し可能な関数にリクエストを割り当てます。この問題に対応して、クラスベースのビュー (つまり、Django の基本的な View クラス) は、as_view() の静的メソッド (つまり、クラス メソッド) を提供します。このメソッドを呼び出すと、self = cls(** によってクラスが作成されます) initkwargs) インスタンスを呼び出し、そのインスタンスを通じてdispatch() メソッドを呼び出します。dispatch() メソッドは、さまざまなメソッドに従ってリクエストを処理するための対応するメソッド (get()、post() など) を呼び出します。リクエスト。この時点では、これらのメソッドは関数ベースのビューとほぼ同じであり、リクエストを受信して​​応答を返す必要があります。メソッドが定義されていない場合、HttpResponseNotAllowed 例外がスローされます。

なぜ CBV モデルがあるのですか?

Python の重要な機能はオブジェクト指向です。また、cbv は Python のオブジェクト指向の性質をよりよく反映できます。 cbv はクラスを通じて view メソッドを実装します。関数と比較して、クラスはポリモーフィズム (ポリモーフィズム: 異なる型のオブジェクトに対して同じ操作を使用できる) の特異性をうまく利用できるため、プロジェクト内のより一般的な関数をマクロ レベルから抽象化することが容易になります。

以上がDjangoのFBVとCBVの例説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。