[Django高階之Auth模組]

auth模組 ←詳情點選檢視

1、Auth模組是什麼

Auth模組是Django自帶的使用者認證模組:

我們在開發一個網站的時候,無可避免的需要設計實現網站的使用者系統。此時我們需要實現包括使用者註冊、使用者登入、使用者認證、登出、修改密碼等功能,這還真是個麻煩的事情呢。

Django作為一個完美主義者的終極框架,當然也會想到使用者的這些痛點。它內建了強大的使用者認證系統–auth,它預設使用 auth_user 表來儲存使用者資料。

1 django提供的使用者認證,建立,修改密碼。。。使用者相關操作
2 不需要建立使用者表了,預設帶了
3 插入資料(建立使用者):
python3 manage.py createsuperuser # 建立超級使用者 通常只有一到兩個超級使用者

2、auth模組常用方法

from django.contrib import auth   # 匯入auth模組

urls.py

from app01 import views

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/',views.MyLogin.as_view()), # 登入介面
url(r'^aa/',views.aa,name='aa'),
url(r'^set_password/',views.set_password,) # 修改密碼
]

views.py

from django.contrib import auth   # 匯入auth模組

def login(request):

    if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password') # 返回一個物件 即驗證使用者名稱以及密碼是否正確,一般需要username 、password兩個關鍵字引數。request不是必填引數
user_obj = auth.authenticate(request,username=username,password=password)
# print(user_obj)
# print(user_obj.username)
# print(user_obj.password) if user_obj: # 返回值有可能為假 所以需要判斷是否為真
auth.login(request,user_obj) # 為真的話 儲存使用者狀態 用auth.login()方法 '''只要執行了login方法、那麼在任意位置都可以通過request.user獲取當前物件''' return render(request,'login.html',locals()) def aa(request):
'''只要執行了login方法、那麼在任意位置都可以通過request.user獲取當前物件''' print(request.user) # 獲取使用者物件 如果沒有登入就是匿名使用者
# print(request.user.username)
# print(request.user.password)
print(request.user.is_authenticated()) # 判斷使用者是否登入
return HttpResponse('哈哈') # 修改密碼
# 驗證是否登入裝飾器 匯入模組↓
from django.contrib.auth.decorators import login_required # @login_required(login_url='dl') # 驗證是否登入裝飾器
@login_required # 全域性驗證是否登入裝飾器
def set_password(request): old_password = request.POST.get('old_password') # 老密碼
new_password = request.POST.get('new_password') # 新密碼 # 校驗原密碼是否相同 得到一個返回時 True or false
# 用 request.user.check_password(老密碼) 可以 自動校驗
is_right = request.user.check_password(old_password)
# print(is_right) if is_right: # 修改新密碼 使用 request.user.set_password(新密碼)方法
request.user.set_password(new_password) # 一定要儲存 不儲存 修改無效
request.user.save()
return render(request,'set_password.html',locals())

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<h1>使用者登入</h1>
<form action="" method="post">
{% csrf_token %}
<p>username:<input type="text" name="username"></p>
<p>password:<input type="text" name="password"></p> <button>提交</button> </form> </body>
</html>

set_password.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body> <h1>密碼修改</h1> <form action="" method="post">
{% csrf_token %} <p>username:<input type="text" name="username" value="{{ request.user.username }}" disabled></p> <p>old_password:<input type="text" name="old_password"></p> # 輸入老密碼 <p>new_password:<input type="text" name="new_password"></p> # 輸入新密碼 <input type="submit"> </form> </body>
</html>

總結操作:

from django.contrib import auth

# 校驗使用者名稱密碼是否正確
auth.authenticate(request,username=username,password=password) # 儲存使用者狀態
auth.login(request,user_obj) # 檢視使用者是否登入
request.user.is_authenticated() # 獲取使用者物件
request.user # 校驗原密碼是否正確
request.user.check_password() # 修改密碼
request.user.set_password()
request.user.save() # 校驗是否登入裝飾器
from django.contrib.auth.decorators import login_required
"""
跳轉全域性配置
只需在settings配置檔案下寫入
LOGIN_URL = '/lg/'
直接在你想要裝飾的物件上寫入@login_required即可 跳轉區域性配置
@login_required(login_url='/lg/')
"""