django 為我們提供了強大的使用者認證系統,並且提供了基於該系統的user模型,所以,很多時候,我們有必要對自己的user進行業務擴充套件,得到滿足我們自己業務需求的user。藉此,寫下自己的感悟。
user內建屬性如下:
username
使用者名稱,必需字段。30個字元或更少,包含 _, @, +, . 和 - 字元。
first_name
可選。 <=30字元.
last_name
可選。 <=30字元r.
郵箱,可選。 email位址.
password
密碼,必需。django不是以明文儲存密碼的,而是儲存雜湊值。
以及兩個外來鍵:
groups
使用者組。
user_permissions
使用者許可權。
很明顯,這些很多時候是不夠用的。
但是,我學會了兩種擴充套件方法。
第一種,很明顯我們用一對一關係就可以擴充套件自己的屬性了吧,比如,我想要加個address位址屬性。
首先系統的user物件模型在django.contrib.auth.models裡面,然後寫自己的模型,建立一對一關係,我的**如下
#好makemigrations和migrate(關於遷移可以參考官方文件)進資料庫先。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)
admin應該知道吧,讓我看看到底長什麼樣,於是,在控制台python manage.py createsuperuser建立個admin。
長這樣,當然不是我們希望的,這種擴充套件,不管用在什麼時候,就算是自己對自己模型的擴充套件,也不是完美的,然而admin系統也提供了一些自定義的樣式,應該說提供了很多。其中我們可以讓兩個模型一起顯示吧。
#這是原來的admin,我修改成這樣原來的admin.py檔案
from django.contrib import
admin
from blog.models import *
#register your models here.
admin.site.register(userprofile)
from django.contrib importregister第二個引數我們傳了useradmin,意思是用乙個自定義的admin模型來修飾,具體細節官方文件有很多,用inlines 修飾,這裡寫乙個inlne類進去,就像上面的profileinline一樣,我們想要插入的是模型填了我們擴充套件的userprofile.然後定意思了乙個verbose_name,這是它的名字,好了現在admin變成什麼樣了,我來看一下。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)
對了,出錯了,他說user已經註冊了。所以我在admin.site.register上面加了一句admin.site.unregister(user),因為預設系統是註冊了user物件。
好再看看,成功!
然後看看是否有擴充套件:
第二張方法,django模型系統,自帶繼承,我們可以用繼承來實現。
在models.py裡面,我們寫入如下模型,繼承系統的abstractuser
這種方法和系統user的耦合度非常好
from django.db import當然,系統預設還是自帶的user,需要在setting檔案裡面把系統預設user替換寫入如下語句models
from django.contrib.auth.models import
abstractuser
#create your models here.
class
user(abstractuser):
address = models.charfield(max_length=100)
然後在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 頁面都手動加上。使...