我是使用 Django 2.1.1 這個版本
如何安裝Django?
總之使用 pip 就可以輕鬆安裝使用了!
首先我們需要透過指令來建立Django的專案。
常用指令:
建立專案:django-admin startproject [ProjectName]
建立應用(一專案可含多個應用):
python manage.py startapp [AppName]
執行上兩指令後會產生這樣的目錄:
projectname/
- manage.py:是Django用於管理專案的命令列工具
- projectname/
- __init__.py
- setting.py:Django專案設定檔
- urls.py:專案的URL路由對映
- wsgi.py:定義WSGI的介面資訊,用於與其他Web伺服器整合(一般無須改動)
- appname/
- __init__.py
- admin.py:註冊models
- apps.py:app資訊定義檔案。類別AppConfig用於定義應用明等Meta資料
- models.py:定義models
- tests.py:測試
- views.py:定義URL回應函數
- migrations/
- __init__.py
範例:
跟上一篇 GAE 做相同的事。
先看一下最後的專案結構:
projectname/
- manage.py
- projectname/
- __init__.py
- setting.py
- urls.py
- wsgi.py
- appname/
- __init__.py
- admin.py
- apps.py
- models.py
- tests.py
- views.py
- urls.py <-- new
- templates/ <-- new
- home.html
- migrations/
- __init__.py
- ...
設定專案:
要記得在 projectname/setting.py 中告訴 Django 需要安裝應用app中的模型。
在 setting.py 的 INSTALLED_APPS 新增 appname.apps.AppConfig (就是我們自己的app)
projectname/setting.py:
INSTALLED_APPS = [
'appname.apps.AppConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
URL對映:
一般在 projectname/url.py 我們會設定url與應用app的對映,然後在應用app的資料夾中新增新的url.py,其中寫入各項服務的url對映。
在這裡我們設計這個url: localhost/appname 連結到views.py中名叫welcome的function
projectname/url.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('appname/', include('appname.urls')), ## include() takes a full Python import path to another URLconf module
path('admin/', admin.site.urls),
]
projectname/appname/url.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.welcome),
]
Model層處理:
在我們的應用中要儲存用戶名與其所傳出的訊息及傳出時間,因此我們需要建立Model類別,這相當於建立資料庫的表格。
首先要在projectname/appname/admin.py中進行Model的註冊,我們註冊了Greeting這個表格
projectname/appname/admin.py:
from django.contrib import admin
from .models import Greeting
admin.site.register(Greeting)
projectname/appname/models.py:這裡描述Model內容
from django.db import models
class Greeting(models.Model):
name = models.CharField(max_length=50)
message = models.CharField(max_length=200)
timestamp = models.DateField(auto_now=True)
Views層處理:
welcome()裡我們接收打進 localhost/appname 這個位置的請求(request)
render() 預設存取 projectname/appname/templates/ 裡的檔案,不須寫完整的檔案路徑
projectname/appname/views.py:from django.shortcuts import render
from appname.models import Greeting
def welcome(request):
results = Greeting.objects.all()
context = {'greetings': results}
if request.method == 'POST':
user = request.POST['user_name']
message = request.POST['message']
Greeting(name=user, message=message).save()
return render(request, "home.html", context)
projectname/appname/templates/home.html:
<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>My Guest Book</h1>
<form action="." method="post">
{% csrf_token %}
<p>Name: <input type="text" name="user_name"></p>
<p>Message: <textarea name="message"></textarea></p>
<input type="submit" value="send"></p>
</form>
{% for greeting in greetings %}
{{ greeting.timestamp}} - {{greeting.name}} said {{greeting.message}}
<br>
{% endfor %}
</body>
</html>
測試:
首先要產生資料移植檔案 (makemigrations):
python manage.py makemigrations [appname]
從輸出可以看到模型Greeting的建立,另外輸出的 0001_initial.py 是資料庫產生的中間檔案,在makemigrations的過程中,Django會比較models.py中的模型與已有資料庫之間的差異,如果沒有差異則不會做任何工作。
要記得如果有對model.py做任何修改,都需再做makemigrations,才能將修改的內容同步到資料庫中。
接著移植到資料庫:
python manage.py migrate
在模型的修改過程中可以隨時呼叫 makemigrations 產生中間移植檔案,而當需要使移植檔案生效、修改真實的資料庫 schema 時,則需要透過manage.py的migrate指令使修改同步資料庫中。
基本上這兩步,有修改DB時都要做。
然後我們就可以啟動網站了:
python manage.py runserver localhost:8000
接著只要在瀏覽器輸入 localhost:8000/app 就可以看到我們的網頁了
另外,Django有一個特色是它會幫我們建立一個簡單的後台管理介面,只要在瀏覽器輸入 localhost:8000/admin 就可以進入,但在第一次登入前要先設定帳號和密碼。
設定管理員的帳密:
python manage.py createsuperuser
(密碼想說只是測試,所以我亂打1234,結果不能設定這麼簡單,居然要八碼以上...) |
(是真的滿陽春的XD) |
透過這個範例,我們大概知道如何使用Django的路由對映和建立Model,如此應該就可以做出一個還像樣的網頁。
參考資料:
1. 一次搞定:所有Python Web框架開發百科全書 (佳魁出版)
沒有留言:
張貼留言