日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django User 模塊之 AbstractUser 擴展詳解

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

最近在寫博客,剛好寫到用戶注冊注銷模塊,覺得這一方面還是挺有趣的。當嘗試掀開 Django 的源代碼時一切 API 就不會變得那么摸不著。順著讀Django 的各模塊源碼,我們可以更靈活地更改代碼以實現自己想要的功能。

現在,思考一個問題,主需求是實現博客中用戶的注冊登錄登出功能。如果只滿足于用戶注冊時只登記其郵箱或是用戶名,Django 自帶的 User 模塊既可以實現。但實際上,一個普遍的要求是注冊用戶應該能夠修改自己的頭像信息,郵箱信息,昵稱信息等其他更靈活的需求。

可以先看一下 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 模塊實際上繼承了 AbstractUser 模塊,AbstractUser 模塊下有 :

usernamefirst_namelast_nameemaildate_joined …

你可以看出,User 模塊繼承了 AbstractUser 抽象基類,而僅僅只是繼承了,并沒有對 AbstractUser 進行任何擴展。所以,對于一個需要更多需求的 User 模塊信息來說,我們可以繼承 AbstractUser 并根據自己的需求進行擴展。

現在,我們對用戶屬性添加一些需求,比如支持用戶修改頭像、支持用戶昵稱、qq、wechat 以及網站鏈接等。

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

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

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

AUTH_USER_MODEL = ’blog.user’

其中,blog 為你對應的應用 app 信息,user 為 blog 應用下的 user 模塊,在這里 blog 和 user 大小寫無關。

如果在你現在執行數據庫遷移命令,可能會出現 blog 不存在 user 模塊 的提示,而無法重新進行數據遷移。

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 的用戶模型,并重新將其自定義為 AUTH_USER_MODEL = blog.user 請刪掉 migrations 目錄下的所有文件 以及數據庫文件。

刪除之后,重新進行數據庫的遷移

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

這個時候,所使用的用戶即為自定義后的用戶了。

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

這里可以在模板中指定數據庫 db_table = ’user’

補充知識:Django學習筆記——內置用戶類AbstractUser與內置認證校驗系統

內置用戶類AbstractUser

我們在之前講過了model模型的作用和父類的作用,這次介紹的內置用戶類AbstractUser就是Django內置的一個關于用戶操作的類,它極大地方便了我們對model模型中對User用戶類的設計。而所謂內置用戶類的本質也就是一個封裝好的父類,所以使用起來是相當的方便。

#導入AbstractUser類from django.contrib.auth.models import AbstractUser#直接繼承就可以了,如果有需要就向尋常model一樣寫字段就可以class User(AbstractUser): pass

我們通過查看AbstractUser的源碼可以知道它設有幾個字段

#用戶名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) #權限 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)

內置認證校驗系統

django自帶的用戶認證校驗系統較為簡單,主要就是認證用戶名密碼的正確與否

首先要在settings里面配置

#使用自帶的認證系統AUTH_USER_MODEL = 'user.User'

這是配合自帶的用戶類AbstractUser一起使用的

通常使用在類視圖中的post方法校驗用戶登錄等操作

在view中的具體代碼如下

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

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

兩個參數都是拿到前端用戶輸入的信息

以上這篇Django User 模塊之 AbstractUser 擴展詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩视频免费观看| 亚州av乱码久久精品蜜桃| 欧美日韩亚洲在线观看| 九九精品调教| 久久精品青草| 伊人久久视频| 精品理论电影在线| 丁香婷婷久久| 国产精品原创| 久久国产影院| 香蕉成人久久| 日本麻豆一区二区三区视频| 国产欧美日韩精品一区二区三区| 精品国产网站| 美女少妇全过程你懂的久久| 国产农村妇女精品一区二区| 综合激情网...| 婷婷综合福利| 国产精品一站二站| 日韩av在线播放网址| 亚洲成人精品| 欧美日韩激情在线一区二区三区| 美日韩精品视频| 欧美精品中文字幕亚洲专区| 国际精品欧美精品| 免费不卡中文字幕在线| 日韩中文字幕| 风间由美中文字幕在线看视频国产欧美| 精精国产xxxx视频在线野外| 免费日韩av片| 国产精品任我爽爆在线播放 | 国产美女高潮在线| 亚洲神马久久| 久久精品国产网站| 亚洲一区二区成人| 精品欧美日韩精品| 亚洲综合日韩| 日韩.com| 青青国产精品| 久久亚洲在线| 国产精品黄网站| 欧美午夜精彩| 国产精品超碰| 亚洲在线成人| 亚洲精品**中文毛片| 亚洲资源在线| 欧美激情另类| 国产日韩欧美| 中文日韩欧美| 97欧美在线视频| 日本视频中文字幕一区二区三区| 欧美久久天堂| 国产日韩一区二区三区在线播放| 国产主播一区| 久久精品一区二区三区中文字幕| 国产精品88久久久久久| 久久精品伊人| 中文字幕乱码亚洲无线精品一区| 国产成人精品一区二区三区在线| 亚洲无线观看| 久久久久午夜电影| 国产精品极品国产中出| 三级欧美在线一区| 日本欧美不卡| 精品久久电影| 久久国产尿小便嘘嘘| 视频在线观看国产精品| 999视频精品| 成人日韩av| 国产精品扒开腿做爽爽爽软件| 蜜臀精品一区二区三区在线观看| 久久狠狠婷婷| а√在线中文在线新版| 欧美午夜三级| 一区二区三区午夜视频| 久久久精品网| 蜜臀av性久久久久蜜臀aⅴ流畅| 视频福利一区| 欧美黄色一区| 国产精品网址| 日韩.com| 米奇777超碰欧美日韩亚洲| 91九色精品国产一区二区| 亚洲激情五月| 国产乱子精品一区二区在线观看 | 亚洲a在线视频| 久久久亚洲欧洲日产| 国产不卡精品| 快she精品国产999| 亚洲不卡视频| 美女av在线免费看| 国产精品久久久久毛片大屁完整版| 三级亚洲高清视频| 视频一区二区中文字幕| 影音先锋久久| 亚洲激情不卡| 欧美日韩激情在线一区二区三区| 蜜桃一区二区三区| 在线一区视频| 在线精品一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 一区二区小说| 欧美日韩四区| 视频一区欧美日韩| 欧美日韩一区自拍| 亚洲精品国产精品粉嫩| 欧美日一区二区| 亚洲午夜天堂| 鲁大师精品99久久久| 日韩午夜一区| 国产乱码精品一区二区三区亚洲人 | 黄色免费成人| 亚洲欧洲一区| 福利一区二区三区视频在线观看| 爽好多水快深点欧美视频| 伊人久久大香线蕉av不卡| 麻豆精品少妇| 一区免费在线| 国产美女一区| 欧美一区久久久| 久久一级电影| 亚洲精品a级片| 亚洲精选久久| 国产福利资源一区| 日本在线高清| 在线国产一区| 日本少妇精品亚洲第一区| 日韩福利视频一区| av免费不卡国产观看| 久久国产精品久久久久久电车| 日韩国产精品久久久久久亚洲| 国产精品a久久久久| 蜜桃视频在线网站| 一区二区三区四区日韩| 精品三级av| 国产亚洲一区在线| 亚洲涩涩av| 日韩在线欧美| 欧美激情麻豆| 视频一区日韩| 久久久久国产精品一区二区| 欧美好骚综合网| 久久亚洲电影| 亚洲v在线看| 色老板在线视频一区二区| 日本成人在线不卡视频| 不卡在线一区| 99在线观看免费视频精品观看| 日韩在线中文| 欧美不卡高清一区二区三区| 国产成人久久精品一区二区三区| 日韩激情网站| 四虎在线精品| 欧美一区91| 日本视频一区二区| 国产欧美一区二区三区国产幕精品| 中文字幕日本一区| 噜噜噜躁狠狠躁狠狠精品视频| 久久国产日韩| 蜜桃一区二区三区| 国产尤物精品| 亚洲综合日本| 视频在线观看一区| 免费观看在线综合色| 日本欧美大码aⅴ在线播放| 国产精品天天看天天狠| 成人在线免费观看网站| 久久精品亚洲欧美日韩精品中文字幕| 亲子伦视频一区二区三区| 亚洲精品一级二级| 91精品精品| 日韩精品欧美大片| 人人精品久久| 国产视频一区二| 天堂8中文在线最新版在线| 国产亚洲毛片| 国内精品麻豆美女在线播放视频| 99热国内精品| 亚洲精品在线国产| 久久只有精品| 亚州av乱码久久精品蜜桃| 欧美私人啪啪vps| 日韩在线高清| 国产日韩在线观看视频| 成人午夜国产| 欧美极品中文字幕| 久久亚洲精品伦理| 麻豆成人综合网| 美女毛片一区二区三区四区| 日韩精品视频中文字幕| 日韩欧美一区二区三区在线视频| 中文不卡在线| 欧美综合另类| 国产一区二区久久久久| 亚洲欧洲美洲国产香蕉| 91精品精品| 91亚洲国产| 精品久久电影| 卡一精品卡二卡三网站乱码| 日本精品在线播放|