日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django-auth组件

發布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,錯誤返回False

3.用戶驗證

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组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。