Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Django 基本教學 - 從無到有 Django-Beginners-Guide 📝

License

NotificationsYou must be signed in to change notification settings

twtrubiks/django-tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Django 基本教學 - 從無到有 Django-Beginners-Guide, 教你建立自己的第一個Django 程式 📝

Django 非常強大,尤其是Django REST framework ( DRF ),打造 REST API 極為方便快速,

在這裡先帶大家進入Django 的世界 😄

簡介

在開始手把手教大家動手做前,先來認識一下 Django 的設計模式,也就是MTV

Model : 定義一些資料庫的東西 ( ORM ),這層通常是直接和資料有關。

Template : 使用者基本上就是看到這層,也就是最後所呈現的 Template ( html )。

View : 可以將這層看做是中間層,它主要負責 Model 和 Template 之間的業務邏輯。

介紹了 Django 的設計模式,接下來你一定會問,那這有什麼好處 ❓

最直接的好處就是,我們可以很明確且很快速的知道問題在哪裡,例如,今天可能頁面出了問題,

這樣我們就會知道要先去 template 中找問題,而如果是關於資料庫的問題,則可能就要先去 Model

中找,總之,就是不會像一隻無頭蒼蠅一樣不知道要去哪裡找問題☺️

最後簡單將 Django 的 MTV 和 ASP.NET 中的 MVC 比較一下,

MTVMVC
ModelModel
TemplateView
ViewController

其實可以將 MTV 想成算是 MVC 的變形 😏

教學

請先確認電腦有安裝Python

接著我們安裝Django

請在你的命令提示字元 (cmd ) 底下輸入

pip install django==1.11.9

( 會指定版本的原因是因為django 2.0 開始有些東西不太一樣 )

基本上安裝應該沒什麼問題,可以再使用 cmd 確認,如下圖

alt tag

建立 Django Project

建議直接安裝PyCharm ,然後新增一個 Django Project

alt tag

PyCharm 建立 project 還有一個好處,就是一些設定會先幚你設定好,不用全部重新自己動手設設定。

這邊補充一下,因為蠻多人詢問的 😬

上面這張圖的功能 ( 選項 ),只有 PyCharm Professional 才有這個功能,

如果你是安裝一般的 PyCharm Community Edition,則沒有這個選項。

但沒關係,可以使用指令的方式來建立,指令如下

django-admin startproject django_tutorial

執行 Django

直接點選PyCharm 右上角執行程式 ( 一個是Debug模式 ),如下圖

alt tag

正常來說,如果沒有任何錯誤,去瀏覽http://127.0.0.1:8000/ 可以看到下圖,

alt tag

如果你沒有安裝PyCharm 或你喜歡下指令,就必須在命令提示字元 (cmd ) 底下輸入

python manage.py runserver

alt tag

恭喜你~ 成功第一步了 😄

建立 Django App

先建立一個觀念,在Django 中,通常我們會依照功能 去建議一個 App , 例如範例的 musics ,代表他是 管理音樂 的部份。

有了這個觀念之後,我們動手開始做吧~

請在你的命令提示字元 (cmd ) 底下輸入

python manage.py startapp musics

如果順利執行,你會發現你的專案內多出一個 musics 資料夾

alt tag

建立完請記得要將 App 加入設定檔

請在 settings.py 裡面的INSTALLED_APPS 加入 musics (也就是你自己建立的 App 名稱)

alt tag

Views

請先在templates 裡面新增一個hello_django.html,並在裡面輸入下方程式碼 (下圖)

<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body>    {{data}}</body></html>

alt tag

hello_django.html 裡面的第 8 行,只是透過 views.py 傳值過來而已。

關於第 8 行 的用法,更多可以參考Django Templates

接著我們將 views.py 裡面新增下方程式碼 (下圖)

fromdjango.shortcutsimportrender# Create your views here.defhello_view(request):returnrender(request,'hello_django.html', {'data':"Hello Django ",    })

alt tag

views.py 裡面的第 7 行,就是回傳給 hello_django.html 的資料。

注意,最後還必須設定 URLconf。

URLconf

請再將 urls.py 裡面增加一些程式碼,如下圖

fromdjango.conf.urlsimporturlfromdjango.contribimportadminfrommusics.viewsimporthello_viewurlpatterns= [url(r'^admin/',admin.site.urls),url(r'^hello/',hello_view),]

alt tag

簡單講,就是將 views.py import 進來 (第 18 行),

並且設定他的 URL (第 22 行)

最後執行 Django , 然後瀏覽http://127.0.0.1:8000/hello/

你應該會看到如下圖

alt tag

接下來我們來看 Models

Models

定義出資料庫中的結構(schema),並且透過 Django 中的指令去建立資料庫。

Django 預設是使用SQLite ,如果想要修改為其他的資料庫,可以在 settings.py 裡面進行修改。

首先,請先在 models.py 裡面增加下方程式碼 (下圖)

fromdjango.dbimportmodels# Create your models here.classMusic(models.Model):song=models.TextField(default="song")singer=models.TextField(default="AKB48")last_modify_date=models.DateTimeField(auto_now=True)created=models.DateTimeField(auto_now_add=True)classMeta:db_table="music"

default : 代表默認值,也就是如果你沒有指定的話會用默認值。

auto_now_add : 新增時會幚你自動加上建立時間。

auto_now : 資料有更新時會幚你自動加上更新的時間。

更多可以參考Django fields

alt tag

接著在命令提示字元 (cmd ) 底下輸入

python manage.py makemigrations

alt tag

python manage.py migrate

alt tag

makemigrations : 會幚你建立一個檔案,去記錄你更新了哪些東西。

migrate : 根據 makemigrations 建立的檔案,去更新你的 DATABASE 。

執行完上面的指令之後,

你可以使用SQLiteBrowserPyCharm 觀看 DATABASE,

你會發現多出一個music 的 table ( 如下圖 )

alt tag

有沒有注意到我們明明在 models.py 裡面就沒有輸入 id ,可是 database 裡面卻有 id 欄位,

這是因為 Django 預設會幫你帶入,所以可以不用設定。

❗ ❗ 這邊提一個狀況, 就是如果你手動去刪除 migrations 資料夾,

然後你重新執行了makemigrations, 正常產生資料夾,

然後你又執行了migrate, 你會發現他說沒有任何改變.

原因是, 在 db 底下的 django_migrations 這張 table 會去紀錄

SELECT*FROMpublic.django_migrations

類似 0001_initial 這樣的東西, 然後正常應該要變 0002_xxx 之類的,

可是現在還是 0001_initial, 所以系統會認為沒有更新, 所以沒有變化,

這時候你需要手動刪除對應的 app name 的那比 record(從資料庫刪除),

然後重新執行migrate 即可,

或是你可以參考Reversing migrations

直接去 reverse 整個 app, 重新跑一次.

python manage.py migrate musics zero

也可以透過指令去刪除 django_migrations 的 record 紀錄,

python manage.py migrate musics0001

Django ORM

先了解什麼是 CRUD ,他分別代表 Create, Retrieve, Update, Delete,

Django QuerySet API 可以讓你簡單的處理 CRUD 。

直接使用 Python Console 簡單介紹 Django ORM

alt tag

記得必須先 import 你的 models

from musics.models import Music

alt tag

Create

alt tag

Music.objects.create(song='song1', singer='SKE48')

SQLiteBrowserPyCharm 觀看 DATABASE,如下圖,成功多了一比資料alt tag

或者

Music.objects.create()

alt tag

為什麼沒帶參數也可以新增呢?

這是因為 models.py 裡的 song 以及 singer 有設定 default ,所以可以不用帶入參數。

Read

Music.objects.all()

alt tag

Music.objects.get(pk=3)

alt tag

Music.objects.filter(id=1)

alt tag

Update

data=Music.objects.filter(id=1)

data.update(song='song_update')

alt tag

執行完上述程式碼,就會發現資料被更新了 ( 如下圖 )

alt tag

Delete

data=Music.objects.filter(id=4)

data.delete()

alt tag

執行完上述程式碼,就會發現資料被刪除了

Admin Site

Django 內建有後台管理介面。

請先確定 settings.py 裡的 INSTALLED_APPS 裡有 django.contrib.admin

INSTALLED_APPS= ['django.contrib.admin',    ......]

alt tag

設定 URL

alt tag

接著使用命令提示字元 (cmd ) 建立超級使用者

python manage.py createsuperuser

alt tag

註冊 model

我們可以註冊 model,讓後台可以操作 database

請在 admin.py 裡面新增下方程式碼,這段程式碼只是去註冊 model 而已

fromdjango.contribimportadmin# Register your models here.fromdjango.contribimportadminfrommusics.modelsimportMusicadmin.site.register(Music)

alt tag

接著執行 Django ,然後到http://127.0.0.1:8000/admin/

應該會看到下圖,我的 帳號/密碼 設定為 twtrubiks/password123

alt tag

現在,你可以在裡面對 Musics 執行 新增、查詢、修改、刪除 (CRUD),也可以管理使用者。

alt tag

Model Field.choices

因為蠻實用的,所以加入 Model Field.choices ,使用方法可參考models.py 以及hello_django.html

Choice ,可以透過get_FOO_display() 的方法取得名稱,如下

TYPE_CHOICES= (    ('T1','type 1'),    ('T2','type 2'),    ('T3','type 3'),    ('T4','type 4'),)classMusic(models.Model):    ......type=models.CharField(max_length=2,choices=TYPE_CHOICES,default="T1"    )classMeta:db_table="music"defdisplay_type_name(self):returnself.get_type_display()

詳細可參考https://docs.djangoproject.com/en/1.11/ref/models/fields/#choices

Integrating Django with a legacy database

如果說現在我們已經有一個 db,需要建立 model 讓他 map 到 db,這時候不可能手動一個一個打 😱

好在 Django 有提供一個方法讓我們將既有的 db 轉化成 model ,我們只需要使用以下的指令

python manage.py inspectdb> models.py

這時候你可以打開 models.py,你應該會看到 map 到你 db 的 model,類似如下

classMusic(models.Model):id=models.IntegerField(primary_key=True)# AutoField?song=models.TextField()singer=models.TextField()last_modify_date=models.DateTimeField()created=models.DateTimeField()classMeta:managed=Falsedb_table='music'classShare(models.Model):id=models.IntegerField(primary_key=True)# AutoField?name=models.TextField()last_modify_date=models.DateTimeField()created=models.DateTimeField()classMeta:managed=Falsedb_table='share'

更多詳細的說明請參考Auto-generate the models

恭喜你,基本上到這裡,已經是一個非常簡單的Django 程式了,趕快動手下去玩玩吧 😛

How to create customizing error pages

Youtube Tutorial - How to create customizing error pages

這部份教大家如何建立自己的 404 not found page 以及 500 error page,

先到django_tutorial/settings.py 中設定幾個東西,

分別是DEBUGALLOWED_HOSTS ( 這兩個設定是為了顯示 error pages ),

INSTALLED_APPS ( 這個則是為了要讓他找的到 template ),範例如下,

DEBUG=FalseALLOWED_HOSTS= ['*']# Application definitionINSTALLED_APPS= [    .....'django_tutorial',]

補充,預設為DEBUG = True,這時候 django 會使用 standard 404 debug template,所以要記得修改。

建立 templates 資料夾,在底下建立page_404.html 以及page_500.html

然後再建立一個 views 資料夾,底下建立error_views.py,範例如下,

fromdjango.shortcutsimportrenderdefview_404(request):returnrender(request,'django_tutorial/error_pages/page_404.html',status=404)defview_500(request):returnrender(request,'django_tutorial/error_pages/page_500.html',status=500)

整個資料夾的結構會像下圖這樣,

alt tag

這邊補充說明一下,前面在 INSTALLED_APPS 中設定django_tutorial

主要就是為了讓他可以抓到django_tutorial/error_pages/page_404.html

error_views.py 你也可以模仿 django 的 source code,可參考django/views/defaults.py

我是用比較偷懶快速的寫法:smiley:

最後就是在django_tutorial/urls.py 設定 handler404 以及 handler500,

因為我們已經設定好view_404 以及view_500 了,所以只需要去 overridden,

django_tutorial/urls.py 可參考如下,

....handler404="django_tutorial.views.error_views.view_404"handler500="django_tutorial.views.error_views.view_500"....

更多詳細資料可參考customizing-error-views

後記

我是先接觸Flask,後來才接觸到Django

有些人一開始應該也會和我一樣覺得Django 的設定很多,非常麻煩,

但其實了解他之後,會發現他並沒有想像中的那麼複雜,而且功能非常強大。

如果意猶未盡,延伸閱讀 😆

執行環境

  • Python 3.4.3

Reference

Donation

文章都是我自己研究內化後原創,如果有幫助到您,也想鼓勵我的話,歡迎請我喝一杯咖啡 😆

alt tag

贊助者付款

License

MIT license

About

Django 基本教學 - 從無到有 Django-Beginners-Guide 📝

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp