zoukankan      html  css  js  c++  java
  • django 内置用户-装饰器

    """
    一、如何给python内置用户添加额外的字段,注意一定义在没有迁移数据之前定义,否则会报错
    1.在models中先调用
    from django.contrib.auth.models import AbstractUser
    2.在models中先定义好,需要额外添加的模型类,它需要继承,AbstractUser,例:
    class show_cc(AbstractUser):
        telphone = models.CharField(max_length=11)
    3.在settings中最后添加
    格式:AUTH_USER_MODEL='app名.模型类名'
    AUTH_USER_MODEL='user.show_cc'
    4.在迁移好后,在数据库中,即可看到
    自定义的user_show_cc,而不是auth_show_cc
    5.即可正常使用内置用户认证的功能
    
    
    二.函数加装饰器用于用户认证
    1.函数模块,请先加载
    from django.contrib.auth.decorators import login_required
    2.然后,再函数模块头顶加上装饰器
    @login_required
    3.举例:
    @login_required
    def get(self,request):
        return render(request,'adminSystem/index.html')
    
    三、类加装饰器用于用户认证
    1.类模块,请先加载,两项
    from django.utils.decorators import method_decorator
    from django.contrib.auth.decorators import login_required
    2.然后,再类模块里的函数头顶加上装饰器
    class kkcckk(View):
        @method_decorator(login_required)
        def get(self,request):
            return render(request,'adminSystem/index.html')
    
    *****method_decorator 用法的举例说明:*******
    类视图使用装饰器
    为类视图添加装饰器,可以使用两种方法。
    
    为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图。
    
    def my_decorator(func):
        def wrapper(request, *args, **kwargs):
            print('自定义装饰器被调用了')
            print('请求路径%s' % request.path)
            return func(request, *args, **kwargs)
        return wrapper
    
    class DemoView(View):
        def get(self, request):
            print('get方法')
            return HttpResponse('ok')
    
        def post(self, request):
            print('post方法')
            return HttpResponse('ok')
    4.1 在URL配置中装饰
    urlpatterns = [
        url(r'^demo/$', my_decorate(DemoView.as_view()))
    ]
    此种方式最简单,但因装饰行为被放置到了url配置中,单看视图的时候无法知道此视图还被添加了装饰器,不利于代码的完整性,不建议使用。
    
    此种方式会为类视图中的所有请求方法都加上装饰器行为(因为是在视图入口处,分发请求方式前)。
    
    4.2 在类视图中装饰
    在类视图中使用为函数视图准备的装饰器时,不能直接添加装饰器,需要使用method_decorator将其转换为适用于类视图方法的装饰器。
    
    method_decorator装饰器使用name参数指明被装饰的方法
    
    # 为全部请求方法添加装饰器
    @method_decorator(my_decorator, name='dispatch')
    class DemoView(View):
        def get(self, request):
            print('get方法')
            return HttpResponse('ok')
    
        def post(self, request):
            print('post方法')
            return HttpResponse('ok')
    
    
    # 为特定请求方法添加装饰器
    @method_decorator(my_decorator, name='get')
    class DemoView(View):
        def get(self, request):
            print('get方法')
            return HttpResponse('ok')
    
        def post(self, request):
            print('post方法')
            return HttpResponse('ok')
    如果需要为类视图的多个方法添加装饰器,但又不是所有的方法(为所有方法添加装饰器参考上面例子),可以直接在需要添加装饰器的方法上使用method_decorator,如下所示
    
    from django.utils.decorators import method_decorator
    
    # 为特定请求方法添加装饰器
    class DemoView(View):
    
        @method_decorator(my_decorator)  # 为get方法添加了装饰器
        def get(self, request):
            print('get方法')
            return HttpResponse('ok')
    
        @method_decorator(my_decorator)  # 为post方法添加了装饰器
        def post(self, request):
            print('post方法')
            return HttpResponse('ok')
    
        def put(self, request):  # 没有为put方法添加装饰器
            print('put方法')
            return HttpResponse('ok')
    
    
    """
  • 相关阅读:
    【转】HBase中的时间维度
    【转】HBase基本原理
    【转】BloomFilter——大规模数据处理利器
    【转】HBase客户端API:管理特性
    es6 模本字符串拼接方法 ``
    Electron桌面应用打包流程
    vue-electron脚手架安装及说明 打包基于Vue的 桌面应用程序
    safari打开的页面数字识别变为蓝色
    使用jquery中$.each()方法来循环一个数据列表
    jquery实现点击控制div的显示和隐藏
  • 原文地址:https://www.cnblogs.com/weilaibuxiangshuo/p/10388680.html
Copyright © 2011-2022 走看看