博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python - Django - auth 模块
阅读量:2259 次
发布时间:2019-05-09

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

生成数据库

 

查看 auth_user 数据库

 

 

给 auth_user 表创建一个超级用户

 

邮箱地址可以不写

再看一下 auth_user 表

 

密码被加密了

login.html:

    
登录页面
{% csrf_token %}

用户名:

密码:

 

authenticate():

该方法是用户认证功能,可以验证用户名和密码是否正确

如果认证成功,会返回一个 User 对象;如果认证失败,会返回一个匿名对象

authenticate() 会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的

views.py:

from django.shortcuts import render, redirectfrom django.contrib import authdef login(request):    if request.method == "POST":        username = request.POST.get("username")        password = request.POST.get("password")        # 判断用户名密码是否有效        user = auth.authenticate(username=username, password=password)        if user:            # 如果用户名密码有效            return redirect("/index/")            return render(request, "login.html")def index(request):    return render(request, "index.html")

访问,http://127.0.0.1:8000/login/

 

输入 admin,admin123

验证成功

 

login(HttpRequest, user):

该函数接受一个 HttpRequest 对象,以及一个经过认证的 User 对象

该函数实现一个用户登录的功能,它本质上会在后端为该用户生成相关 session 数据

views.py:

from django.shortcuts import render, redirectfrom django.contrib import authdef login(request):    if request.method == "POST":        username = request.POST.get("username")        password = request.POST.get("password")        # 判断用户名密码是否有效        user = auth.authenticate(username=username, password=password)        # 将登录的用户封装到 request.user        auth.login(request, user)        if user:            # 如果用户名密码有效            return redirect("/index/")    return render(request, "login.html")def index(request):    print(request.user.username)  # 获取到封装的 request.user 的 username    print(request.user.password)  # 获取到封装的 request.user 的 password    return render(request, "index.html")

访问,http://127.0.0.1:8000/login/

 

输入 admin,admin123

 

验证成功

看一下执行结果:

得到的密码是加密后的

 

logout():

当调用该函数时,当前请求的 session 信息会全部被清除

如果没有登录信息,使用该函数也不会报错

views.py:

from django.shortcuts import render, redirectfrom django.contrib import authdef login(request):    if request.method == "POST":        username = request.POST.get("username")        password = request.POST.get("password")        # 判断用户名密码是否有效        user = auth.authenticate(username=username, password=password)        # 将登录的用户封装到 request.user        auth.login(request, user)        if user:            # 如果用户名密码有效            return redirect("/index/")    return render(request, "login.html")def index(request):    print(request.user.username)  # 获取到封装的 request.user 的 username    print(request.user.password)  # 获取到封装的 request.user 的 password    return render(request, "index.html")def logout(request):    auth.logout(request)    return redirect("/login/")

index.html:

    
index 页面

这里是 index 页面

注销

访问,http://127.0.0.1:8000/login/

 

输入 admin,admin123

 

点击“注销”

 

跳转到登录页面

 

is_authenticated():

该方法用来判断当前请求是否通过了认证

views.py:

from django.shortcuts import render, redirectfrom django.contrib import authdef login(request):    if request.method == "POST":        username = request.POST.get("username")        password = request.POST.get("password")        # 判断用户名密码是否有效        user = auth.authenticate(username=username, password=password)        # 将登录的用户封装到 request.user        auth.login(request, user)        if user:            # 如果用户名密码有效            return redirect("/index/")    return render(request, "login.html")def index(request):    print(request.user.username)  # 获取到封装的 request.user 的 username    print(request.user.password)  # 获取到封装的 request.user 的 password    ret = request.user.is_authenticated()  # 判断是否通过了认证    print(ret)    return render(request, "index.html")def logout(request):    auth.logout(request)    return redirect("/login/")

访问,http://127.0.0.1:8000/login/

 

输入 admin,admin123

 

 

login_requierd():

该方法可以给视图函数添加登录校验

如果用户没有登录,则会跳转到 django 默认的登录 URL “/accounts/login/”,并传递当前访问 url 的绝对路径(登陆成功后,会重定向到该路径)

views.py:

from django.shortcuts import render, redirectfrom django.contrib import authfrom django.contrib.auth.decorators import login_requireddef login(request):    if request.method == "POST":        username = request.POST.get("username")        password = request.POST.get("password")        # 判断用户名密码是否有效        user = auth.authenticate(username=username, password=password)        # 将登录的用户封装到 request.user        auth.login(request, user)        if user:            # 如果用户名密码有效            return redirect("/index/")    return render(request, "login.html")@login_requireddef index(request):    return render(request, "index.html")

访问,http://127.0.0.1:8000/index/

 

因为不存在 /account/login/ 目录

如果需要自定义登录的 URL,可以在 settings.py 中通过 LOGIN_URL 进行修改

 

访问,http://127.0.0.1:8000/index/

 

 

create_user():

该方法用于创建一个新的用户

views.py:

from django.shortcuts import HttpResponsefrom django.contrib.auth.models import Userdef reg(request):    User.objects.create_user(username="test", password="test")  # 创建新用户    return HttpResponse("注册成功!")

访问,http://127.0.0.1:8000/reg/

 

查看 auth_user 表

 

添加成功

 

create_superuser():

该方法用于创建超级用户

views.py:

from django.shortcuts import HttpResponsefrom django.contrib.auth.models import Userdef reg(request):    User.objects.create_superuser(username="root", password="root123", email="")  # 创建新的超级用户    return HttpResponse("注册成功!")

访问,http://127.0.0.1:8000/reg/

查看 auth_user 表

 

成功创建超级用户

 

check_password(raw_password):

该方法检查密码是否正确的,需要提供当前请求用户的密码

密码正确返回 True,否则返回 False

views.py:

from django.shortcuts import render, redirectfrom django.contrib import authdef login(request):    if request.method == "POST":        username = request.POST.get("username")        password = request.POST.get("password")        # 判断用户名密码是否有效        user = auth.authenticate(username=username, password=password)        # 将登录的用户封装到 request.user        auth.login(request, user)        if user:            # 如果用户名密码有效            return redirect("/index/")    return render(request, "login.html")def index(request):    ret = request.user.check_password(raw_password="aaa")  # 检查密码是否是 aaa    print(ret)    return render(request, "index.html")

访问,http://127.0.0.1:8000/login/

输入 admin,admin123

运行结果:

 

 

 

set_password(raw_password):

该方法用来修改密码

views.py:

from django.shortcuts import HttpResponsefrom django.contrib.auth.models import Userdef reg(request):    user_obj = User.objects.create_user(username="test1", password="test")  # 创建新用户    user_obj.set_password("root")  # 设置新密码    user_obj.save()  # 保存设置的新密码    return HttpResponse("注册成功!")

新创建的用户 test1 的密码为 root,而不是 test

这里需要用 save 将设置的新密码保存

 

转载于:https://www.cnblogs.com/sch01ar/p/11522960.html

你可能感兴趣的文章
Go 面试每天一篇(第 93 天)
查看>>
Go 面试每天一篇(第 94 天)
查看>>
Go 面试每天一篇(第 95 天)
查看>>
Go 面试每天一篇(第 96 天)
查看>>
Go 面试每天一篇(第 97 天)
查看>>
Go 面试每天一篇(第 98 天)
查看>>
Go语言爱好者周刊:第 20 期
查看>>
Go语言爱好者周刊:第 78 期 — 这道关于 goroutine 的题
查看>>
5 分钟内学习 Go 语言?
查看>>
Go 语言常见的坑
查看>>
Strings、bytes and runes -- 就要学习Go语言
查看>>
包罗万象的结构体 -- 就要学习 Go 语言
查看>>
函数 -- 就要学习 Go 语言
查看>>
可变函数 -- 就要学习 Go 语言
查看>>
教女朋友写方法 -- 就要学习 Go 语言
查看>>
Go 语言接口详解(一)
查看>>
git 删除远程仓库中的文件或者文件夹
查看>>
配置SSH连接GitHub
查看>>
pycharm 开启代码提示
查看>>
Ubuntu 截图工具gnome-screenshot
查看>>