分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

Django-website 程序案例系列-10 验证装饰器

发布时间:2023-09-06 01:27责任编辑:蔡小小关键词:暂无标签

FBV装饰器:

def auth(func): ????#装饰器函数 ???def inner(request, *args, **kwargs): ???????v = request.COOKIES.get(‘username‘) ???????if not v: ???????????return redirect(‘/log/‘) ???????return func(request, *args, **kwargs) ???return inner

  

使用方法:

在函数上加上@auth

CBV装饰器:

第一种方式:利用django自带的工具

def auth(func): ????????#装饰器函数 ?对cookie进行认证 ???def inner(request, *args, **kwargs): ???????v = request.COOKIES.get(‘username‘) ???????if not v: ???????????return redirect(‘/log/‘) ???????return func(request, *args, **kwargs) ???return innerfrom django import views ???from django.utils.decorators import method_decorator ?#导入django自带的工具class Auth(views.View): ???@method_decorator(auth) ?#利用django自带工具 导入认证函数装饰器进行认证,灵活的放在任意需要认证的函数下面 ???def get(self, request): ???????v = request.COOKIES.get(‘username‘) ???????return render(request, ‘user_list.html‘, {‘current_user‘: v}) ???def post(self, request): ???????v = request.COOKIES.get(‘username‘) ???????return render(request, ‘user_list.html‘, {‘current_user‘: v})

  

第二种方式:

from django import viewsfrom django.utils.decorators import method_decoratorclass Auth(views.View): ???@method_decorator(auth) ????#将装饰器放在父类方法上 这样该类下所有方法都被装饰上了装饰器,不用一一在写在函数上面 ???def dispatch(self, request, *args, **kwargs): ???????return super(Auth, self).dispatch(self, request, *args, **kwargs) ???def get(self, request): ???????v = request.COOKIES.get(‘username‘) ???????return render(request, ‘user_list.html‘, {‘current_user‘: v}) ???def post(self, request): ???????v = request.COOKIES.get(‘username‘) ???????return render(request, ‘user_list.html‘, {‘current_user‘: v})

  

第三种方式:

from django import viewsfrom django.utils.decorators import method_decorator@method_decorator(auth, name=‘dispatch‘) ?#将装饰器直接装饰在类上面,在用name指定装饰在父类的diapatch方法上,这样也就实现了类里面所有方法的装饰效果class Auth(views.View): ???def get(self, request): ???????v = request.COOKIES.get(‘username‘) ???????return render(request, ‘user_list.html‘, {‘current_user‘: v}) ???def post(self, request): ???????v = request.COOKIES.get(‘username‘) ???????return render(request, ‘user_list.html‘, {‘current_user‘: v})

  

Django-website 程序案例系列-10 验证装饰器

原文地址:http://www.cnblogs.com/kuku0223/p/7923187.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved