Py学习  »  Django

建立你的第一個Django應用 (上)

harry123_123 • 3 年前 • 427 次点击  

這篇博客會教大家做一個關於手搖飲的應用程序,我會分兩部分介紹(上下篇)

  • 利用Django自帶的後台管理類 admin呈現一個能增刪改的功能
  • 透過Django 獨有的 對象關係映射 (ORM ,Object-Relational Mapping)對數據庫進行操作

創建項目

python manage.py startproject mysite

創建應用

python manage.py startapp drink_app

創建好會長這樣

在这里插入图片描述
接下來準備來去創建數據庫模型。用 模型類 生成 數據庫表

drink_app / models.py

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

# Create your models here.

# 店名
class Beverage_shop(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    shop_name = models.CharField('店名', max_length=50, default='', blank=True)
    telephone = models.CharField('店家電話', max_length=10, default='', blank=True)
    address = models.TextField('地址', default='', blank=True)
    date_time = models.DateField('時間', default=timezone.now)

    class Meta:
        db_table = 'tb_Beverage_shop'

    def __str__(self):
        return self.shop_name


# 飲料(品項)
class Drink(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    drink_name = models.CharField('品名', max_length=10, blank=True)
    price = models.DecimalField('台幣TWD$', max_digits=2, decimal_places=0)
    description = models.TextField('描述', blank=True)
    date_time = models.DateField('時間', default=timezone.now)
    image = models.ImageField('圖片', upload_to='images', blank=True)
    beverage_shop = models.ForeignKey(Beverage_shop, on_delete=models.CASCADE, related_name='drink')

    class Meta:
        db_table = 'tb_drink'

    def __str__(self):
        return self.drink_name


# 評價
class Evaluation(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    beverage_shop =


    
 models.ForeignKey(Beverage_shop, on_delete=models.CASCADE)
    star = ((1, 'one'), (2, 'two'), (3, 'three'), (4, 'four'), (5, 'five'))
    star_choices = models.PositiveSmallIntegerField('評價', default=3, blank=True, choices=star)
    date_time = models.DateField('時間', default=timezone.now)
    recommend = models.TextField('建議', default='', blank=True)
	
	class Meta:
		db_table = 'tb_evaluation'
	
    def __str__(self):
        return self.recommend
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

大家可以去看 Django官方文檔 這裡我只會提到比較該注意的 !

ForeignKey(to, on_delete, **options)

  1. 在上面代碼可以看到ForeignKey這是一個 單對多 關係,裡頭有兩個位置參數,一個是 被關聯的類 ,一個是 on_delete 的選項,當 on_delete = models.CASCADE表示 級聯刪除 。現在假如你刪除了 A 數據庫表的一筆資料,那跟他關聯的資料表就會把他關聯的那筆資料一併刪除 (很淺顯易懂吧><
  2. blank = True 表示此字段欄位,為必填, default = ’ ’ 表示為預設, related_name = 'drink ’ 有利於我們等等要實現的反向查詢喔 ! ! !
  3. Meta類,其實有很多選項可以選 ! 這裡用到 db_table = ’ ', 可以改自己喜歡的資料表名稱,不然預設是app應用名 + 類名 = drink_app_evaluation
  4. __ str __( ) 魔法方法
    Django Console 交戶查詢時,方面我們閱讀的對象方法

By the Way 之後會做表格會有更詳細內容,那這裡剛好使用到就講解比較重要的


輸入 python manage.py makemigrations 系統會發現models.py有更動 !

在这里插入图片描述
再接著輸入 python manage.py migrate 同步更新數據庫,現在已經創建了3張數據庫表 !
你可以打開這三張表看看,會發現都是空的,因為根本就還沒有存入資料xD
Django 預設連接的資料庫是 sqlite3 ,當然可以使用其他資料庫,匹如 PostgreSQL(關聯式資料庫)、MySQL(關聯式資料庫)、MongoDB(非關聯式資料庫)

在这里插入图片描述
現在我們要去這裡註冊數據庫模型,會慢慢體驗到 Django的強大

drink__app / admin.py

Step1 註冊資料庫模型:

裡面的類都繼承了admin.ModelAdmin, 提供了後台呈現的樣子
list_display是指 後台要顯示的欄位,當然它也是有更多選項,不只單單一個,如果還是不懂的等等看到就知道了 !

from django.contrib import admin
from .models import *


# Register your models here.

class Beverage_shop_Admin(admin.ModelAdmin):
    list_display = ('author', 'shop_name', 'telephone', 'address', 'date_time')


class DrinkAdmin(admin.ModelAdmin):
    list_display = ('author', 'drink_name', 'price', 'description', 'beverage_shop', 'date_time')


class EvaluationAdmin(admin.ModelAdmin):
    list_display = ('author', 'beverage_shop', 'star_choices', 'recommend', 'date_time')


admin.site.register(Beverage_shop, Beverage_shop_Admin)
admin.site.register(Drink, DrinkAdmin)
admin.site.register(Evaluation, EvaluationAdmin)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

Step2 建立超級使用者:

這聽起來很像在搞笑,但就是這樣ㄎ ㄎ

python manage.py createsuperuser

在这里插入图片描述
創建好就可以啟動伺服器了,就大功告成了 python manage.py runserver

記得在本地網址後面加上 /admin/
登入你剛剛創建的帳號密碼

在这里插入图片描述
登入之後會看到你剛剛創建的資料表出現在上面了,你們可以一一新增

在这里插入图片描述
Beverage_shops 新增飲料店資訊
在这里插入图片描述


知道list_display的用途了吧 ! ! !
在这里插入图片描述
Drinks 新增飲料品項,以及所購買店家
在这里插入图片描述
Evaluation 新增對這家飲料店的評價以及建議
在这里插入图片描述
的話很簡單大家摸索一下就會了

接下來是刪掉剛剛新增的飲料店貓咪工坊
左下有 刪除

在这里插入图片描述
一旦點選刪除

在这里插入图片描述
一旦按下 Yes I am Sure ! 3張表資料就都不見了?!
這是為什麼 ?
這就留給你,自己為自己解答囉 @@

在这里插入图片描述

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74085
 
427 次点击