[Django高級之Auth模塊]
[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="//cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="//cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="//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="//cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="//cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="//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/')
"""