zoukankan      html  css  js  c++  java
  • 110:类视图讲解

    类视图

      在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比如继承等。

    View:

      django.views.generic.base.View是主要的类视图,所有的类视图都是继承自他。如果我们写自己的类视图,也可以继承自他。然后再根据当前请求的method,来实现不同的方法。比如这个视图只能使用get的方式来请求,那么就可以在这个类中定义get(self,request,*args,**kwargs)方法。以此类推,如果只需要实现post方法,那么就只需要在类中实现post(self,request,*args,**kwargs)。示例代码如下:

    from django.shortcuts import render
    from django.http import HttpResponse
    from django.views.generic import View
    
    # Create your views here.
    
    class addbook(View):
        def get(self, request, *args, **kwargs):
            return render(request, 'addbook.html')
    
        def post(self, request, *args, **kwargs):
            author = request.POST.get('author')
            print(author)
            return HttpResponse(author)
    
        def dispatch(self, request, *args, **kwargs):
            print("在get、post方法之前执行——如果你想在这之前做点事情……")
            return super(addbook, self).dispatch(request, *args, **kwargs)

    类视图写完后,还应该在urls.py中进行映射,映射的时候就需要调用View的类方法as_view()来进行转换。示例代码如下:

    urlpatterns = [
        path('', views.bookList.as_view(), name='bookList'),
    ]

    除了get方法,View还支持以下方法['get','post','put','patch','delete','head','options','trace']。


      如果用户访问了View中没有定义的方法。比如你的类视图只支持get方法,而出现了post方法,那么就会把这个请求转发给http_method_not_allowed(request,*args,**kwargs)。示例代码如下:

    from django.views.generic import View
    
    # Create your views here.
    class bookList(View):
        def get(self, request, *args, **kwargs):
            return HttpResponse('success')
    
        def http_method_not_allowed(self, request, *args, **kwargs):
            return HttpResponse('不支持GET以外的其它方式!')

    # 如果不写 http_method_not_allowed方法,会出现405状态码

    urls.py中的映射如下:

    urlpatterns = [
        path('', views.bookList.as_view(), name='bookList'),
    ]

      如果你在浏览器中访问addbook/,因为浏览器访问采用的是get方法,而addbook只支持post方法,因此以上视图会返回您当前采用的method是:GET,本视图只支持使用post请求!。
      其实不管是get请求还是post请求,都会走dispatch(request,*args,**kwargs)方法,所以如果实现这个方法,将能够对所有请求都处理到。

  • 相关阅读:
    Android 动画
    Eclipse设置软tab(用4个空格字符代替)及默认utf-8文件编码(unix)
    android ANR
    Android 服务端开发之开发环境配置
    安装Android sdk 4.4(19)出现问题的解决方案
    adb uninstall/pull/push 命令的使用总结
    Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...
    Android.mk文件语法规范 原文
    Android MediaProvider数据库模式
    Android MVC模式
  • 原文地址:https://www.cnblogs.com/zheng-weimin/p/10428119.html
Copyright © 2011-2022 走看看