• [oldboy-django][2深入django]FBV + CBV + 装饰器


    FBV

    1 django CBV & FBV
        - FBV function basic view
            a. urls 设置
                urls(r'^test.html$', views.test)
            b. views写法
                def test(request):
                    return ...
            c. FBV添加装饰器
                - 定义装饰器
                    def wrapper(func):
                        def inner(*args, **kwargs):
                           return func(*args, **kwargs)
                        return inner
    
                - 使用装饰器方法
                    @wrapper
                    def test(request):
                        pass
    View Code

     CBV

        - CBV class basic view
            a. urls 设置
                urls(r'^login.html$', views.Login.as_view())
            b. views写法
                from django.views import View
                class Login(View):
                    def get(self,request):
                        return render(request, 'login.html')
    
                    def post(self,request):
                        return HttpResponse("dd")
            c. 注意事项
                - urls 里面 views.类名.as_view() 固定写法
                - views的类
                    a.需要继承from django.views import View
                    b.函数需要一个参数request
                    c.函数名字:get, post, put, delete
                        - 函数名字对应请求类型
                        - form表单只能是get和post提交
                        - ajax提交数据可以是get, post, put, delete
                        - get(查),post(创建), put(更新), delete(删)
    
            d.dispatch函数实现get, post执行前后定制一些操作
                - dispatch作用
                    函数发送请求到url后,CBV第一步调用的是dispatch函数,然后再执行get,post函数
                    其实是在dispatch函数里面调用get,post函数
                - 自定义dispatch函数
                    def dispatch(self, request, *args, **kwargs):
                        print('before')
                        obj = super(Login,self).dispatch(request, *args, **kwargs)
                        print('after')
                        return obj
    View Code

    CBV添加装饰器

            f CBV添加装饰器(django有限制)
                - 定义装饰器
                def wrapper(func):
                    def inner(*args, **kwargs):
                       return func(*args, **kwargs)
                    return inner
    
                - 导入django使用FBV装饰器的方法
                    from django.utils.decorators import method_decorator
    
                - 添加装饰器方式
                    1. 在类里面的多个函数添加
                        class Foo(View):
    
                            @method_decorator(wrapper)
                            def get(self,request):
                                pass
    
                            @method_decorator(wrapper)
                            def post(self,request):
                                pass
    
                    2.对类的多个函数都添加装饰器
                        @method_decorator(wrapper, name='post')
                        @method_decorator(wrapper, name='get')
                        class Foo(View):
    
    
                    3.对类所有函数添加装饰器
                        @method_decorator(wrapper, name='dispatch')
                        class Foo(View):
    
                        # 请求来了,到dispatch函数,dispatch根据反射调用不同的函数
    View Code
  • 相关阅读:
    P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II
    P4887 【模板】莫队二次离线(第十四分块(前体))
    SP20644 ZQUERY
    企业战略管理【0612】
    管理经济学【0812】
    商务沟通[0664]
    国际企业管理【0813】
    社区管理【0272】
    战略管理【1059】
    管理沟通【1279】
  • 原文地址:https://www.cnblogs.com/liuzhipenglove/p/7777014.html
Copyright © 2020-2023  润新知