- Django 2.x
- Python 3.x
Django是基于python的高級web框架,高度集成,可以高效快速開發(fā)。
1 目錄結(jié)構(gòu)說明
通過 pip 安裝 django,隨后通過指令創(chuàng)建一個myblog項目:
django-admin startproject myblog
項目結(jié)構(gòu)如下:

manage.py
manage.py是與項目進(jìn)行交互的命令行工具集的入口。
通過python manage.py 可以查看子命令:

通過runserver [port]啟動項目:

wsgi.py
WSGI(python web server gateway interface)
python服務(wù)器網(wǎng)關(guān)接口,python應(yīng)用和web服務(wù)器之間的接口
urls.py
URL配置文件
所有URL都需要進(jìn)行配置
setting.py
項目的總配置文件,數(shù)據(jù)庫、web應(yīng)用、服務(wù)器時間等

上圖中的ALLOWED_HOSTS 為允許的訪問源
APPS中為可執(zhí)行的應(yīng)用,后續(xù)自己創(chuàng)建的應(yīng)用也需要添加其中才能識別。

TEMPLATES就是模板的配置文件

數(shù)據(jù)庫配置,其它數(shù)據(jù)庫的添加需要進(jìn)入網(wǎng)址進(jìn)行查看與編配。
init.py
python的模塊聲明文件,有了它整個文件夾就可以作為一個模塊進(jìn)行引用。
2 創(chuàng)建項目
進(jìn)入manage.py的同級目錄,輸入startapp blog
blog為應(yīng)用名

在配置文件中添加一下
應(yīng)用的目錄結(jié)構(gòu):

migrations
數(shù)據(jù)遷移模塊,內(nèi)容自動生成。
admin.py
應(yīng)用的后臺管理系統(tǒng)。
apps.py
應(yīng)用的配置文件
models.py
數(shù)據(jù)表的模塊文件,用于支持ORM框架
類似于MVC中的Model
tests.py
自動化測試模塊,需要編寫測試腳本。
views.py
執(zhí)行響應(yīng)的代碼所在模塊,
主要的代碼編輯區(qū)。
在views中添加相關(guān)的響應(yīng):
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("hello world")
然后在urls中進(jìn)行相關(guān)的配置:
from django.contrib import admin
from django.urls import path
//import進(jìn)新建應(yīng)用:
import blog.views as blogView
urlpatterns = [
path('admin/', admin.site.urls),
//以新建應(yīng)用為主題,創(chuàng)建path
path('blog/', blogView.index),
]
驗證url的配置情況:

小結(jié):
編輯blog.views:
每個響應(yīng)對應(yīng)一個函數(shù),函數(shù)必須返回一個響應(yīng)。
每個函數(shù)必須存在一個參數(shù),約定為request。
一個響應(yīng)函數(shù)對應(yīng)一個url編輯urls.py
每個url都需要在文件中編寫
url函數(shù)放在urlpatterns列表中
url函數(shù)三個參數(shù):URL,對應(yīng)方法,名稱
補(bǔ)充另外一種配置url的方法。
首先在項目根目錄下的urls中添加include模塊并修改urlpatterns
from django.contrib import admin
from django.urls import path
from django.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')),
]
然后在對應(yīng)的app下新建urls,并添加內(nèi)容:
from django.urls import path
from . import views
urlpatterns = [
path('blog/', views.index),
]
新的url將由兩者拼接而成:

3 Templates
Templates就是HTML文件,使用了Django模板語言,可以使用第三方模板如Jinja2
當(dāng)使用其它第三方模板的時候,修改setting中的templates:

編寫頁面過程:
在之前創(chuàng)建的app目錄下創(chuàng)建templates目錄,并在目錄中新建html文件:

然后在view.py中返回一個render()
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,'index.html')
render()一般包含三個參數(shù),第一個為request,第二個為html頁面,第三個為返回的數(shù)據(jù)。
render()支持的數(shù)據(jù)類型為字典,在html文件中直接使用{{參數(shù)名}}來使用傳遞的數(shù)值
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,'index.html',{'hello':'hello info'})
<h1>{{ hello }}</h1>

、
常見問題:
Django查找Template時,按照installed_apps中的添加順序產(chǎn)找templates,不同app中templates目錄下的同名html文件會沖突。
解決方案:在app的Templates目錄下創(chuàng)建以app名稱為名的目錄,將html文件放入,同時修改views中的路徑。
4 Models
通常,一個model對應(yīng)數(shù)據(jù)庫中的一張數(shù)據(jù)表。
Django中的Models以類的形式表現(xiàn),包含一些基本字段和數(shù)據(jù)的行為。
也被稱為ORM(Object Relation Mapping),對象關(guān)系映射,實現(xiàn)了對象和數(shù)據(jù)庫之間的映射,隱藏了數(shù)據(jù)訪問的細(xì)節(jié)。
- 編寫Model:
在應(yīng)用根目錄下創(chuàng)建一個models.py文件,并引入models模塊。

創(chuàng)建類,集成models.Model類,該類即使一張數(shù)據(jù)表。
在類中創(chuàng)建字段。
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=32,default="title")
content = models.TextField(null=True)
- 生成數(shù)據(jù)表:
命令行進(jìn)入manage.py同級目錄,執(zhí)行:
python manage.py makemigrations [app name]
python manage.py migrate
//如果無參數(shù),則默認(rèn)所有目錄下的app都進(jìn)行該操作。

如上圖所示,未指定APP時,會對所有app都進(jìn)行操作,包括其自帶的app

在app目錄下的migrations里可以看到生成的initial文件:

查看sql語句:
python manage.py sqlmigrate blog 0001
未進(jìn)行額外配置的情況下,默認(rèn)使用sqlite3數(shù)據(jù)庫,在項目根目錄下的db.sqlite3。
在該數(shù)據(jù)庫中創(chuàng)建相關(guān)數(shù)據(jù):

- 在頁面中顯示:
在views.py 中:
from blog.models import Article
def index(request):
article = Article.objects.get(pk=1)
return render(request,'blog\index.html',{'article':article})
在html文件中:
<body>
<h1>{{ article.title }}</h1>
<h1>{{ article.content }}</h1>
</body>
5 Admin
Django自帶的后臺數(shù)據(jù)管理系統(tǒng),可以讓被授權(quán)的用戶在Admin中進(jìn)行數(shù)據(jù)庫管理。
- 配置Admin
創(chuàng)建用戶:
python manage.py createsuperuser
依次輸入用戶名、郵箱、密碼

訪問/admin進(jìn)入后臺頁面。

通過修改settings中的 LANGUAGE_CODE = 'zh_Hans'來使用中文界面。
- 配置應(yīng)用
在應(yīng)用下的admin.py中引入自身的models模塊。
例如,編輯admin.py
// 2.x 似乎可以直接from models import 在3.x中需要使用 . 來表達(dá)當(dāng)前目錄下。
from .models import Article
admin.site.register(Article)

進(jìn)入對應(yīng)app后可以修改內(nèi)容

- 修改數(shù)據(jù)的默認(rèn)顯示名稱

默認(rèn)為object
可以在對應(yīng)的類下(此處為Article)添加:
__str__(self) #3.x
__unicode__(self) #2.x
def __str__(self):
return self.title