zoukankan      html  css  js  c++  java
  • Django Auth模块及User对象方法

    一:Django的用户认证
      from django.contrib import auth
      django.contrib.auth中提供了许多方法,这里主要介绍其中的三个:

      1:authenticate()
        提供了用户认证,即验证用户名以及密码是否正确,一般需要username password两个关键字参数
        如果认证信息有效,会返回一个 User 对象。authenticate()会在User 对象上设置一个属性标识那种认证后端认证了该用户,且该信息在后面的登录过程中是需要的。当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的!
        user = authenticate(username='someone',password='somepassword')

      2:login(HttpRequest,user)

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

    from django.contrib.auth import authenticate, login
      
    def my_view(request):
      username = request.POST['username']
      password = request.POST['password']
      user = authenticate(username=username, password=password)
      if user is not None:
        login(request, user)
        # Redirect to a success page.
        ...
      else:
        # Return an 'invalid login' error message.
        ...
    

      3  logout(request) 注销用户

    from django.contrib.auth import logout
      
    def logout_view(request):
      logout(request)
    

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

      4 user对象的 is_authenticated()

      要求:

        1 用户登陆后才能访问某些页面,
        2 如果用户没有登录就访问该页面的话直接跳到登录页面
        3 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

        django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()

        在settings中,添加如下内容

    # 判断用户如果没有登录,重定向到登录页面
    LOGIN_URL='/index/'
    

       

    from django.contrib.auth.decorators import login_required
         
    @login_required
    def my_view(request):
      ...
    

    若用户没有登录,则会跳转到django默认的 登录URL '/index/ ' (这个值可以在settings文件中通过LOGIN_URL进行修改)。并传递  当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

    示例:

    # 登录
    def index(request):
        err_msg = ""
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            # 使用auth模块进行验证
            user = authenticate(username=username,password=password)
    
            # 使用auth模块进行登录
            if user is not None:
                login(request,user)
                return redirect(reverse('userlist'))
            else:
                err_msg = "用户名或密码不正确"
        return render(request,'index.html',{'err_msg':err_msg})
    
    # 退出
    def log_out(request):
        logout(request)
        return redirect(reverse('index'))
    

    ====================================

    二:User对象    

      1:创建用户

      使用 create_user 辅助函数创建用户: 

    from django.contrib.auth.models import User
    user = User.objects.create_user(username='',password='',email='')
    

      2:set_password(passwd)

      这个方法是用来更改密码的,使用步骤:  

    user=User.objects.get(username='')
    user.set_password(passeord='')
    user.save
    

      3:check_password(passwd)

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

    示例:  

    # 添加用户
    def admin_add(request):
        ......
        if request.method == "POST":
            # 在auth_user表中添加数据
            username = request.POST.get('username')
            password = request.POST.get('password')
            add_admin = User.objects.create_user(username=username, password=password)
            add_admin.save()
            return redirect(rev_url(request,'admin_list'))
        else:
            error_msg = "用户名已存在"
        return render(request, "change.html", {'form_obj': admin_obj,
                                               "error_msg":error_msg})
    
    # 修改密码
    @login_required
    def set_pwd(request):
        user = request.user
        state = ""
        if request.method == 'POST':
            old_password = request.POST.get('old_password', '')
            new_password = request.POST.get('new_password', '')
            repeat_password = request.POST.get('repeat_password', '')
    
            if user.check_password(old_password):
                if not new_password:
                    state = '新密码不能为空'
                elif new_password != repeat_password:
                    state = '两次密码不一致'
                else:
                    user.set_password(new_password)
                    user.save()
                    # 注销,跳转到index页面
                    logout(request)
                    return redirect("/index/")
            else:
                state = '密码不正确'
        content = {
            'user': user,
            'state': state,
        }
        return render(request, 'change_pwd.html', content)
    
  • 相关阅读:
    http://blog.csdn.net/steveguoshao/article/details/38414145
    http://www.tuicool.com/articles/EjMJNz
    http://jingyan.baidu.com/article/7f41ecec1b7a2e593d095ce6.html
    Linux 查看当前时间和修改系统时间
    http://m.blog.csdn.net/article/details?id=49132747
    http://www.cnblogs.com/nick-huang/p/4848843.html
    javaScript事件(一)事件流
    jQuery选择器
    超链接a的target属性
    html基础总结版
  • 原文地址:https://www.cnblogs.com/happlyp/p/11040522.html
Copyright © 2011-2022 走看看