天天看點

Django從理論到實戰(part46)--View類

學習筆記,僅供參考,有錯必糾

參考自:Django打造大型企業官網–Huang Y;

類視圖

View類

django.views.generic.base.View是主要的類視圖,所有的類視圖都是繼承自他,我們寫自己的類視圖,也可以繼承自他。

如果該視圖隻能使用​

​get​

​​的方式來請求,那麼就可以在這個類中定義​

​get(self,request,*args,**kwargs)​

​​方法;如果隻需要實作​

​post​

​​方法,那麼就隻需要在類中實作​

​post(self,request,*args,**kwargs)​

​。

  • 舉個例子(擁有get和post方法)

首先,我們定義視圖類AddBookView:

class AddBookView(View):
    def get(self, request, *args, **kwargs):
        return render(request, "add_book.html")
    
    def post(self, request, *args, **kwargs):
        book = request.POST.get("book", "")
        price = request.POST.get("price", "")
        tags = request.POST.getlist("tags")
        context = {
            "book":book,
            "price":price,
            "tags":tags
            }
        
        return render(request, "show_books.html", context = context)      

再定義主urls.py檔案:

from django.contrib import admin
from django.urls import path
from . import views
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path("add_book2/", views.AddBookView.as_view(), name = "add_book2"),
]      

向http://127.0.0.1:8000/add_book2/發起請求,填寫form表單:

Django從理論到實戰(part46)--View類

點選​

​送出​

​:

Django從理論到實戰(part46)--View類
  • 舉個例子(定義http_method_not_allowed方法)

如果在上面的例子中,我們隻有get方法,沒有post方法,但是,我們卻進行了post操作,那麼Django會把這個請求轉發給http_method_not_allowed方法:

class AddBookView(View):
    def get(self, request, *args, **kwargs):
        return render(request, "add_book.html")
    
    def http_method_not_allowed(self, request, *args, **kwargs):
        return HttpResponse("您目前采用的method是:%s,本視圖隻支援使用get請求!" % request.method)      

向http://127.0.0.1:8000/add_book2/發起請求,填寫form表單:

Django從理論到實戰(part46)--View類

點選​

​送出​

​:

Django從理論到實戰(part46)--View類