標籤:des style blog color 使用 資料 問題 div
後台採用Django開發,可以體會到開發的便利之處,對於一個項目來說,首先最重要的是資料庫的設計,那麼在Django下資料庫設計主要是如下步驟:
1,需求分析,這點子不用多說,而我也深刻體會到了沒有原型的時候就開始開發的困難之處,每次需求更改就會帶來背景資料和對應介面的一次變更.費時費精力
2.有了需求,那麼開始資料庫的設計,在Django中,並不需要直接去操作資料庫,而且使用繼承modesl.Model的類,在類中定義自己的模型,然後使用Python manage.py syncdb就可看到資料庫中的表了(先得在settings中設定好和資料庫的串連)
3.主要說的是使用者的定義問題,我採用的是比較老的方式,使用profile擴充,並沒有採用繼承抽象使用者類的方式.
使用者的模型Django已經幫我們整合了,我們要做的就是在內建的使用者系統上擴充自己的資料,擴充方法如下:
class UserProfile(models.Model): # 帳號附加資訊 user = models.OneToOneField(User,unique=True) #下面定義一些自己的附加資訊,比如性別等等
採用的是一對一的方式,而這種方式使用起來也很簡單,比如使用User.objects.get得到了一個user,然後直接存取user.userprofile.屬性就可以,userprofile是自己定義的擴充表的名稱(Django1.5之前的老版本使用的是user的get_profile函數,但是官方推薦在新版本中時候類的方式訪問)
使用者擴充到這裡完成,而我們也可以使用Django帶的auth系統,無需去關注cookies等細節了
資料庫使用過程中注意的問題:
1,建立使用者必須使用User.objects.create_user官方提供的函數,不然auth的認證系統無法通過,而且通過這種方法建立的使用者,密碼是通過加密的,所以推薦有官方的api的時候就是用官方api,不然可能會造成架構的一些模組無法使用
2.資料庫編碼務必採用utf-8
3.官方內建的資料庫抽象層由於其具有通用性,所以直接使用起來還是比較麻煩的,比如更改使用者資料就必須同時去操作user和Userprofile兩個表,所以這個時候我們可以在官方的抽象層上再寫一層介面(調用的是Django內建的資料庫抽象層),使得資料庫介面更加切合商務邏輯(這樣做相當於隔離了Django的資料庫抽象層,使用起來更加方便).
4.前後台通訊是做前台和背景互動的大問題,雖然Django內建了表單系統,但是對於前台來說,使用起來還是不習慣的,所以我放棄了Django的表單系統,前後台通訊採用純粹的變數,由於部分資料過多,而且通過模版渲染時的上下文傳遞也顯得比較麻煩,所以就在自己寫的介面上(3提到的屏蔽Django抽象層的介面)需要的函數,然後使用ajax的方式返回xml資訊交給前台,也可以統一採用xml通訊,但是由於Django的{{}}標籤方式對於有些變數的傳遞還是非常方便的,所以就混合起來用了.