auth是Django內部的用戶認證系統,它默認使用 auth_user 表來存儲用戶數據。html
from django.contrib import auth
auth 提供的一個建立新用戶的方法,須要提供必要參數(username、password)等。python
from django.contrib.auth.models import User user = User.objects.create_user(username='用戶名',password='密碼',email='郵箱',...)
注意:create方法加入數據庫中的密碼都是明文數據庫
auth 提供的一個建立新的超級用戶的方法,須要提供必要參數(username、password)等。django
from django.contrib.auth.models import User user_obj = User.objects.create_superuser(username='用戶名',password='密碼',email='郵箱',...)
或者:後端
python manage.py createsuperuser
驗證用戶名以及密碼是否正確,通常須要username 、password兩個關鍵字參數。若是認證成功,返回一個 User 對象,不成功返回None瀏覽器
authenticate()會在該 User 對象上設置一個屬性來標識後端已經認證了該用戶,且該信息在後續的登陸過程當中是須要的。session
user = authenticate(username='theuser',password='thepassword')
該函數接受一個HttpRequest對象,以及一個通過認證的User對象。實現一個用戶登陸的功能。它本質上會在後端爲該用戶生成相關session數據。app
from django.contrib import auth def login(request): if request.method == 'POST': username = request.POST.get('username') pwd = request.POST.get('password') # User.objects.create_user(is_active=True, username=username, password=pwd, is_staff=True) user = auth.authenticate(username=username, password=pwd) if user: auth.login(request, user) #生成session return redirect('/app01/index/') return render(request, 'login.html')
注意:函數
在沒有login_requierd()的前提下,只要使用login(request, user_obj)以後,request.user就能拿到當前登陸的用戶對象。不然request.user獲得的是一個匿名用戶對象(AnonymousUser Object)。工具
該函數接受一個HttpRequest對象,無返回值。
當調用該函數時,當前請求的session信息會所有清除。該用戶即便沒有登陸,使用該函數也不會報錯。本質就是:request.session.flush()
def logout(request): auth.logout(request) return HttpResponse('註銷成功')
注意:session只是以瀏覽器爲依據,在同一瀏覽器上,後登錄的用戶會把先前登錄的用戶註銷
用來判斷當前請求是否經過了認證。
def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' %(request.path))
auth 給咱們提供的一個裝飾器工具,用來快捷的給某個視圖添加登陸校驗。
from django.contrib.auth.decorators import login_required @login_required def my_view(request): ...
若用戶沒有登陸,則會跳轉到django默認的登陸URL '/accounts/login/ ' 並傳遞當前訪問url的絕對路徑 (登錄成功後,會重定向到該路徑)。
若是須要自定義登陸的URL,則須要在settings.py文件中經過LOGIN_URL進行修改。
LOGIN_URL = '/login/' # 這裏配置成你項目登陸頁面的路由
auth 提供的一個檢查密碼是否正確的方法,須要提供當前請求用戶的密碼。
密碼正確返回True,不然返回False。
ok = user_obj.check_password('密碼')
或者直接針對當前請求的user對象校驗原密碼是否正確:
ok = request.user.check_password(raw_password='原密碼')
auth 提供的一個修改密碼的方法,接收 要設置的新密碼 做爲參數。
注意:設置完必定要調用用戶對象的save方法!
user_obj.set_password('新密碼') user_obj.save()
在models寫入:
from django.db import models from django.contrib.auth.models import User class UserDetail(models.Model): phone = models.CharField(max_length=11) user2phone = models.OneToOneField(to=User, on_delete=models.CASCADE,related_name='phone2user')
新建表app01_userinfo代替auth_user,auth_user再也不存在。該方法在一開始便建立好,避免後期修改。
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): phone = models.CharField(max_length=11) addr = models.CharField(max_length=128)
注意:在settings.py中必定要加入:AUTH_USER_MODEL = 'app名.類名', 告訴Django項目用哪張表作認證
AUTH_USER_MODEL = 'blog.UserInfo'
實例:
# 繼承前 def register(request): from django.contrib.auth.models import User user_obj = User.objects.create_user(username="matt", password="123") # 使用繼承後,就沒有User了,建立新用戶須要改變 def register(request): from app01.model import models user_obj = modles.Userinfo.objects.create_user(username="matt", password="123"
參考:
https://www.cnblogs.com/zgf-666/p/9124261.html