zoukankan      html  css  js  c++  java
  • django auth permission

    django 提供内置view处理登陆和退出。

    查看django.contrib.auth源码,主要查看三个函数authenticate,login,logout。

    authenticate(request=None, **credentials)

    它接受两个参数,用户名 username 和 密码 password ,并在密码对给出的用户名合法的情况下返回一个 User 对象。 如果密码不合法,authenticate()返回None。

    login(request, user, backend=None)

    登录,本质在session表中创建session_id and session_data

    举个栗子

    from django.contrib import auth
    
    def login_view(request):
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = auth.authenticate(username=username, password=password)
        if user is not None and user.is_active:
            # Correct password, and the user is marked "active"
            auth.login(request, user)
            # Redirect to a success page.
            return HttpResponseRedirect("/account/loggedin/")
        else:
            # Show an error page
            return HttpResponseRedirect("/account/invalid/")

    logout

    即使用户没有登录, logout() 也不会抛出任何异常

    from django.contrib import auth
    
    def logout_view(request):
        auth.logout(request)
        # Redirect to a success page.
        return HttpResponseRedirect("/account/loggedout/")
    

      

    让我们继续深入django内置的password生成和验证机制是怎么样的,

    查看如下源码

    from django.contrib.auth.hashers import make_password
    from django.contrib.auth.hashers import check_password
    

      

    限制未登录用户访问

    装饰器解决问题

    from django.http import HttpResponseRedirect
    
    def is_login(request):
        if not request.user.is_authenticated:
            return HttpResponseRedirect('/accounts/login/')
    

      

    限制已登录用户访问

    限制访问可以基于某种权限,某些检查或者为login视图提供不同的位置,这些实现方式大致相同

    def vote(request):
        if request.user.is_authenticated and request.user.has_perm('polls.can_vote')):
            # vote here
        else:
            return HttpResponse("deny")
    

     上述约束条件可自行修改,【查询自建权限表】

  • 相关阅读:
    chrome浏览器postman 插件安装
    使用poi解决导出excel内下拉框枚举项较多的问题
    Nginx(三)------nginx 反向代理
    webpack 内存溢出 Allocation failed
    Postman 安装及使用入门教程 (谷歌浏览器插件版)
    jquery 控制 video 视频播放和暂停
    百度编辑器ueditor 光标位置的坐标
    mkdocs 生成帮助文档
    js 日期 相关
    vue-cli3 第三版安装搭建项目
  • 原文地址:https://www.cnblogs.com/zenan/p/10522827.html
Copyright © 2011-2022 走看看