电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Django User 模塊之 AbstractUser 擴(kuò)展詳解

瀏覽:6日期:2024-10-22 14:53:59

最近在寫(xiě)博客,剛好寫(xiě)到用戶(hù)注冊(cè)注銷(xiāo)模塊,覺(jué)得這一方面還是挺有趣的。當(dāng)嘗試掀開(kāi) Django 的源代碼時(shí)一切 API 就不會(huì)變得那么摸不著。順著讀Django 的各模塊源碼,我們可以更靈活地更改代碼以實(shí)現(xiàn)自己想要的功能。

現(xiàn)在,思考一個(gè)問(wèn)題,主需求是實(shí)現(xiàn)博客中用戶(hù)的注冊(cè)登錄登出功能。如果只滿(mǎn)足于用戶(hù)注冊(cè)時(shí)只登記其郵箱或是用戶(hù)名,Django 自帶的 User 模塊既可以實(shí)現(xiàn)。但實(shí)際上,一個(gè)普遍的要求是注冊(cè)用戶(hù)應(yīng)該能夠修改自己的頭像信息,郵箱信息,昵稱(chēng)信息等其他更靈活的需求。

可以先看一下 Django User 模塊的源碼

class User(AbstractUser): ''' Users within the Django authentication system are represented by this model. Username, password and email are required. Other fields are optional. ''' class Meta(AbstractUser.Meta): swappable = ’AUTH_USER_MODEL’

注意:如果你的是 Anaconda 管理,可以在路徑 C:UsersUserAnaconda3Libsite-packagesdjangocontribauthmodels.py 查看

Django 中的 User 模塊實(shí)際上繼承了 AbstractUser 模塊,AbstractUser 模塊下有 :

usernamefirst_namelast_nameemaildate_joined …

你可以看出,User 模塊繼承了 AbstractUser 抽象基類(lèi),而僅僅只是繼承了,并沒(méi)有對(duì) AbstractUser 進(jìn)行任何擴(kuò)展。所以,對(duì)于一個(gè)需要更多需求的 User 模塊信息來(lái)說(shuō),我們可以繼承 AbstractUser 并根據(jù)自己的需求進(jìn)行擴(kuò)展。

現(xiàn)在,我們對(duì)用戶(hù)屬性添加一些需求,比如支持用戶(hù)修改頭像、支持用戶(hù)昵稱(chēng)、qq、wechat 以及網(wǎng)站鏈接等。

class User(AbstractUser): nickname = models.CharField(max_length=30, blank=True, null=True, verbose_name=’昵稱(chēng)’) qq = models.CharField(max_length=20, blank=True, null=True, verbose_name=’QQ號(hào)碼’) url = models.URLField(max_length=100, blank=True, null=True, verbose_name=’個(gè)人網(wǎng)頁(yè)地址’) avatar = ProcessedImageField(upload_to=’avatar’,default=’avatar/default.png’, verbose_name=’頭像’) class Meta: verbose_name = ’用戶(hù)’ verbose_name_plural = verbose_name ordering = [’-id’] def __str__(self): return self.username

我們給自定義的用戶(hù)模塊增加 nickname(昵稱(chēng)), qq, url(網(wǎng)站鏈接),avatar(頭像)屬性。

注意:為了讓 Django 能夠識(shí)別使用自定義的用戶(hù)模型,必須要在 settings.py 中設(shè)置自定義模塊位置,如在 settings.py 上添加

AUTH_USER_MODEL = ’blog.user’

其中,blog 為你對(duì)應(yīng)的應(yīng)用 app 信息,user 為 blog 應(yīng)用下的 user 模塊,在這里 blog 和 user 大小寫(xiě)無(wú)關(guān)。

如果在你現(xiàn)在執(zhí)行數(shù)據(jù)庫(kù)遷移命令,可能會(huì)出現(xiàn) blog 不存在 user 模塊 的提示,而無(wú)法重新進(jìn)行數(shù)據(jù)遷移。

ValueError: The field account.EmailAddress.user was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.The field admin.LogEntry.user was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.The field blog.Article.author was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.The field easy_comment.Comment.user was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.The field easy_comment.Like.user was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.The field notifications.Notification.recipient was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.The field online_status.OnlineStatus.user was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.The field socialaccount.SocialAccount.user was declared with a lazy reference to ’blog.user’, but app ’blog’ doesn’t provide model ’user’.

所以,如果之前是使用例如 AUTH_USER_MODEL = auth.user 的用戶(hù)模型,并重新將其自定義為 AUTH_USER_MODEL = blog.user 請(qǐng)刪掉 migrations 目錄下的所有文件 以及數(shù)據(jù)庫(kù)文件。

刪除之后,重新進(jìn)行數(shù)據(jù)庫(kù)的遷移

$ python manage.py makemigrations myapp$ python manage.py migrate

這個(gè)時(shí)候,所使用的用戶(hù)即為自定義后的用戶(hù)了。

File 'C:UsersMickyAnaconda3libsite-packagesdjangodbbackendsutils.py', line 85, in _execute return self.cursor.execute(sql, params) File 'C:UsersMickyAnaconda3libsite-packagesdjangodbbackendssqlite3base.py', line 303, in execute return Database.Cursor.execute(self, query, params)django.db.utils.OperationalError: no such table: blog_user

這里可以在模板中指定數(shù)據(jù)庫(kù) db_table = ’user’

補(bǔ)充知識(shí):Django學(xué)習(xí)筆記——內(nèi)置用戶(hù)類(lèi)AbstractUser與內(nèi)置認(rèn)證校驗(yàn)系統(tǒng)

內(nèi)置用戶(hù)類(lèi)AbstractUser

我們?cè)谥爸v過(guò)了model模型的作用和父類(lèi)的作用,這次介紹的內(nèi)置用戶(hù)類(lèi)AbstractUser就是Django內(nèi)置的一個(gè)關(guān)于用戶(hù)操作的類(lèi),它極大地方便了我們對(duì)model模型中對(duì)User用戶(hù)類(lèi)的設(shè)計(jì)。而所謂內(nèi)置用戶(hù)類(lèi)的本質(zhì)也就是一個(gè)封裝好的父類(lèi),所以使用起來(lái)是相當(dāng)?shù)姆奖恪?/p>

#導(dǎo)入AbstractUser類(lèi)from django.contrib.auth.models import AbstractUser#直接繼承就可以了,如果有需要就向?qū)こodel一樣寫(xiě)字段就可以class User(AbstractUser): pass

我們通過(guò)查看AbstractUser的源碼可以知道它設(shè)有幾個(gè)字段

#用戶(hù)名username = models.CharField( _(’username’), max_length=150, unique=True, help_text=_(’Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.’), validators=[username_validator], error_messages={ ’unique’: _('A user with that username already exists.'), }, ) #名 first_name = models.CharField(_(’first name’), max_length=30, blank=True) #姓 last_name = models.CharField(_(’last name’), max_length=150, blank=True) #郵箱 email = models.EmailField(_(’email address’), blank=True) #權(quán)限 is_staff = models.BooleanField( _(’staff status’), default=False, help_text=_(’Designates whether the user can log into this admin site.’), ) #激活 is_active = models.BooleanField( _(’active’), default=True, help_text=_( ’Designates whether this user should be treated as active. ’ ’Unselect this instead of deleting accounts.’ ), ) #日期 date_joined = models.DateTimeField(_(’date joined’), default=timezone.now)

內(nèi)置認(rèn)證校驗(yàn)系統(tǒng)

django自帶的用戶(hù)認(rèn)證校驗(yàn)系統(tǒng)較為簡(jiǎn)單,主要就是認(rèn)證用戶(hù)名密碼的正確與否

首先要在settings里面配置

#使用自帶的認(rèn)證系統(tǒng)AUTH_USER_MODEL = 'user.User'

這是配合自帶的用戶(hù)類(lèi)AbstractUser一起使用的

通常使用在類(lèi)視圖中的post方法校驗(yàn)用戶(hù)登錄等操作

在view中的具體代碼如下

class LoginView(View): def get(self,request): #邏輯代碼 return render(request,’login.html’) def post(self,request): # 獲取前端傳遞過(guò)來(lái)的用戶(hù)名和密碼 username = request.POST.get(’username’) pwd = request.POST.get(’pwd’) record = request.POST.get(’record’) # 進(jìn)行數(shù)據(jù)校驗(yàn) if not all([username,pwd]): return HttpResponse(’數(shù)據(jù)輸入不完整’) # 驗(yàn)證用戶(hù)名和密碼是否正確 user = authenticate(username=username,password=pwd) return render(request,’’index.html’)

主要就是其中的user = authenticate(username=username,password=pwd)

兩個(gè)參數(shù)都是拿到前端用戶(hù)輸入的信息

以上這篇Django User 模塊之 AbstractUser 擴(kuò)展詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | BOE画框屏-触摸一体机-触控查询一体机-触摸屏一体机价格-厂家直销-触发电子 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 成都茶楼装修公司 - 会所设计/KTV装修 - 成都朗煜装饰公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 防腐木批发价格_深圳_惠州_东莞防腐木厂家_森源(深圳)防腐木有限公司 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 厂房出售_厂房仓库出租_写字楼招租_土地出售-中苣招商网-中苣招商网 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 欧必特空气能-商用空气能热水工程,空气能热水器,超低温空气源热泵生产厂家-湖南欧必特空气能公司 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 武汉创亿电气设备有限公司_电力检测设备生产厂家 | 宿松新闻网 宿松网|宿松在线|宿松门户|安徽宿松(直管县)|宿松新闻综合网站|宿松官方新闻发布 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 电脑刺绣_绣花厂家_绣花章仔_织唛厂家-[源欣刺绣]潮牌刺绣打版定制绣花加工厂家 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 氧化铝球_高铝球_氧化铝研磨球-淄博誉洁陶瓷新材料有限公司 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 济南展厅设计施工_数字化展厅策划设计施工公司_山东锐尚文化传播有限公司 | 二手色谱仪器,十万分之一分析天平,蒸发光检测器,电位滴定仪-湖北捷岛科学仪器有限公司 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 断桥铝破碎机_发动机破碎机_杂铝破碎机厂家价格-皓星机械 | 煤机配件厂家_刮板机配件_链轮轴组_河南双志机械设备有限公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 万家财经_财经新闻_在线财经资讯网 | 螺杆泵_中成泵业| 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 |