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 的部份應該還能講更多的,總覺得有些抱歉吶。
雖然一路走來相當辛苦,但我相信一切都是值得的!
最後謝謝看到最後的各位,大家都辛苦了!謝謝!