顯示具有 Django基礎 標籤的文章。 顯示所有文章
顯示具有 Django基礎 標籤的文章。 顯示所有文章

2020年11月27日 星期五

Django 自訂 USER Model 範例教學

在 Django 中預設有 User Model ,

內建有幾個基本的欄位

  • username
  • first_name
  • last_name
  • email
  • password
  • groups
  • user_permissions
  • is_staff
  • is_active
  • is_superuser
  • last_login
  • date_joined

若是這些欄位都不符合使用需求時,

就需要自訂 USER Model,

這就是今天要來教大家的

Django 自訂 USER Model 範例教學

 自訂 USER Model 有幾個方法,

最簡單的是直接以一對一關係新增相關的欄位,



直接以程式碼做為範例:


from django.contrib.auth.models import User
from django.db import models


class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='帳號名稱')
real_name = models.CharField(max_length=30, blank=True, verbose_name='真實姓名')

首先必須先到 models.py 

從 django.contrib.auth.models 匯入 User 

透過一對一關係

models.OneToOneField

將 USER Model 的欄位做個延伸,

底下再加入要新增的相關欄位即可,

在此範例中將真實姓名加入 UserProfile 中,

其他也可以加上手機號碼,公司電話等等相關欄位。

特別要注意的是,

在與 USER 欄位關聯時,必須加上

on_delete=models.CASCADE

在刪除 USER Model 的時候相對應的 UserProfile 才會跟著刪除,

避免不必要的錯誤發生。

使用上也很簡單,

def my_profile(request):
target_item = UserProfile.objects.get(user=request.user)

先取得目前登入使用者的 profile,

就能直接使用新增的欄位 real_name

target_item.real_name

若網站已經上線一段時間,

原有的 USER Model 已經有許多資料,

為了新增額外的欄位以此種方式最為適合與簡單,

既不影響原有的資料,

又能根據需求新增相關欄位。

另一個方法則是使用 AbstractBaseUser / AbstractUser 直接自訂 USER Model 欄位,

相對地使用上較為複雜,

就不再此入門的範疇探討,

有機會再介紹此種方法。

2019年6月28日 星期五

透過Django後台管理資料庫


從Django資料庫基礎,

Django專案template模板範例教學,

到Django的視圖與URL,

針對Django的MTV架構,

到這邊應該都有大致的認識,

Django就只有這些內容?


答案是否定的,

寫程式就像無底深淵,

栽進去就沒完沒了的

不囉唆,

馬上進行今天的主題:

透過Django後台管理資料庫




大多數的網站都有後台管理,

身為基於Python的web框架-Django,

當然也內建有後台管理app - django admin,

在Django專案的settings.py可以找到:

INSTALLED_APPS = [
    'django.contrib.admin',
]

在urls.py也能找到:

urlpatterns = [
    path('admin/', admin.site.urls),
]

這些通常在建立專案的時候就自動加入專案的,

為了能夠進入Django Admin 必須建立一個superuser帳號,

透過命令列打上:

python manage.py createsuperuser

輸入使用者名稱,EMAIL,密碼等資訊就可新增一個superuser帳號,

根據urls.py的設定,

打上

https://網站url/admin

再以剛才建立的帳號密碼登入就能進入後台,

在專案資料夾找到admin.py,

透過後台管理資料庫最簡單的方法,

就是直接將其註冊到後台,

from school_id_login.models import Xschools

admin.site.register(Xschools)


登錄畫面如下,


如果沒有自訂名稱的話,

Django自動在Class名稱後面加上s

就能直接在後台對資料庫進行新增刪除修改,

不需要透過繁瑣的SQL語言

當然,

透過後台管理資料庫的方法不只一種,

先從最簡單的介紹起,

這裡是不及格研究室,

we are here , we are coding