iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
Software Development

台南不需要米其林系列 第 6

Day06 新增第一個美味店家 建立資料庫

  • 分享至 

  • xImage
  •  

摘要

今日目標:手動建立店家的資料庫,包含店名與地址。
我們會從Django的Model及資料庫編輯開始談起,並進入後台管理、查看資料庫。


概念說明

Untitled


創建Model

還記得在昨天的文章中我們有提到,Django框架中Model負責處理資料庫相關的事情。因此當我們要建立資料庫的時候,就在model.py的檔案裡面進行設定。

打開model.py,輸入以下程式碼:

from django.db import models

class Place(models.Model):
    name = models.CharField(max_length=20, help_text='Enter the name of store')
    address = models.CharField(max_length=50, null=True)
    pub_date = models.DateTimeField('date published')
    def __str__(self):
        return self.name

這邊詳細解釋一下有使用到的Model的功能,因為目前是以每間店做為資料儲存的單位,因此我們建立一個名為Place的Model,用來儲存每間店的資料。

這裡面我希望儲存每間店的名稱跟地址,並且使用字串來儲存,所以我呼叫models.CharField這個Function,而後面使用到的參數包括:

  • max_length:表示此一欄位所可以接受的最大字符長度。
  • help_text:讓User可以知道這個欄位要填入什麼資料的說明文字。
  • null:Bool值。預設為 False。如果設定成 True,就代表 資料庫中該欄位可以寫入 NULL。但如果欄位型態為 CharField則會變成空字串)。

其他的其他的參數選項可以參考這裡

設定好之後我們把剛剛新增的Model寫進資料庫中,在Terminal連續輸入以下兩個指令:

python manage.py makemigrations
python manage.py migrate

看到ok就代表建立成功囉~

最後,因為我們要透過admin的網站方便管理我們的資料庫,所以,所以也要讓網站上面新增物件。

打開admin.py,import剛剛新增的model之後建立它的欄位。

from .models import Place

admin.site.register(Place)

創建管理員(admin)

為了管理後端的資料庫,我們要創建一個擁有管理員權限的User,在Terminal中輸入以下指令

python manage.py createsuperuser

系統會詢問你想要使用的username,輸入admin後按下Enter

接著輸入自己的email、設定密碼後就完成superuser的新增了。

登入使用網站

為了進入到管理網站,我們為了進入到管理網站,我們奧先連上admin的URL,在Terminal使用runserver指令

python manage.py runserver

進入網站後,在原有的網址後方加上/admin

就會進入到登入的頁面

輸入剛剛設定的帳號密碼就可以進入到後台了。

手動新增資料

點擊+Add,手動新增我們的第一筆資料,覺丸拉麵藏身於鬧區的巷弄之中,主打濃郁鮮美的豚骨湯頭,除了原味之外也看辣味豚骨、魚介豚骨的選項,從麵條、湯頭、風味油到配料都不馬乎,加之老闆有個性的經營態度,每每到了用餐時段總是一位難求。

輸入好之後點擊Save,就可以看到剛剛新增的資料了。

透過View將資料連結到Template

下一步我們把剛剛新建的Model匯入view.py

from .models import Place

接著用Model.Object.all()的function將資料傳送到food/index.html

def index(request):
    # return HttpResponse("Hello food!")
    return render(request, 'food/index.html', {'store_list': Place.objects.all(), })

這邊後面使用字典物件,等一下在html的地方只要呼叫store_list就可以取得該Model中的物件

最後我們來到food/index.html,找到顯示餐廳頁面的地方

原本我們是用編號來暫代餐廳的名稱,現在我們將紅框處改成以下程式碼,從剛剛新建的Model中撈取資料

{% for store in store_list %}
              <div class="col-4 grid-item p-0 m-1">
                <div class="grid-item-img">
                  <img src="https://picsum.photos/id/684/280/200" alt="">
                </div>
                <label for="">{{ store.name }}</label>
              </div>

儲存之後就可以run server,進入/food看到今天的成果囉~


本日成果

心得

模板語言是個神奇的東西,資料庫也是,版本控制也是TT
筆者在初次嘗試建立資料庫的時候就曾經陰差陽錯下刪除了整個資料庫,有機會的話來講講備份資料庫的故事吧。

參考資料

Writing your first Django app, part 2 | Django documentation | Django

Model field reference | Django documentation | Django


台南不需要米其林

  1. 專案程式碼
  2. 專案文件與鐵人賽文章
  3. 參賽團隊 台南巷弄美食獵人


上一篇
Day05 美食地圖首頁
下一篇
Day07 美食的倉庫 建立檔案儲存機制
系列文
台南不需要米其林30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言