iT邦幫忙

DAY 3
0

Angularjs + Django Rest Framework 快速打造一個簡單的Web記帳APP系列 第 3

Takingblue Day#3- 撰寫Django Model

  • 分享至 

  • xImage
  •  

開始開發我們的backend_api吧。

首先先將backend_api這個app加到INSTALL_APPS中,為的是要讓project知道我們安裝了這個自己開發的app。

INSTALLED_APPS = (

...

'rest_framework',

'backend_api',

)

接下來就可以開始編輯backend_api/models.py來定義我們會用到的models。

我們先定義Bill這個class當做我們記帳App的"帳目"model。

from django.db import models

class Bill(models.Model):

TWD = 'TWD'

USD = 'USD'

JPY = 'JPY'

CURRENCY_CHOICES = ( #for currency choices

(TWD, TWD),

(USD, USD),

(JPY, JPY),

)

FOOD = 'FOO'

DRINK = 'DRI'

TRANSPORTATION = 'TRA'

OTHERS = 'OTH'

CATEGORY_CHOICES = ( #for category choices

(FOOD, 'Food'),

(DRINK, 'Drink'),

(TRANSPORTATION, 'Transportation'),

(OTHERS, 'others'),

)

created_date = models.DateTimeField()

title = models.CharField(max_length=255)

amount = models.DecimalField(max_digits=12, decimal_places=2)

currency = models.CharField(max_length=3, choices=CURRENCY_CHOICES, default=TWD)

category = models.CharField(max_length=3, choices=CATEGORY_CHOICES, default=FOOD)

class Meta:

ordering = ('created_date', )

在Bill這個class繼承了models.Model這個class。它就擁有了Django model中了基本屬性了,Bill內又定義了五個properties。

Django 獨有的ORM系統會將model轉成Database的table,基本的使用上是可以不需要下SQL語法,直接與model instance互動就可以對DB做操作。

當然在某些特殊的query下還是直接使用SQL語法比較適當,Django也支援SQL語法的直接操作。

Bill內的五個properties分別是

  • created_date,用來記錄bill的創造時的時間,它使用的是DateTimeField。
  • title, 這筆帳的名字。
  • currency和category,貨幣的單位和類別,在這裡我們將貨幣和類別設為choice,並且定義在Bill class內部方便閱讀和取用。(Bill
    .CATEGORY_CHOICES就可以拿到choices的tuple)
  • amount,這筆帳的額度。

model定義好後我們就可以建立Database了,Django 1.7的app中有個新功能叫migration。

Django 1.7之前的migration一般來說會使用South這類的套件幫忙,因為這樣Django1.7就新增了migration這樣的功能

它可以幫你記錄DB的schema歷史紀錄,由於我們的backend_api是新建立的app,所以migrations資料夾內是空的。

要建立DB首先先在command line下:

python manage.py syncdb

它會問你是否要建立Django的auth user,就建立一個叫admin的user吧。

在stdout中你會看到一些log,log中的Operation to perform你會看到他將rest_framework當做umigrated app,Django 內建的app則有migrations。

那是因為rest_framework這個app似乎並未去更新Django 1.7的migration功能。不過沒關係,還是可以使用的XD

我們的backend_api並沒有出現在這些app中,請在command line在下:

python manage.py makemigrations backend_api

這樣就會將backend_api的model寫進DB裡了,在到backend_api/migrations裡看一下,發現多出一個0001_initial.py,裡面的內容就是Django根據models.py寫進DB的schema。

我們可以進sqlite的console看一下tables是否真的建立起來。

sqlite3 db.sqlite

進入console後可以打.help看可以使用的指令,我們用.tables來看目前DB中的tables。

應該可以看到backend_api出現了。

再來我們可以利用django console來和model互動。

python manage.py shell

這樣會進入Django的console中,你可以想像他為python的互動環境,只是多了Django的基礎功能。

我們下一系列指令:

一開始Bill.objects.all()代表將DB中的Bills資料都query出來,當然目前一個都沒有所以是一個空的list。

接下來我們新增一個Bill的instance,並call它的save method,這樣它就被存到DB中了,id是1。

在call一次Bill.objects.all()後就看到有我們剛存進去的那個Bill。

在到sqlite裡確認一次:

sqlite3 db.sqlite
select * from backend_api_bill;

這樣就會看到剛存進去的Bil出現在第一個column中了。

目前都還是在Django的範圍,接下來會開始使用rest_framework的功能囉!

Day3 Ending


上一篇
Takingblue Day#2- Django RestFramework環境安裝
系列文
Angularjs + Django Rest Framework 快速打造一個簡單的Web記帳APP3
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言