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>