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 的部份应该还能讲更多的,总觉得有些抱歉呐。
虽然一路走来相当辛苦,但我相信一切都是值得的!
最後谢谢看到最後的各位,大家都辛苦了!谢谢!


<<:  [Day30]漏洞挖起来心得结论

>>:  第30天:英雄指南-6.从服务器端获取资料(2)

【C++】One, Two and Three Dimensional Array

阵列是一群相同资料型态的变数集合~ 就是将相同资料型态的varaible装在一起~ 学习目标: On...

Day16 - Shioaji X Backtesting - 参数最佳化

上一篇介绍如何在Backtesting写策略,这篇会和大家介绍如何做参数的最佳化。 什麽是参数最佳化...

python30天-DAY29-Matplotlib(4)

最後一天了,我来补充一些 Matplotlib 的小细节。 tick_params() 用於将格子边...

【领域展开 13 式】 有了骨头与皮肤,再搞清楚主要肌群 Menu 层级与操作

网站架构是骨头,布景主题是皮肤,Menu 是大肌肉 昨天【领域展开 12 式】 安装 Soledad...

Day 3【NFT】你那边还来得及,赶快 all in Bitcoin

【前言】 在执行这个 Project 之前呢,团队成员有开一次技术会议来详述 Project 的目...