學習筆記,僅供參考
用戶認證系統
Django自帶一個用戶認證系統,它處理用戶賬號、組、權限以及基於cookie的用戶會話。
-
作用
-
添加普通用戶和超級用戶
-
修改密碼
-
登陸和退出管理
-
查看已登陸用戶
-
User模型類
- auth應用
現在,我們看一下mybookstore數據庫下的數據表:
mysql> show tables;
+----------------------------+
| Tables_in_mybookstore |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| bookstore_book |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| userinfo_user |
+----------------------------+
12 rows in set (0.00 sec)
我們知道Django對這些數據表的命名規則爲應用名_類名
,由上面的輸出結果,我們發現前6個數據表都是以auth爲開頭的,這是因爲Django自動的給我們創建了一個應用auth,這是一個用戶驗證的APP,在它的models.py模塊中有一個User模型類,我們可以導入該類,幫助我們完成用戶驗證的工作。
- User模型類的導入
from django.contrib.auth.models import User
- User對象的基本屬性
屬性名 | 類型 | 是否必須存在 |
---|---|---|
username | 用戶名 | 是 |
password | 密碼 | 是 |
郵箱 | 可選 | |
first_name | 名 | 可選 |
last_name | 姓 | 可選 |
is_superuser | 是否是管理員(超級用戶)帳號(/admin) | 可選 |
is_staff | 是否可以訪問admin管理界面 | 可選 |
is_active | 是否是活躍用戶,默認True。 服務器端一般不會輕易刪除用戶,而是將用戶的is_active設爲False,這樣用戶將處於不可用狀態。 |
可選 |
last_login | 上一次的登錄時間 | 可選 |
date_joined | 用戶創建的時間 | 可選 |
還記得我們在學習admin後臺數據庫管理時的一條創建管理員帳號的命令麼:
python manage.py createsuperuser
這條命令其實就相當於創建了一個User對象,即在mysql的auth_user數據表中添加了一條用戶記錄.
- 數據庫的表現形式
現在,我們看一下mysql中的auth_user數據表:
mysql> desc auth_user;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| password | varchar(128) | NO | | NULL | |
| last_login | datetime(6) | YES | | NULL | |
| is_superuser | tinyint(1) | NO | | NULL | |
| username | varchar(150) | NO | UNI | NULL | |
| first_name | varchar(30) | NO | | NULL | |
| last_name | varchar(150) | NO | | NULL | |
| email | varchar(254) | NO | | NULL | |
| is_staff | tinyint(1) | NO | | NULL | |
| is_active | tinyint(1) | NO | | NULL | |
| date_joined | datetime(6) | NO | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
11 rows in set (0.02 sec)
可以看到id爲11位的整形,password最多可以存儲128個字符,username最多可以存儲150個字符等等…
auth基本模型操作
創建用戶
- 創建普通用戶create_user
from django.contrib.auth import models
user = models.User.objects.create_user(username='用戶名', password='密碼', email='郵箱',...)
...
user.save()
- 創建超級用戶create_superuser
from django.contrib.auth import models
user = models.User.objects.create_superuser(username='用戶名', password='密碼', email='郵箱',...)
...
user.save()
刪除用戶
from django.contrib.auth import models
try:
user = models.User.objects.get(username='用戶名')
user.is_active = False
#使當前用戶無效
user.save()
print("刪除普通用戶成功!")
except:
print("刪除普通用戶失敗")
修改密碼
from django.contrib.auth import models
try:
user = models.User.objects.get(username='用戶名')
user.set_password('新密碼')
#Django會利用set_password方法對新密碼進行加密
#所以,我們不能用user.password的方法修改密碼
user.save()
return HttpResponse("修改密碼成功!")
except:
return HttpResponse("修改密碼失敗!")
檢查密碼是否正確
from django.contrib.auth import models
try:
user = models.User.objects.get(username='用戶名')
if user.check_password('輸入的密碼'):
#成功返回True,失敗返回False
#Django會先對輸入的密碼進行加密
#然後再對保存在數據庫中的加密後密碼進行比較
return HttpResponse("密碼正確")
else:
return HttpResponse("密碼錯誤")
except:
return HttpResponse("沒有此用戶!")