7)django-示例(cbv)

CBV(class base view)一个url根据method方式调用相应的方法。method常用有get,post

如果是GET请求,Home类会调用get方法,如果是POST提交数据,则类会调用 post方法

 

 CBV与FBV经常用到,建立两种方式都使用。

1)urls.py  

url(r'^home/', views.Home.as_view()), 以不同的方式执行不同的方法,比如get,post等 #views.类名.as_view()
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^login/', views.login),
    url(r'^home/', views.Home.as_view()),
    url(r'^detail-(\d+).html',views.detail), #动太路由
]

 2)views.py

    #CBV django内容是怎么完的过程?
    #根据提交的头部和内容,头部包括URL,method, django通过反射找到相应的方法。
   所以django肯定有dispath,可以自己重写dispath,增加自己功能


  需要导入from django.views import View
#CBV
from django.views import View
class Home(View):
    #CBV django内容是怎么完的过程?
    #根据提交的头部和内容,头部包括URL,method, django通过反射找到相应的方法。所以django肯定有dispath,可以自己重写dispath,增加自己功能

    def dispatch(self, request, *args, **kwargs):
        print("before")
        result=super(Home,self).dispatch( request, *args, **kwargs)#调用父类的dispath
        print("after") #相档于装饰器功能
        return result

    def get(self,request):
        print(request.method)
        return render(request,"home.html")

    def post(self,request):
        print(request.method)
        return render(request,"home.html")

3.模板home.html

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/static/common.css">
</head>
<body>
    <form action="/home/" method="post">
        <input type="text" name="user" />
        <input type="submit" value="+">
    </form>
    <script src="/static/jquery-1.12.3.js"></script>
</body>
</html>

 

posted on 2017-10-28 21:18  shisanjun  阅读(689)  评论(0编辑  收藏  举报

导航