Python - Django - auth 模块

生成数据库html

 

查看 auth_user 数据库python

 

 

给 auth_user 表建立一个超级用户数据库

 

邮箱地址能够不写django

再看一下 auth_user 表后端

 

密码被加密了session

login.html:函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆页面</title>
</head>
<body>

<form action="/login/" method="post">
    {% csrf_token %}
    <p>
        用户名:
        <input type="text" name="username">
    </p>
    <p>
        密码:
        <input type="password" name="password">
    </p>
    <p>
        <input type="submit" value="登陆">
    </p>
</form>

</body>
</html>

 

authenticate():

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

若是认证成功,会返回一个 User 对象;若是认证失败,会返回一个匿名对象ui

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

views.py:

from django.shortcuts import render, redirect
from django.contrib import auth


def 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, redirect
from django.contrib import auth


def 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, redirect
from django.contrib import auth


def 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:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index 页面</title>
</head>
<body>

<h1>这里是 index 页面</h1>
<a href="/logout/">注销</a>

</body>
</html>

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

 

输入 admin,admin123

 

点击“注销”

 

跳转到登陆页面

 

is_authenticated():

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

views.py:

from django.shortcuts import render, redirect
from django.contrib import auth


def 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, redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required


def 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_required
def 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 HttpResponse
from django.contrib.auth.models import User


def 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 HttpResponse
from django.contrib.auth.models import User


def 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, redirect
from django.contrib import auth


def 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 HttpResponse
from django.contrib.auth.models import User


def 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 将设置的新密码保存

相关文章
相关标签/搜索