iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 30
0
自我挑戰組

Cloud/SDN/SFC...菜鳥的學習筆記系列 第 30

DAY 30 Django 簡易入門教學(七)-Admin管理介面

後台管理系統Admin

admin 是 Django 預設的資料庫內容管理介面。在開始之前,我們必須先將資料同步:

python manage.py createsuper

接著,建立一個管理者的帳號與密碼:

python manage.py createsuperuser

管理者的帳號建立完成後,我們開啟伺服器並來到 http://127.0.0.1:8000/admin/
就會看到以下畫面:

輸入剛剛註冊的帳號密碼後,我們會看到這個介面:

此時任何資料都看不到,因為我們還沒註冊模型阿!
前往 restaurants/admin.py 內新增:

from django.contrib import admin
from restaurants.models import Restaurant, Food #新增

admin.site.register(Restaurant) #新增
admin.site.register(Food) #新增

改完儲存後,當我們回到頁面就能看見資料出現了!

但是當我們點進資料一看,會發現資料顯示的相當簡陋:

讓我們回到 restaurants/admin.py 做修改:

from django.contrib import admin
from restaurants.models import Restaurant, Food

class RestaurantAdmin(admin.ModelAdmin):  #新增
    list_display = ('name', 'phone_number', 'address') # 資料表欲顯示的欄位

class FoodAdmin(admin.ModelAdmin):  #新增
    list_display = ('name', 'price', 'food_restaurant')
    list_filter = ('is_spicy',) #自定義的分類

admin.site.register(Restaurant, RestaurantAdmin) #修改
admin.site.register(Food, FoodAdmin) #修改

回到頁面後,就能看見詳細的資料欄位囉!

此外,我們也能直接在這裡直接新建資料:

讀取資料庫內容並顯示於前端

前往 restaurants/views.py ,新增:

from django.shortcuts import render
from restaurants.models import Restaurant, Food #引入model

def menu(request): #新增
    restaurant_list = Restaurant.objects.all()
    food_list = Food.objects.all()
    return render(request, 'menu.html',locals())

用 all() 將所有物件都取出來,並且傳至 menu.html 。

之後在 templates 中建立 menu.html :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Menu</title>
</head>
<body>
    <h1>restaurants</h1>
    {% for r in restaurant_list %}
    <ul>
        <li>restaurant name : {{ r.name }}</li>
        <li>restaurant phone number : {{ r.phone_number }}</li>
        <li>restaurant address : {{ r.address }}</li>
    </ul>        
    {% endfor %}

    <h1>foods</h1>
    {% for f in food_list %}
    <ul>
        <li>food name : {{ f.name }}</li>
        <li>food price : {{ f.price }}</li>
        <li>food spicy : {{ f.is_spicy }}</li>
        <li>food restaurant : {{ f.food_restaurant }}</li>
    </ul>
    {% endfor %}
   
</body>
</html>

我們能在 template 中使用類似 Python 的 for 迴圈,使用方法如下:

{% for <element> in <list> %}
    ...
{% endfor %}

然後,在 urls.py 內引入剛剛新增的 menu :

from django.contrib import admin
from django.urls import path, re_path
from myapp.views import hello_world,add
from restaurants.views import menu #引入

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', hello_world),
    re_path(r'add/(\d{1,2})/(\d{1,2})', add),
    path('menu/', menu), #新增
]

最後前往 http://127.0.0.1:8000/menu/ ,便能看到以下畫面:

如圖,我們在 views.py 內將從 model 內的資料全部取出來,並成功顯示於畫面上了!

至此,30天的鐵人賽終於告一段落了。
原本其實 Django 的部份應該還能講更多的,總覺得有些抱歉吶。
雖然一路走來相當辛苦,但我相信一切都是值得的!
最後謝謝看到最後的各位,大家都辛苦了!謝謝!


上一篇
DAY 29 Django 簡易入門教學(六)-建立資料庫與模型(Model)
系列文
Cloud/SDN/SFC...菜鳥的學習筆記30

尚未有邦友留言

立即登入留言