7)django-示例(cbv)

时间:2021-09-01 10:56:22

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>