zoukankan      html  css  js  c++  java
  • 用户认证

    auth模块

    from django.contrib import auth

    django.contrib.auth提供了很多方法,接下来主要介绍三个:authenticate()、login(HttpRequest,user)、logout(request)

    authenticate()

      提供了用户认证,即验证用户名以及密码是否正确,一般需要username、password两个关键字参数

      如果认证信息有效,会返回一个User对象,authenticate()会在User对象上设置一个属性标识认证后端认证了该用户,且该信息在后面的登录过程中是需要的。

     当我们试图登录一个从数据库中直接取出来不经过authenticate()的User对象是会报错的

    user = auth.authenticate(username='name', password='pwd')

    login(HttpRequest,user)

      该函数接受一个HttpRequest对象,以及一个认证了的User对象。此函数使用django的session框架给某个已认证的用户附加上session id等信息

    from django.contrib import auth
    def login(request):
        name = request.POST.get("username")
        pwd = request.POST.get("pwd")
        user = auth.authenticate(username=name, password=pwd)
        if user is not None:
            auth.login(request,user)
            return redirect('/index/')
        else:
            return HttpResponse('login failed!')

    logout(request)注销用户

      该函数会接受一个HttpRequest对象,无返回值,当调用该函数时,当前请求的session信息会全部清除,该用户即使没有登录,使用该函数也不会报错.

    from django.contrib import auth
    def logout(request):
        auth.logout(request)
        return redirect('/login/')

    User对象

      User对象属性:username,password(必填项)。password用哈希算法保存到数据库

      is_staff:用户是否拥有网站的管理权限

      is_active:是否允许用户登录,设置为"false",可以不用删除用户来禁止用户登录

    is_authenticated()

      如果是真正的User对象,返回值恒为True,用于检查用于是否已经通过了认证。通过认证并不意味着用户拥有任何权限,甚至也不检查该用户是否处于激活状态,这只是表名用户成功的通过了认证。

      示例

    from django.contrib.auth.models import User
    from django.contrib.auth.decorators import login_required
    #方法一
    def index(request):
        '''
        用户登录后才能访问该页面
        如果用户没有登录就访问该页面的话直接跳转到登录页面
        用户在跳转的登录页面完成登陆后,自动访问跳转到之前访问的地址
        '''
        if not request.user.is_authenticated():
            return redirect('%s?next=%s'%(settings.LOGIN_URL, request.path))
        #若用户没有登录,则会跳转到django默认的登录URL'/accounts/login/'(这个值可以在settings文件中通过LOGIN_URL进行更改)
        #并传递当前访问url的绝对路径(登录成功后,会重定向到该路径)
        return render(request, 'index.html')
    
    #方法二
    #Django为我们设计好了一个用于此种情况的装饰器:login_required()
    @login_required
    def index(request):
        pass

    创建用户

    from django.contrib.auth.models import User
    def reg(request):
        user = User.objects.create_user(username='lary', password='123')
        user.save()
        return HttpResponse('ok')

    check_password(password)

      用户需要修改密码的时候,首先要让他输入原来的密码,如果给定的字符串通过了密码检查,返回True

    修改密码

    from django.contrib.auth.models import User
    def change_pwd(request):
        user=User.objects.get(username='lary')
        user.set_password(password='321')
        user.save()
        return HttpResponse('OK')

       projectDemo

    https://github.com/Leila2Utopia/authDemo
  • 相关阅读:
    使用nodejs运行SAP Fiori应用
    JUnit 注解@Rule的工作原理
    JUnit 注解@SuiteClasses的工作原理
    JUnit 注解@Category的工作原理
    JUnit 注解@RunWith的工作原理
    Eclipse里如果看不到Attach Source按钮应该怎么办
    使用SAP CRM中间件从ERP下载BOM的一些常见问题
    GaussDB(DWS):非侵入式备份及其在NBU上的应用
    华为云原生数据仓库GaussDB(DWS)深度技术解读:融、快、大、稳、易
    华为云举办AI经典论文复现活动,打造领先AI开发者学习社区
  • 原文地址:https://www.cnblogs.com/iamluoli/p/9014139.html
Copyright © 2011-2022 走看看