博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
is_authenticate 和 login_required判断用户是否登录
阅读量:4312 次
发布时间:2019-06-06

本文共 2526 字,大约阅读时间需要 8 分钟。

  • Django 的用户认证系统提供了方法 request.user.is_authenticated() 来判断用户是否登录.
  • 通过登录验证这个方法返回 True. 否则: 返回 False.
class UserInfoView(View):    """用户中心"""    def get(self, request):        """提供个人信息界面"""        # 进行判断: 是否登录验证        if request.user.is_authenticated():            # 如果登录, 则正常加载用户中心页面            return render(request, 'user_center_info.html')        else:            # 否则, 进入登录页面,进行登录            return redirect(reverse('users:login'))
  • Django 的用户认证系统提供了 login_required 这个装饰器来判断用户是否登录
    • 内部封装了 is_authenticate
    • 位置:django.contrib.auth.decorators
  • 通过登录验证则进入到视图内部,执行视图逻辑
  • 未通过登录验证则被重定向到 LOGIN_URL 配置项指定的地址
    • 所以在使用该装饰器时, 我们需要在 dev.py 文件中, 添加如下设置: LOGIN_URL = '/login/'
    • 登录用户才能访问, 否则访问的路径

login_required用法

  1. 直接装饰函数视图
    • as_view() 方法是将类视图转成的函数视图, 要想使用 login_required 装饰器 装饰类视图,可以间接的装饰 as_view() 方法的返回值
    # 在子路由中, 给 as_view() 函数,添加装饰器: url(r'^info/$', login_required(views.UserInfoView.as_view()), name='info'),
  2. 定义 View 子类: 封装 login_required 装饰器
# 定义工具类: LoginRequired# 继承自: Viewclass LoginRequired(View):  """验证用户是否登陆的工具类"""    # 重写 as_view() 函数    # 在这个函数中, 对 as_view 进行装饰  @classmethod  def as_view(cls, **initkwargs):      # 我们重写这个方法, 不想做任何的修改操作      # 所以直接调用父类的 super().as_view() 函数.      view = super().as_view()      return login_required(view)

我们自己的类视图, 让其继承自 LoginRequired

class UserInfoView(LoginRequired):    """用户中心接口"""    def get(self, request):        """提供个人信息界面"""        return render(request, 'user_center_info.html')
  • 不推荐:工具类直接依赖于视图类 View,所以复用性相对来说很差.

    3.使其继承自 object.

    # 我们定义的工具类: # 继承自 objectclass LoginRequired(object):"""验证用户是否登陆的工具类"""# 重写该函数: @classmethoddef as_view(cls, **initkwargs):    # 调用父类的 as_view() 方法    view = super().as_view()    # 添加装饰行为:     return login_required(view)

    定义我们自己的类视图, 需要让它继承自: 工具类 + View

    class UserInfoView(LoginRequired, View):  """用户中心"""  def get(self, request):      """提供个人信息界面"""      return render(request, 'user_center_info.html')

升级改造,推荐:

  • 将工具类转移到 utils 工具类文件中
# 导入: from django.contrib.auth.decorators import login_required# 添加扩展类:# 因为这类扩展其实就是 Mixin 扩展类的扩展方式# 所以我们起名时, 最好也加上 Mixin 字样, 不加也可以.class LoginRequiredMixin(object):  """验证用户是否登录的扩展类"""  @classmethod  def as_view(cls, **initkwargs):      # 调用父类的 as_view() 函数      view = super().as_view()      return login_required(view)

在 users.views.py 文件中, 引入代码:

# 导入from meiduo_mall.utils.views import LoginRequiredMixin# 添加用户中心类:   class UserInfoView(LoginRequiredMixin, View):    """用户中心"""    def get(self, request):        """提供个人信息界面"""        return render(request, 'user_center_info.html')

转载于:https://www.cnblogs.com/oklizz/p/11209368.html

你可能感兴趣的文章
eclipse 创建的Android工程的结构
查看>>
第8章 Android异常与性能优化相关面试问题
查看>>
linux 定时备份文件夹
查看>>
有道单词导入 大量有道单词 生词本 批量导入 添加 有道单词XML 背单词
查看>>
jQuery Easing动画效果扩展插件
查看>>
bzoj 1002 [FJOI2007]轮状病毒 Matrix-Tree定理+递推
查看>>
Selenium WebDriver- 操作JavaScript的Alert弹窗
查看>>
娘的,自己的求逆序对模板又不好使了。。。。。。。。
查看>>
C#面向对象模式设计第十四讲:Template Method 模板模式(行为型模式)
查看>>
linux后台运行命令:&和nohup
查看>>
springboot + shiro学习(配置SecurityManager,Realm)
查看>>
http://desk.zol.com.cn/1600x900/
查看>>
Linux基础之命令练习Day3-文件管理:cat,tar,gzip,vim,ln
查看>>
iOS中使用nil NULL NSNULL的区别
查看>>
Hdu1754-线段树-单点更新
查看>>
在python中使用正则表达式(一)
查看>>
asp.net mvc 4.0的部署
查看>>
WordPress资源站点推荐
查看>>
Python性能鸡汤
查看>>
android Manifest.xml选项
查看>>