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 將設置的新密碼保存

相關文章
相關標籤/搜索