博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django Auth模块及User对象方法
阅读量:5111 次
发布时间:2019-06-13

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

一: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_requireddef 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 Useruser = 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_requireddef 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)

 

转载于:https://www.cnblogs.com/happlyp/p/11040522.html

你可能感兴趣的文章
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
StringBuffer是字符串缓冲区
查看>>
hihocoder1187 Divisors
查看>>
Azure 托管镜像和非托管镜像对比
查看>>
js window.open 参数设置
查看>>
032. asp.netWeb用户控件之一初识用户控件并为其自定义属性
查看>>
Ubuntu下安装MySQL及简单操作
查看>>
前端监控
查看>>
clipboard.js使用方法
查看>>
移动开发平台-应用之星app制作教程
查看>>