Django-website 程序案例系列-11 验证装饰器
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 inner from 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 views
from django.utils.decorators import method_decorator
class 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 views
from 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 程序案例系列-11 验证装饰器的更多相关文章
- flask笔记(三)Flask 添加登陆验证装饰器报错,及解析
Flask 添加登陆验证装饰器报错,及解析 写这个之前,是想到一个需求,这个是关于之前写Flask笔记(二)中的一个知识点,路由相关 需求为 : 有一些页面必须是登陆之后才能访问的,比如Shoppin ...
- Django-website 程序案例系列-17 forms表单验证的字段解释
1.Django内置字段如下: Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial ...
- Django之Cookie Session详解,CBV,FBV登陆验证装饰器和自定义分页
Cookie Session和自定义分页 cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接 ...
- Django-website 程序案例系列-14 缓存的应用配置文件的写法
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...
- Django-website 程序案例系列-12 CSRF
django为用户实现防止跨站请求伪造的功能 需要配置settings.py: django.middleware.csrf.CsrfViewMiddleware 1. form表单提交 <f ...
- Django-website 程序案例系列-8 html模板文件详解
主模板:master.html <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- 详解Django中六个常用的自定义装饰器
装饰器作用 decorator是当今最流行的设计模式之一,很多使用它的人并不知道它是一种设计模式.这种模式有什么特别之处? 有兴趣可以看看Python Wiki上例子,使用它可以很方便地修改对象行为, ...
- Django中六个常用的自定义装饰器
装饰器作用 decorator是当今最流行的设计模式之一,很多使用它的人并不知道它是一种设计模式.这种模式有什么特别之处? 有兴趣可以看看Python Wiki上例子,使用它可以很方便地修改对象行为, ...
- day 11 - 2 装饰器练习
1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件)要求登录成功一次,后续的函数都无需再输入用户名和密码 FLAG = False def login(func): def inner ...
随机推荐
- 【Codeforces 1106E】 Lunar New Year and Red Envelopes
Codeforces 1106 E 题意:有\(k\)个红包,第\(i\)个红包可以在\(s_i\)到\(t_i\)的时间内抢,同时获得\(w_i\)的钱,但是抢完以后一直到\(d_i\)都不可以继续 ...
- Apache IOUtils的使用
IOUtils 与 FileUtilsCommons IO 是 apache 的一个开源的工具包,封装了 IO操作的相关类,使用 Commons IO 可以很方便的读写文件 commons.jar 包 ...
- BZOJ3252 攻略 贪心、长链剖分
传送门 给树竟直接给父子关系!!!真良心 首先一个贪心策略:每一次选择的链一定是所有链中权值最大的.这应该比较显然 那么我们接下来考虑如何维护这个贪心.我们可以使用长链剖分进行维护,对权值进行长链剖分 ...
- 实现Cookie集合
以前Insus.NET有在博客上有写过一篇<在程序中使用Cookie集合>http://www.cnblogs.com/insus/archive/2011/05/25/2055531.h ...
- CSV文件解析
CSV(逗号分隔值文件格式) 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和 ...
- C# LINQ 详解 From Where Select Group Into OrderBy Let Join
目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...
- retinex图像增强算法的研究
图像增强方面我共研究了Retinex.暗通道去雾.ACE等算法.其实,它们都是共通的.甚至可以说,Retinex和暗通道去雾就是同一个算法的两个不同视角,而ACE算法又是将Retinex和灰度世界等白 ...
- Spring Boot 2.0 版的开源项目云收藏来了!
给大家聊一聊云收藏从 Spring Boot 1.0 升级到 2.0 所踩的坑 先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cl ...
- Ionic 2 中生命周期的命名改变及说明
原文发表于我的技术博客 本文简要整理了在 Ionic 2 的版本中生命周期命名的改变,以及各个事件的解释. 原文发表于我的技术博客 在之前的课程中讲解了 Ionic 生命周期的命名以及使用,不过在 I ...
- linux下安装redis组件报错-gcc报错
报错如图: 1.解决办法 先安装gcc插件.删除redis解压后文件.重新解压