1毡熏、profile擴(kuò)展
使用外鍵的形式跷坝,對用戶表進(jìn)行擴(kuò)展砖茸。
在models.py
文件中:
# 引入Django自帶的User表
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User) # 關(guān)聯(lián)自帶的User結(jié)構(gòu)
desc = models.TextField(blank=True, null=True)
使用的時候隘擎,首先在view.py
文件中:
from django.contrib.auth.models import User
def index(request):
users = User.objects.all()
for user in users:
print user.userprofile.desc
return HttpResponse(users)
在admin.py
中:
在使用的時候,我們一般會盡量的考慮直接進(jìn)行修改凉夯,所以货葬,在admin.py
中,要進(jìn)行以下步驟:
from django.contrib.auth.models import User
from .models import UserProfile
class ProfileInline(admin.StackInline):
model = UserProfile
verbose_name = 'profile'
class UserAdmin(admin.ModelAdmin):
inlines = (ProfileInline,)
admin.site.unregister(User) # User是已經(jīng)注冊過的劲够,所以首先需要解綁注冊
admin.site.register(User, UserAdmin)
2震桶、繼承AbstractUser
繼承AbstractUser的好處就是可以和Django的模型更好的結(jié)合。
和上面的方式一樣征绎,首先需要倒入基類蹲姐,然后繼承完成我們新的類。
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
desc = models.TextField()
接著人柿,在settings.py
中柴墩,需要做出一點更改:
# 添加如下代碼
AUTH_USER_MODEL = 'AppName.USER'
然后,在admin.py
中注冊我們自己定義的User:
from .models import User
admin.site.register(User)
上面兩種方式的實現(xiàn)凫岖,目的都是對Django自帶的用戶信息進(jìn)行擴(kuò)展江咳,在處理上還是有一點小小的不同,我們熟知哥放,在Django項目建立之后歼指,后臺會自動的增加一個認(rèn)證結(jié)構(gòu),第一種方式的實現(xiàn)婶芭,用戶表任然在自帶的認(rèn)證結(jié)構(gòu)中間,而繼承AbstractUser之后着饥,用戶信息是在我們自己建立的App中犀农,并且第二種方式可以更容易的達(dá)到目的。
那么擴(kuò)展用戶信息有什么作用呢宰掉?
Django框架中可能有些部分不適合國人的信息注冊習(xí)慣呵哨,比如電話號碼赁濒、社交網(wǎng)絡(luò)等常用聯(lián)系方式不太符合國人的使用習(xí)慣,因此擴(kuò)展用戶信息之后孟害,我們可以添加手機(jī)號碼拒炎、QQ號碼等聯(lián)系方式。相對于自己建立用戶表的這種方式挨务,擴(kuò)展可以更好的與Django自身的模型結(jié)合击你。