在DJANGO的类视图中实现登陆要求和权限保护
以前接触的是基于函数的保护,网上材料比较多。
但基于类视图的很少。
补上!
Decorating class-based views 装饰类视图
对于类视图的扩展并不局限于使用mixin。你也可以使用装饰器。
Decorating in URLconf URLconf中的装饰器
最简单的装饰类视图的方式是装饰 as_view() 方法返回的结果。最容易装饰的地方是你配置你的视图的地方URLconf中:
from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic import TemplateView
from .views import VoteView
urlpatterns = patterns('',
(r'^about/', login_required(TemplateView.as_view(template_name="secret.html"))),
(r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())),
)
这种方法适用于装饰每个实例的基础。如果你想要视图的每个实例都被装饰, 你需要采用别的方法。
Decorating the class 装饰类
要装饰类视图的每一个实例,你需要装饰类自身的定义。要实现这个目的,你要 应用这个装饰器到类的 dispatch() 方法上。
类方法和独立的函数并不完全一样,因此你不能仅仅应用函数的装饰器 – 你需要先把它转换为一个类方法的装饰器。method_decorator 这个装饰器 能把一个函数装饰器转变为类方法装饰器,因此它就可以被用在实例方法上了。 比如:
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic import TemplateView
class ProtectedView(TemplateView):
template_name = 'secret.html'
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ProtectedView, self).dispatch(*args, **kwargs)
在这个例子中, ProtectedView 的每个实例都将拥有登录保护的功能。
Note
method_decorator 方法传递 *args 和 **kwargs 给这个类上的 装饰器。如果你的方法不接受兼容参数集合,它会抛出 TypeError 异常。
在DJANGO的类视图中实现登陆要求和权限保护的更多相关文章
- django的类视图-11
目录 1. 使用类视图 创建类视图 注册路由 类视图使用装饰器 在url中装饰 在类视图中装饰 method_decorator 的 name 参数 使用Mixin扩展类 使用函数方式定义的视图叫函数 ...
- Django @csrf_exempt不能在类视图中工作(Django @csrf_exempt not working in class View)
我在Django 1.9中有一个使用SessionMiddleware的应用程序.我想在同一个项目中为这个应用程序创建一个API,但是在做一个POST请求时,它不能使用@csrf_exempt注释. ...
- Django模板-在视图中使用模板
之前我们已经有了自己的视图mysite.views.py中,应该是这样子的 from django.http import HttpResponse import datetime def curre ...
- django框架-DRF视图中的request和response
1.Request 相对于django框架,DRF工程的request类则是继承自HttpRequest类,Rest framework提供了parser解释器,用来解释请求中的content_typ ...
- QT项目添加现有文件后不能运行,MFC在类视图中自动隐藏类
解决方案:1)QT 5.6版本的QtCreator打开pro文件,在最后加一行空行或者删除一行空行,保存即可: 2)在隐藏的类对应的头文件中增加一行或删除一行(空格也可以),即可自动出现.
- django中的类视图
# 原创,转载请留言联系 当我们在开发一个注册模块时.浏览器会通过get请求让注册表单弹出来,然后用户输完注册信息后,通过post请求向服务端提交信息.这时候我们后端有两个视图函数,一个处理get请求 ...
- Part 4:表单和类视图--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- 六、Django之表单和类视图-Part 4
一.表单form 为了接收用户的投票选择,我们需要在前端页面显示一个投票界面.让我们重写先前的polls/detail.html文件,代码如下: <h1>{{ question.quest ...
- django类视图简单使用和源码解析
django的类视图,CBV: 我们在开始接触django的时候,习惯于使用函数编写视图,即FBV.使用FBV时,我们只需要在路由匹配时,对应的路由下找到这个函数就可以了,这样做看似很和谐,但是有的时 ...
随机推荐
- 如何设计一个更好的C++ ORM
2016/11/26 "用C++的方式读写数据库,简直太棒了!" 上一篇相关文章:如何设计一个简单的C++ ORM (旧版代码)
- 对RecycleView的多种item布局的封装
本文是借鉴bingoogolapple写得BGAAdapter-Android而产生的,对此表示感谢. 效果 1.Adapter的使用 1.继承BaseAdapter 这里是我的adapter pub ...
- Nginx性能统计模块http_stub_status_module使用
1.进入nginx源码目录,重新配置编译参数 ./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module 2.重新编译安 ...
- NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)
NET/ASP.NET Routing路由(深入解析路由系统架构原理) 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模 ...
- 如何快速学习bootstrap
bootstrap中文网http://www.bootcss.com/解决了我所有使用bootstrap的问题,从0开始,下面的全部链接都是该网站的子链接.例子http://v3.bootcss.co ...
- 为当前的div 动态添加一个样式
$("#target").addClass("newClass");
- iOS崩溃报告获取一
在AppDelegate.m文件中实现函数 void UncaughtExceptionHandler(NSException *exception) { /** * 获取异常崩溃信息 */ NSAr ...
- CoreAnimation1-图层树、寄宿图以及图层几何学
(一)图层的树状结构 Core Animation其实是一个令人误解的命名.你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只 ...
- 初尝 MVC4
文章内容参考 http://www.cnblogs.com/leoo2sk/archive/2008/10/27/1320285.html 开发环境 VS2010 ,VS2010 开发 MVC4 需下 ...
- 打印出不同顺序的字符串&单引号和双引号的差异
发现一个很好玩的打印顺序 package com.liaojianya.chapter1; /** * This program demonstrates the string. * @author ...