django通用视图(视图类)的login登陆、权限限定
来源:互联网 发布:js setcookie 作用域 编辑:程序博客网 时间:2024/06/04 18:20
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_requiredfrom 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 """ @classmethod def as_view(cls, **initkwargs): view = super(LoginRequiredMixin, cls).as_view(**initkwargs) return login_required(view, login_url='/')class ViewAsset(LoginRequiredMixin, ListView): """ 具体的业务实现类 """ model = Group paginate_by = 10 template_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
阅读全文
0 0
- django通用视图(视图类)的login登陆、权限限定
- django的通用视图
- Django 1.6 基于类的通用视图
- Django 1.6 基于类的通用视图
- django通用视图的使用
- django 通用视图
- Django 通用视图
- Django 通用视图
- Django 通用视图
- Django通用视图讲解
- django:通用视图-UpdateView更新有参数的form类
- django的通用视图 (generic views)
- Django笔记7(通用视图)
- Django 学习小组:基于类的通用视图详解(一)
- django 创建一个通用视图
- Django View.py通用视图
- django使用通用视图 django.views.generic
- django--基于类的视图
- Latex图片并排
- 自定义控件(一)
- 用户模式下的多线程同步——关键段
- SpringBoot连接SQLite数据库(基于Spring-Data-Jpa和Gradle配置)
- 如何使用CSDN-markdown编辑器
- django通用视图(视图类)的login登陆、权限限定
- WebServiceUtil
- 【HDU 2553】 N皇后问题
- 用 GitLab CI 进行持续集成
- JProfiler9.1.1安装和远程调试linux环境Tomcat配置
- startService与bindService的区别
- asp.net 验证正则表达式
- hadoop安装部署(伪分布及集群)
- linux下安装配置Java环境