Django-CBV和FBV

来源:互联网 发布:辉素网络带练真的假的 编辑:程序博客网 时间:2024/06/08 10:48

CBV

# urls.pyfrom django.conf.urls import urlfrom django.contrib import adminfrom cbv import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^Login.html$', views.Login.as_view()),]
# views.pyfrom django.views import Viewclass Login(View):""""getpost 提交 创建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.pyfrom django.shortcuts import render,redirect,HttpResponse# Create your views here.from django.views import Viewclass 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 Viewfrom django.utils.decorators import method_decoratorimport timedef auth(func):    def wrapper(*args,**kwargs):        print(time.time())        return func(*args,**kwargs)    return wrapperclass 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 Viewfrom django.utils.decorators import method_decoratorimport timedef 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 Viewfrom django.utils.decorators import method_decoratorfrom django.views.decorators.csrf import csrf_exempt,csrf_protectimport timedef 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')
原创粉丝点击