Django(part48)--用户认证系统
學(xué)習(xí)筆記,僅供參考
文章目錄
- 用戶認(rèn)證系統(tǒng)
- User模型類
- auth基本模型操作
- 創(chuàng)建用戶
- 刪除用戶
- 修改密碼
- 檢查密碼是否正確
用戶認(rèn)證系統(tǒng)
Django自帶一個用戶認(rèn)證系統(tǒng),它處理用戶賬號、組、權(quán)限以及基于cookie的用戶會話。
-
作用
-
添加普通用戶和超級用戶
-
修改密碼
-
登陸和退出管理
-
查看已登陸用戶
-
User模型類
- auth應(yīng)用
現(xiàn)在,我們看一下mybookstore數(shù)據(jù)庫下的數(shù)據(jù)表:
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對這些數(shù)據(jù)表的命名規(guī)則為應(yīng)用名_類名,由上面的輸出結(jié)果,我們發(fā)現(xiàn)前6個數(shù)據(jù)表都是以auth為開頭的,這是因為Django自動的給我們創(chuàng)建了一個應(yīng)用auth,這是一個用戶驗證的APP,在它的models.py模塊中有一個User模型類,我們可以導(dǎo)入該類,幫助我們完成用戶驗證的工作。
- User模型類的導(dǎo)入
- User對象的基本屬性
| username | 用戶名 | 是 |
| password | 密碼 | 是 |
| 郵箱 | 可選 | |
| first_name | 名 | 可選 |
| last_name | 姓 | 可選 |
| is_superuser | 是否是管理員(超級用戶)帳號(/admin) | 可選 |
| is_staff | 是否可以訪問admin管理界面 | 可選 |
| is_active | 是否是活躍用戶,默認(rèn)True。 服務(wù)器端一般不會輕易刪除用戶,而是將用戶的is_active設(shè)為False,這樣用戶將處于不可用狀態(tài)。 | 可選 |
| last_login | 上一次的登錄時間 | 可選 |
| date_joined | 用戶創(chuàng)建的時間 | 可選 |
還記得我們在學(xué)習(xí)admin后臺數(shù)據(jù)庫管理時的一條創(chuàng)建管理員帳號的命令么:
python manage.py createsuperuser這條命令其實就相當(dāng)于創(chuàng)建了一個User對象,即在mysql的auth_user數(shù)據(jù)表中添加了一條用戶記錄.
- 數(shù)據(jù)庫的表現(xiàn)形式
現(xiàn)在,我們看一下mysql中的auth_user數(shù)據(jù)表:
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基本模型操作
創(chuàng)建用戶
- 創(chuàng)建普通用戶create_user
- 創(chuàng)建超級用戶create_superuser
刪除用戶
from django.contrib.auth import models try:user = models.User.objects.get(username='用戶名')user.is_active = False #使當(dāng)前用戶無效user.save()print("刪除普通用戶成功!") except:print("刪除普通用戶失敗")
修改密碼
from django.contrib.auth import models try:user = models.User.objects.get(username='用戶名')user.set_password('新密碼')#Django會利用set_password方法對新密碼進(jìn)行加密#所以,我們不能用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會先對輸入的密碼進(jìn)行加密#然后再對保存在數(shù)據(jù)庫中的加密后密碼進(jìn)行比較return HttpResponse("密碼正確")else:return HttpResponse("密碼錯誤") except:return HttpResponse("沒有此用戶!")
總結(jié)
以上是生活随笔為你收集整理的Django(part48)--用户认证系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Django(part47)--文件上传
- 下一篇: 原生家庭对个人成长及性格的影响