django的登陆限定和权限限定是view设计中很重要的一个组成。网上的教程大部分都是通过使用view函数的装饰器来实现,比如:

@login_required(login_url='/')
@permission_required('can_access_assetView', login_url='/asset/error_403/')
def view_assetOperHistory(request):"""# 查看修改历史"""if request.method == 'GET':...

相关的文章很多,用起来也很方便。

但是如果你有一个需求,需要使用django的视图类,即通用视图,来实现VIEW功能,则可能会有一点麻烦:网上教程大都是翻译或者指向django官方文档:https://docs.djangoproject.com/en/1.6/topics/class-based-views/intro/

from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic import TemplateViewfrom .views import VoteViewurlpatterns = patterns('',(r'^about/', login_required(TemplateView.as_view(template_name="secret.html"))),(r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())),
)

这种方法确实简单,直接在urls文件中对login和权限进行限定。但是有个问题,就是没法限定login的登陆后重定向位置,而且如果一个视图类,既需要login限定,又需要权限控制,那么都挤在一个地方,代码可读性很差,因此,最好是换一种实现方式,通过使用多重继承来实现login的限定。登陆限定类如下所示:

class LoginRequiredMixin(object):"""登陆限定,并指定登陆url"""@classmethoddef as_view(cls, **initkwargs):view = super(LoginRequiredMixin, cls).as_view(**initkwargs)return login_required(view, login_url='/')class ViewAsset(LoginRequiredMixin, ListView):"""具体的业务实现类"""model = Grouppaginate_by = 10template_name = "asset_list.html"

非常简单,login限定完成,而且重定向的URL也有了。这时再在url文件中,对权限做限定,就一切OK了。

PS:django的通用视图封装的很棒,如果需要创建简单的应用,直接拿过来用很方便,但是如果是你的业务逻辑比较复杂,通用视图就不太适用了,还是老老实实用函数view的好。

url(r'^assethistory/(?P<pk>\d+)/$', permission_required('asset.can_access_assetHistory', login_url='/asset/error_403/')(ViewAssetHistory.as_view()), name='viewAssetHistory'),

参考资料: https://stackoverflow.com/questions/10275164/django-generic-views-using-decorator-login-required

https://yq.aliyun.com/articles/45081

django通用视图(视图类)的login登陆、权限限定相关推荐

  1. Django通用显示视图DetailView与ListView

    基于类的通用视图 - 展平索引 通用显示视图 以下两个通用的基于类的视图旨在显示数据.在许多项目中,它们通常是最常用的视图. 一.DetailView django.views.generic.det ...

  2. Django类视图CBV扩展基类之通用显示视图ListView、DetailView

    前言 这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希 ...

  3. as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]

    系列文章介绍 本系列文章将详细介绍将Django官方引导教程中的投票项目改写为RESTful网络服务.Django官方教程地址https://docs.djangoproject.com/zh-han ...

  4. django通用视图(CBV)

    1. 介绍 Django提供了很多通用的基于类的视图(Class Based View),来帮我们简化视图的编写.这些View与上述操作的对应关系如下: 展示对象列表(比如所有用户,所有文章)- Li ...

  5. python drf_067.Python框架Django之DRF视图类

    一 关于视图类的一下概念 drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. ...

  6. Django框架之CBV类视图及类视图装饰器

    前言 这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希 ...

  7. Django基础02 视图和模型

    2. Django的V和M 2.1 视图(views) 视图是Django程序中处理后端业务逻辑的地方. Django的视图是定义在子应用的views.py中的. Django的视图分为 函数视图 和 ...

  8. Django路由与视图

    路由层 一.路由匹配规则: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个之后立即匹配,直接执行对应的视图函数 url(r'login', views.login), 如果按上面的形 ...

  9. Diango博客--13.将“视图函数”类转化为“类视图”

    文章目录 0.思路引导 1.ListView 2.将 index 视图函数改写为类视图 3.将 category 视图函数改写为类视图 4.将 archive 视图函数改写成类视图 5.将 tag 视 ...

最新文章

  1. Zookeeper高级
  2. vue中使用第三方UI库的移动端rem适配方案
  3. 常用的生物学数据库及网站介绍,你都了解了吗?
  4. C语言非常重要的细节(知道一点更新一点)
  5. Scroll Depth – 衡量页面滚动的 Google 分析插件
  6. 如何制作一个基于Tile的游戏 2 Cocos2d-x 2 0 4
  7. Learning Scrapy笔记(五)- Scrapy登录网站
  8. 神经网络结构可视化工具总结实践大全
  9. HashMap源码分析(保姆式注解):三大方法(构造、Put、Remove) ;附带面试考点及博主免费答疑
  10. 数据分析思维:分析方法和业务知识
  11. 启天m420进入不了bios_联想启天M415设置u盘启动步骤(支持uefi/bios双启动)
  12. 大专学计算机为什么不好,大专学计算机后悔了是怎么回事 大专计算机专业学校推荐...
  13. Niushop 砸金蛋营销活动
  14. 【图文详解】环境变量中Path环境变量作用详解
  15. 计算机主板结构分为at,2.2.1 计算机主板结构(1)
  16. 870-Linux下解决高并发socket最大连接数限制
  17. 查看mysql是否区分大小写
  18. 日常随笔——m1 macbook安装和配置qt
  19. explain 解析
  20. 店铺logo设计免费在线生成

热门文章

  1. 联想ThinkPad x1carbon 7th,i5 8265安装win7踩过的坑
  2. PBRT_V2 总结记录 107 DipoleSubsurfaceIntegrator (Subsurface Reflection)
  3. PyCharm代码格式调整
  4. js自动触发onclick_Vue.js教程:构建一个特斯拉汽车余电计算器
  5. Jetson AGX Xavier/Nano刷机指南(无需踩坑版)
  6. 转载:程序员的十层楼
  7. 分析许嵩的175首歌曲,看看大家为什么那么喜欢听他的歌
  8. 『分布式任务调度利器』掌握ScheduleMaster分布式任务调度平台的实践指南
  9. SecureCRT8.0的使用
  10. 【无标题】2022年车工(高级)考题及答案