網(wǎng)站首頁 編程語言 正文
1. auth模塊
auth模塊是對(duì)登錄認(rèn)證方法的一種封裝,本身就是一個(gè)對(duì)象,可以獲取用戶的詳細(xì)信息,有了auth模塊可以驗(yàn)證登錄信息是否存在數(shù)據(jù)庫中,還可以檢驗(yàn)用戶是否已經(jīng)登錄,校驗(yàn)密碼等。
在創(chuàng)建完django項(xiàng)目之后,執(zhí)行數(shù)據(jù)庫遷移之后,數(shù)據(jù)庫里會(huì)增加很多新表,其中有一張名為auth_user的表,當(dāng)訪問django自帶的路由admin的時(shí)候,需要輸入用戶名和密碼,其參照的就是auth_user表
使用python3 manage.py crataesupperuser 可以創(chuàng)建超級(jí)管理員用戶,同時(shí)在auth_user表里面產(chǎn)生一條超級(jí)用戶數(shù)據(jù)
1.1 auth模塊的常用方法
from django.contrib import auth
# 1.比對(duì)用戶名和密碼是否正確
user_obj = auth.authenticate(request,username=username,password=password)
# 括號(hào)內(nèi)必須同時(shí)傳入用戶名和密碼
print(user_obj) # 返回的是用戶對(duì)象 jason 數(shù)據(jù)不符合則返回None
print(user_obj.username) # jason
print(user_obj.password) # 結(jié)果為密文
# 2.保存用戶狀態(tài)
auth.login(request,user_obj) # 類似于request.session[key] = user_obj
# 主要執(zhí)行了該方法 你就可以在任何地方通過request.user獲取到當(dāng)前登陸的用戶對(duì)象
# 3.判斷當(dāng)前用戶是否登陸
request.user.is_authenticated()
登錄了返回true,否則返回false
# 4.獲取當(dāng)前登陸用戶對(duì)象
user_obj=request.user
# 5.校驗(yàn)用戶是否登陸的裝飾器
from django.contrib.auth.decorators import login_required
# 局部配置
@login_required(login_url='/login/')
在需要裝飾的函數(shù)上添加上述裝飾器,括號(hào)里表示未登錄則跳轉(zhuǎn)到指定url
# 在setting.py里進(jìn)行全局配置
LOGIN_URL = '/login/'
1.如果局部和全局都有 該聽誰的?
局部 > 全局
2.局部和全局哪個(gè)好呢?
全局的好處在于無需重復(fù)寫代碼 但是跳轉(zhuǎn)的頁面卻很單一
局部的好處在于不同的視圖函數(shù)在用戶沒有登陸的情況下可以跳轉(zhuǎn)到不同的頁面
# 6.比對(duì)原密碼
is_right=request.user.check_password(old_password)
返回的是true或者false
# 7.修改密碼
request.user.set_password(new_password) # 僅僅是在修改對(duì)象的屬性
request.user.save() # 這一步才是真正的操作數(shù)據(jù)庫
# 8.注銷
auth.logout(request)
# 9.注冊
# 操作auth_user表寫入數(shù)據(jù)
from django.contrib.auth.models import User #導(dǎo)入模塊
User.objects.create(username=username,password=password) # 寫入數(shù)據(jù) 不能用create 密碼沒有加密處理
# 創(chuàng)建普通用戶
User.objects.create_user(username=username,password=password)
# 創(chuàng)建超級(jí)用戶(了解):使用代碼創(chuàng)建超級(jí)用戶 郵箱是必填的 而用命令創(chuàng)建則可以不填
User.objects.create_superuser(username=username,email='123@qq.com',password=password)
1.2 如何擴(kuò)展auth_user表
from django.db import models
from django.contrib.auth.models import User,AbstractUser
# 第一種方法:一對(duì)一關(guān)系(利用外鍵) 不推薦
# class UserDetail(models.Model):
# phone = models.BigIntegerField()
# user = models.OneToOneField(to='User')
# 第二種:面向?qū)ο蟮睦^承
class UserInfo(AbstractUser):
"""
如果繼承了AbstractUser
那么在執(zhí)行數(shù)據(jù)庫遷移命令的時(shí)候auth_user表就不會(huì)再創(chuàng)建出來了
而UserInfo表中會(huì)出現(xiàn)auth_user所有的字段外加自己擴(kuò)展的字段
這么做的好處在于你能夠直接點(diǎn)擊你自己的表更加快速的完成操作及擴(kuò)展
前提:
1.在繼承之前沒有執(zhí)行過數(shù)據(jù)庫遷移命令
auth_user沒有被創(chuàng)建,如果當(dāng)前庫已經(jīng)創(chuàng)建了那么你就重新?lián)Q一個(gè)數(shù)據(jù)庫
2.繼承的類里面不要覆蓋AbstractUser里面的字段名
表里面有的字段都不要?jiǎng)樱粩U(kuò)展額外字段即可
3.需要在配置文件中告訴django你要用UserInfo替代auth_user(******)
AUTH_USER_MODEL = 'app01.UserInfo'
'應(yīng)用名.表名'
"""
phone = models.BigIntegerField() # 需要添加的新字段
你如果自己寫表替代了auth_user,那么auth模塊的功能還是照常使用,參考的表頁由原來的auth_user變成了UserInfo!
2.admin后臺(tái)管理
django的admin管理后臺(tái)提供了比較完善的管理數(shù)據(jù)庫的接口
2.1 admin后臺(tái)管理的準(zhǔn)備工作
1.創(chuàng)建超級(jí)用戶:python manage.py createsuperuser
2.進(jìn)入127.0.0.1/admin --使用超級(jí)用戶賬號(hào)登錄進(jìn)行用戶的增加或者組的增加
3.在app中的admin.py中導(dǎo)入注冊自己要管理的模型類如:from . models import Book
4.admin.site.register(Book) # 注冊語法,注冊之后admin后臺(tái)就可以對(duì)該表進(jìn)行管理!!
2.2 為admin后臺(tái)設(shè)置樣式和增加數(shù)據(jù)
1.修改admin后臺(tái)的表名
在該表對(duì)應(yīng)的models類里面添加一個(gè)Meta類:
class Meta:
verbose_name_plural = '用戶表' #指定該表在admin后臺(tái)的名字為:用戶表
2.在admin中為具體表增加數(shù)據(jù)
3.null=True,blank=True的區(qū)別
phone = models.BigIntegerField(verbose_name='手機(jī)號(hào)',null=True,blank=True)
"""
null=True:是告訴數(shù)據(jù)庫該字段可以為空,admin后臺(tái)默認(rèn)還是不允許為空
blank=True:告訴admin后臺(tái)該字段可以為空
"""
原文鏈接:https://www.cnblogs.com/suncolor/archive/2022/09/18/16598738.html
相關(guān)推薦
- 2023-07-08 el-table-column重構(gòu)expand的樣式
- 2022-03-19 K8S中五種控制器的介紹以及使用_云其它
- 2022-04-06 通過實(shí)例詳解C語言函數(shù)返回值_C 語言
- 2021-12-11 Linux環(huán)境下查看日志文件命令詳解_Linux
- 2022-12-27 Python?PyQt5實(shí)現(xiàn)拖放效果的原理詳解_python
- 2023-02-12 詳解C#如何實(shí)現(xiàn)隱式類型轉(zhuǎn)換_C#教程
- 2022-05-10 一文帶你了解中Typescript中type與interface的區(qū)別
- 2023-03-28 python程序中調(diào)用其他程序的實(shí)現(xiàn)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支