學習筆記,僅供參考,有錯必糾
參考自: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表單:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CN2ATNzQDNlJWO5YGZ1gTOyYzX3MTM1QTMyAzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
點選
送出
:
- 舉個例子(定義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表單:
點選
送出
: