天天看点

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类