django-auth组件
auth組件
一、auth模塊簡介
auth模塊是django自帶的用戶認證模塊,包含了身份驗證和權限管理兩部分。
身份驗證用于核實某個用戶是否合法,權限管理用于決定一個合法用戶有哪些權限
默認情況下,使用django-admin startproject命令后,認證模塊已經添加到settings文件中,如果沒有請手動添加
INSTALLED_APPS中添加 `django.contrib.auth` 包含認證框架的核心以及默認模型 `django.contrib.contenttypes` 內容類型系統,用于給模型關聯許可 ------------------------------------------------------------------- MIDDLEWARE中添加 `SessionMiddleware` 通過請求管理會話 `AuthenticationMiddleware` 將會話和用戶關聯二、用戶對象
在django中用戶對象是用戶認證系統的核心,只有一個用戶模型就是User模型,它位于django.contrib.auth.models,使用auth_user表來存儲用戶數據
1.創建用戶
create_user(username、password)-------普通用戶
from django.contrib.auth.models import User user = User.objects.create_user(username='用戶名',password='密碼',email='郵箱',...)user是一個User類的實例,已經保存在了數據庫內,你可以隨時修改它的屬性,例如: user.last_name='fj' user.save()create_superuser(username、password)-----------超級用戶
from django.contrib.auth.models import User user = User.objects.create_superuser(username='用戶名',password='密碼',email='郵箱',...)2.修改密碼
注:Django默認會對密碼進行加密,因此,不要對密碼進行直接操作
set_password(password)------設置密碼
user.set_password(password='') user.save()check_password(password)-----檢查密碼是否正確
ok=user.check_password('密碼')需要提供當前請求用戶的密碼,正確返回True,錯誤返回False3.用戶驗證
authenticate()
驗證用戶名以及密碼是否正確,一般需要username 、password兩個關鍵字參數。
如果認證成功(用戶名和密碼正確有效),便會返回一個 User 對象。
from django.contrib import auth user = authenticate(username='usernamer',password='password') if user:#認證成功 else:#認證失敗is_authenticated()用來判斷是否通過了認證
def my_view(request):if not request.user.is_authenticated():return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))4.User對象的屬性
- is_staff:用戶是否擁有網站的管理權限
- is_active:是否允許用戶登錄,設置為False可以在不刪除用戶的前提下禁止用戶登錄
三、在視圖中認證用戶
django使用session和中間件關聯請求對象中和認證系統,每一次請求都包含一個request.user屬性,表示當前用戶,如果用戶未登錄,該值為AnonymousUser實例(匿名用戶),如果登錄它就是一個User模型的實例。
1.登錄用戶
login(HttpRequest,user)---會將用戶的ID保存在django的session中
from django.contrib.auth import authenticate,logindef my_view(request):username = request.POST['username']password = request.POST['password']user = authenticate(username=username, password=password)if user:login(request,user)return HttpResponse('登錄成功')else:return HttpResponse('用戶名或密碼錯誤')2.注銷用戶
logout(request)----無返回值
from django.contrib.auth import logoutdef logout_view(request):logout(request)- 當前請求的session信息會被全部刪除,如果用戶沒有登錄也不會報錯
3.登錄認證裝飾器
login_requierd(redirect_field_name='next',login_url='/login/')
用于給視圖添加登錄校驗
from django.contrib.auth.decorators import login_required@login_required def other_view(request):...- redirect_field_name:修改的是瀏覽器 ? 后面的key值
- login_url='/login/' 如果沒有登錄跳轉到的頁面 (局部設置)
- 在settings.LOGIN_URL設置沒有登錄跳轉的頁面,傳遞當前路徑為url字符串的參數(全局設置)
- 如果已經登錄,執行正常的視圖
四、擴展默認的auth_user表
默認的auth_user表字段是固定的幾個,需要擴展的話可以通過下面的方法
1.定義一個表模型,和User一對一管理
class UserDetail(models.Model):phone=models.CharField(max_length=32)# 一對一跟auth_user表做關聯# 如果是從外部引入的表模型,是不能加引號的# 如果加引號,只是在當前model找user=models.OneToOneField(to=User)2.定義一個表模型,繼承(AbstractUser類)
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):"""用戶信息表"""nid = models.AutoField(primary_key=True)phone = models.CharField(max_length=11, null=True, unique=True)def __str__(self):return self.username建好模型后需要在settings中配置,
AUTH_USER_MODEL='app名.UserInfo'注:一旦指定了新的表模型,之前的表模型就不能用了。
轉載于:https://www.cnblogs.com/mangM/p/10020717.html
總結
以上是生活随笔為你收集整理的django-auth组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uabntu18.04 安装mysql5
- 下一篇: 今日头条屏幕适配方案落地研究