CBV
# urls.py
from django.conf.urls import url
from django.contrib import admin
from cbv import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^Login.html$', views.Login.as_view()),
]
# views.py
from django.views import View
class Login(View):
""""
get 查
post 提交 創建
put 更新
delete 刪除
""""
def get(self,request):
return HttpResponse('Login...get')
def post(self,request):
user = request.POST.get('user')
print(user)
return HttpResponse('Login...post')
- dispatch 類似於裝飾器的效果
# views.py
from django.shortcuts import render,redirect,HttpResponse
# Create your views here.
from django.views import View
class Login(View):
def dispatch(self, request, *args, **kwargs):
print('before')
obj = super(Login,self).dispatch(request, *args, **kwargs)
print('after')
return obj
def get(self,request):
return HttpResponse('Login...get')
def post(self,request):
user = request.POST.get('user')
print(user)
return HttpResponse('Login...post')
- 給CBV加裝飾器
在指定方法上裝
from django.shortcuts import render,redirect,HttpResponse
# Create your views here.
from django.views import View
from django.utils.decorators import method_decorator
import time
def auth(func):
def wrapper(*args,**kwargs):
print(time.time())
return func(*args,**kwargs)
return wrapper
class Login(View):
def dispatch(self, request, *args, **kwargs):
print('before')
obj = super(Login,self).dispatch(request, *args, **kwargs)
print('after')
return obj
@method_decorator(auth)
def get(self,request):
return HttpResponse('Login...get')
@method_decorator(auth)
def post(self,request):
user = request.POST.get('user')
print(user)
return HttpResponse('Login...post')
在類上加
from django.shortcuts import render,redirect,HttpResponse
# Create your views here.
from django.views import View
from django.utils.decorators import method_decorator
import time
def auth(func):
def wrapper(*args,**kwargs):
print(time.time())
return func(*args,**kwargs)
return wrapper
# @method_decorator(auth,name='get')
@method_decorator(auth,name='dispatch')
class Login(View):
def dispatch(self, request, *args, **kwargs):
print('before')
obj = super(Login,self).dispatch(request, *args, **kwargs)
print('after')
return obj
def get(self,request):
return HttpResponse('Login...get')
def post(self,request):
user = request.POST.get('user')
print(user)
return HttpResponse('Login...post')
*Django 中 的一個bug,csrf_protect裝飾器只能在類上添加
from django.shortcuts import render,redirect,HttpResponse
# Create your views here.
from django.views import View
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt,csrf_protect
import time
def auth(func):
def wrapper(*args,**kwargs):
print(time.time())
return func(*args,**kwargs)
return wrapper
@method_decorator(csrf_protect,name='get')
class Login(View):
def dispatch(self, request, *args, **kwargs):
print('before')
obj = super(Login,self).dispatch(request, *args, **kwargs)
print('after')
return obj
def get(self,request):
return HttpResponse('Login...get')
def post(self,request):
user = request.POST.get('user')
print(user)
return HttpResponse('Login...post')