django學習日誌之自定義使用者擴充套件

2022-05-17 15:03:18 字數 2966 閱讀 8038

django 為我們提供了強大的使用者認證系統,並且提供了基於該系統的user模型,所以,很多時候,我們有必要對自己的user進行業務擴充套件,得到滿足我們自己業務需求的user。藉此,寫下自己的感悟。

user內建屬性如下:

username

使用者名稱,必需字段。30個字元或更少,包含 _, @, +, . 和 - 字元。

first_name

可選。 <=30字元.

last_name

可選。 <=30字元r.

email

郵箱,可選。 email位址.

password

密碼,必需。django不是以明文儲存密碼的,而是儲存雜湊值。

以及兩個外來鍵:

groups

使用者組。

user_permissions

使用者許可權。

很明顯,這些很多時候是不夠用的。

但是,我學會了兩種擴充套件方法。

第一種,很明顯我們用一對一關係就可以擴充套件自己的屬性了吧,比如,我想要加個address位址屬性。

首先系統的user物件模型在django.contrib.auth.models裡面,然後寫自己的模型,建立一對一關係,我的**如下

#

from django.db import

models

from django.contrib.auth.models import

user

#create your models here.

class

userprofile(models.model):

user =models.onetoonefield(user)

address = models.charfield(max_length=100)

好makemigrations和migrate(關於遷移可以參考官方文件)進資料庫先。

admin應該知道吧,讓我看看到底長什麼樣,於是,在控制台python manage.py createsuperuser建立個admin。

長這樣,當然不是我們希望的,這種擴充套件,不管用在什麼時候,就算是自己對自己模型的擴充套件,也不是完美的,然而admin系統也提供了一些自定義的樣式,應該說提供了很多。其中我們可以讓兩個模型一起顯示吧。

#

原來的admin.py檔案

from django.contrib import

admin

from blog.models import *

#register your models here.

admin.site.register(userprofile)

這是原來的admin,我修改成這樣

from django.contrib import

admin

from blog.models import *

#register your models here.

class

profileinline(admin.stackedinline):

model =userprofile

verbose_name = '

profile

'class

useradmin(admin.modeladmin):

inlines =(profileinline,)

admin.site.register(user,useradmin)

register第二個引數我們傳了useradmin,意思是用乙個自定義的admin模型來修飾,具體細節官方文件有很多,用inlines 修飾,這裡寫乙個inlne類進去,就像上面的profileinline一樣,我們想要插入的是模型填了我們擴充套件的userprofile.然後定意思了乙個verbose_name,這是它的名字,好了現在admin變成什麼樣了,我來看一下。

對了,出錯了,他說user已經註冊了。所以我在admin.site.register上面加了一句admin.site.unregister(user),因為預設系統是註冊了user物件。

好再看看,成功!

然後看看是否有擴充套件:

第二張方法,django模型系統,自帶繼承,我們可以用繼承來實現。

在models.py裡面,我們寫入如下模型,繼承系統的abstractuser

這種方法和系統user的耦合度非常好

from django.db import

models

from django.contrib.auth.models import

abstractuser

#create your models here.

class

user(abstractuser):

address = models.charfield(max_length=100)

當然,系統預設還是自帶的user,需要在setting檔案裡面把系統預設user替換寫入如下語句

然後在admin裡面註冊自己的user就行了。

看看效果如何:

address出現了,同時我們會發現這個user是在系統原來的user裡的。

Django自定義訪問日誌模組

在django預設沒有訪問日誌模組,但是我們可以通過django的middleware來實現乙個自己的訪問日誌模組。首先在django的工程下建立乙個middleware.py檔案,內容如下 return response其中 process request 應當返回 none 或 httpresp...

學習日誌 自定義控制項

最簡單的自定義控制項,不帶全名空間。直接就在某個view的構造方法裡寫這些個資料,構造方法的上部分其實就是讀取這些個配置資料的大小,然後在最後呼叫某個布局,把剛剛讀取到值給設定進去。package cn.eoe.widget import android.content.context import...

Django 之自定義頭部資訊

當我們使用 django 來搭建一套網頁系統,有時候我們會需要在網頁裡加入一些資訊,比如宣示版權之類的資訊,而如果在每乙個需要渲染的頁面都加上這些資訊,會比較麻煩。而在 django 裡有乙個中介軟體 middleware 可以幫助我們實現這個功能而不需要在每乙個返回的 html 頁面都手動加上。使...