Django(part48)--用戶認證系統

學習筆記,僅供參考




用戶認證系統


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 密碼
email 郵箱 可選
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("沒有此用戶!")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章