• Stars
    star
    436
  • Rank 99,877 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created over 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

django-tutorial

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 比較一下,

MTV MVC
Model Model
Template View
View Controller

其實可以將 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>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {{data}}
</body>
</html>

alt tag

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

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

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

from django.shortcuts import render


# Create your views here.
def hello_view(request):
    return render(request, 'hello_django.html', {
        'data': "Hello Django ",
    })

alt tag

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

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

URLconf

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

from django.conf.urls import url
from django.contrib import admin
from musics.views import hello_view

urlpatterns = [
    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 裡面增加下方程式碼 (下圖)

from django.db import models


# Create your models here.
class Music(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)

    class Meta:
        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 預設會幫你帶入,所以可以不用設定。

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 而已

from django.contrib import admin

# Register your models here.
from django.contrib import admin
from musics.models import Music

admin.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'),
)

class Music(models.Model):
    ......
    type = models.CharField(
        max_length=2,
        choices=TYPE_CHOICES,
        default="T1"
    )

    class Meta:
        db_table = "music"

    def display_type_name(self):
        return self.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,類似如下

class Music(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    song = models.TextField()
    singer = models.TextField()
    last_modify_date = models.DateTimeField()
    created = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'music'


class Share(models.Model):
    id = models.IntegerField(primary_key=True)  # AutoField?
    name = models.TextField()
    last_modify_date = models.DateTimeField()
    created = models.DateTimeField()

    class Meta:
        managed = False
        db_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 = False

ALLOWED_HOSTS = ['*']


# Application definition

INSTALLED_APPS = [
    .....
    'django_tutorial',
]

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

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

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

from django.shortcuts import render


def view_404(request):
    return render(request, 'django_tutorial/error_pages/page_404.html', status=404)


def view_500(request):
    return render(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

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

最後就是在 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

More Repositories

1

docker-tutorial

Docker 基本教學 - 從無到有 Docker-Beginners-Guide 教你用 Docker 建立 Django + PostgreSQL 📝
Python
1,315
star
2

Git-Tutorials

Git-Tutorials GIT基本使用教學📝
845
star
3

django-rest-framework-tutorial

Django-REST-framework 基本教學 - 從無到有 DRF-Beginners-Guide 📝
Python
780
star
4

docker-django-nginx-uwsgi-postgres-tutorial

Docker + Django + Nginx + uWSGI + Postgres 基本教學 - 從無到有 ( Docker + Django + Nginx + uWSGI + Postgres Tutorial )
Python
404
star
5

line-bot-tutorial

line-bot-tutorial use python flask
Python
286
star
6

docker-swarm-tutorial

Docker Swarm 基本教學 - 從無到有 Docker-Swarm-Beginners-Guide📝
Python
185
star
7

linux-note

主要是紀錄一些 linux 的指令📝
171
star
8

django-shop-tutorial

Use Django To Create A Simple Shopping Site Tutorial
Python
143
star
9

docker-django-nginx-uwsgi-postgres-load-balance-tutorial

實戰 Docker + Django + Nginx + uWSGI + Postgres - Load Balance -Tutorial 📝
Python
103
star
10

odoo-demo-addons-tutorial

學習 odoo , 本文章會持續更新
Python
102
star
11

docker-elk-tutorial

docker-elk-tutorial + django + logging
Python
99
star
12

Deploying-Flask-To-Heroku

Deploying a Flask App To Heroku Tutorial
CSS
95
star
13

DRF-dataTable-Example-server-side

DataTables Example (server-side) - Python Django REST framework
HTML
92
star
14

python-notes

Python Study Notes 📝
Python
89
star
15

vscode_python_note

教大家如何建立自己的 Visual Studio Code Python 開發環境 📝
Python
86
star
16

odoo-docker-tutorial

利用 docker 快速建立 odoo 環境
Dockerfile
73
star
17

django_social_login_tutorial

Django Social Login Tutorial
Python
65
star
18

PttAutoLoginPost

PTT自動登入發文(Python)
Python
62
star
19

django-celery-tutorial

Django Celery Tutorial
Python
59
star
20

CORS-tutorial

Use Django To Introduce CORS and Same-Origin Policy
Python
53
star
21

facebook-messenger-bot-tutorial

facebook-messenger-bot-tutorial use Python Django
Python
51
star
22

CSRF-tutorial

Use Django To Introduce CSRF and Cookies , Session 📝
Python
49
star
23

django-chat-room

chat-room 💬 use django-channels3
Python
49
star
24

docker-django-celery-tutorial

docker-django-celery-tutorial 基本教學 📝
Python
45
star
25

django-docker-redis-tutorial

django-docker-redis-tutorial 📝
Python
41
star
26

Flask-Login-example

Login register facebook Login - Python Flask
Python
40
star
27

django-transactions-tutorial

django-transactions-tutorial 基本教學 - 了解 transactions 概念 📝
Python
39
star
28

odoo-development-environment-tutorial

建立 odoo 開發環境 ( source code )
36
star
29

auto_crawler_ptt_beauty_image

Auto Crawler Ptt Beauty Image Use Python Schedule
Python
36
star
30

line-bot-imgur-tutorial

透過 imgur api 製作簡單 line bot
Python
36
star
31

django-channels2-tutorial

django-channels2 tutorial 💬
Python
33
star
32

Gulp-Beginners-Guide

Gulp 基本教學 - 從無到有 Gulp-Beginners-Guide
JavaScript
31
star
33

fluent-python-notes

Fluent Python Study Notes 📝
Python
27
star
34

nginx-rtmp-tutorial

Docker Nginx 搭配 RTMP HLS 建立簡易直播 Server
XSLT
26
star
35

docker-letsencrypt-django-nginx-proxy-uwsgi-postgres

Docker + Letsencrypt + Django + Nginx-Proxy + uWSGI 教學
Python
26
star
36

Flask-Babel-example

How Use Flask-Babel on Windows - Python Flask
Python
25
star
37

leetcode-python

LeetCode use Python 📝
Python
24
star
38

chat-room

Chat-Room Use Python Socket.IO
CSS
24
star
39

Deploying_Django_To_Heroku_With_Docker

How Deploying Django To Heroku With Docker ( tutorial )
Python
23
star
40

Deploying_Django_To_Heroku_Tutorial

Deploying a Django App To Heroku Tutorial
Python
22
star
41

django-field-tutorial

Django ORM and Relationship Field OneToOneField , ForeignKey ,ManyToManyField 📝
Python
22
star
42

leaflet-tutorials-interesting

leaflet tutorials interesting use Python Flask
JavaScript
22
star
43

django_rest_framework_swagger_tutorial

django rest framework swagger tutorial
Python
22
star
44

python-pdfkit-example

python-pdfkit HTML TO PDF Example
C
19
star
45

vscode_django_note

如何使用 VScode 執行 Django 📝
Python
19
star
46

mybot

使用Hubot建立屬於自己的機器人 (Build Your Own Robot With Hubot)
CoffeeScript
18
star
47

PttImageSpider

PTT 圖片下載器 (抓取整個看板的圖片,並用文章標題作為資料夾的名稱 ) (使用Scrapy)
Python
18
star
48

youtube-trends-spider

crawler youtube trends use selenium on python
Python
18
star
49

ptt_beauty_infinite_scroll

結合 Django + jQuery 實現無限捲軸 Infinite Scroll 📝
CSS
17
star
50

PttAutoPush

PTT自動推文 推文機器人(Python)
Python
15
star
51

crawler_click_tutorial

click tutorial ( crawler ) use python
Python
15
star
52

google_play_store_spider

抓取 google play store 資料 use Scrapy on python
Python
15
star
53

django-translation-tutorial

How to use Django to implement translations 📝
Python
14
star
54

eynyCrawlerMega

eyny 電影 Mega and Google 連結爬蟲 use python
Python
14
star
55

python-creation-of-virtual-environments

如何使用 venv 建立 virtual environments 📝
14
star
56

docker-remote-interpreter

Using Docker as a Remote Interpreter ( Pycharm )
Python
13
star
57

Flask-Mail-example

Flask-Mail - 使用 Python Flask 完成寄信功能
Python
11
star
58

django_middleware_tutorial

介紹 django 中的 middleware
Python
11
star
59

Google-Play-Store-spider-bs4-excel

Google-Play-Store-spider use Beautiful Soup on Python to EXCEL
Python
10
star
60

flask-dropzone-wavesurfer

python flask-dropzone-wavesurfer 使用Python Flask 搭配 Dropzone.js 和 WaveSurfer.js
CSS
10
star
61

github-actions-tutorial

Python
10
star
62

twtrubiks

9
star
63

line-bot-oop

line-bot refactor use oop (design pattern)
Python
9
star
64

django_recaptcha_tutorial

django recaptcha tutorial
Python
8
star
65

Google-Play-Store-spider-selenium

Google-Play-Store-spider use Selenium +Beautiful Soup on Python
Python
8
star
66

PttStatistics

統計PTT看板推文 or 文章標題 熱門關鍵詞 on python
Python
8
star
67

PayPal_flask

PayPal example use Python Flask
JavaScript
7
star
68

movie-crawler

簡易爬蟲 抓取 開眼電影網 近期上映電影 使用Node.js
JavaScript
7
star
69

Thank-you-for-donate

感謝您對 https://github.com/twtrubiks 以及 youtube 教學頻道 的支持 👍
6
star
70

postgresql-note

主要是紀錄一些 postgresql 的指令
Python
6
star
71

dowload-Image-PTT

PTT圖片下載器 (C# WinForm) For Windows
C#
6
star
72

face-recognition-notes

紀錄 face-recognition 學習
6
star
73

PttCrawlerContent

PTT Crawler Content on python PTT文章爬蟲
Python
5
star
74

docker-selenium-tutorial

docker-selenium-tutorial use pyhton
Python
5
star
75

Flask-Migrate-Tutorial

透過 Flask-Migrate-Tutorial 管理資料庫 (database)
Python
5
star
76

mood-note

5
star
77

k8s-tutorial

Kubernetes tutorial
5
star
78

pillow-examples

some pillow examples use python
Python
4
star
79

python-EXIF-Orientation

Automatically determine whether the photo has been rotated, if it is rotated, the photo is turned right
Python
4
star
80

Croppic-combine-Carousel-Example

Croppic 搭配 Carousel 簡單範例 ,使用 Python Flask
JavaScript
3
star
81

aglio_tutorial

aglio tutorial
HTML
3
star
82

Bower-Beginners-Guide

Bower 基本教學 - 從無到有 Bower-Beginners-Guide
3
star
83

Deploying-Flask-To-OpenShift

Deploying a Flask App To OpenShift Tutorial 📝
3
star
84

docker-pgadmin4-tutorial

利用 docker 快速建立 pgadmin4、Linux install pgadmin4
2
star
85

Stripe_flask

Stripe Use Python Flask
JavaScript
2
star
86

Install_Ubuntu_on_HyperV_tutorial

Windows 透過 Hyper-V 安裝 Ubuntu 18.04
2
star
87

django_N_add_1_queries_problem_tutorial

Django N+1 Queries Problem
Python
1
star
88

Sort-String-To-SQL

Sort String To SQL For Python 📝
Python
1
star
89

AKBGroup_SongList_Flask

AKBGroup_SongList_Flask ( AKB48Group點歌單 )
HTML
1
star
90

Power-Auto-Shutdown

Computer Power-Auto-Shutdown ( 電腦自動排程軟體 ) C# WinForms applications
C#
1
star
91

summernote_Nestable_flask

summernote Combine Nestable Python Flask
JavaScript
1
star
92

AKBGroup_SongList

AKBGroup_SongList ( AKB48Group點歌單 )
HTML
1
star