環(huán)境搭建
Django的具體內(nèi)容可以到官網(wǎng)查看
Django官網(wǎng)
Django安裝
詳情可參考官網(wǎng)安裝介紹
具體需要安裝哪個版本的Django,可以參考這里,這里列出了Django與python的兼容版本,請自行選擇。
1. pip包管理器安裝(最方便 推薦)
pip install Django==2.1.7
2. 源碼安裝
git clone https://github.com/django/django.git
下載源碼,然后進入根目錄執(zhí)行python setup.py install即可
是否安裝成功可是用以下命令檢測:
python -m django --version

或者進入python命令行中,導(dǎo)入Django,如果不報錯即安裝成功
import django
創(chuàng)建項目及應(yīng)用
創(chuàng)建項目
1. 打開終端進入想要創(chuàng)建項目的目錄
2. 執(zhí)行命令 django-admin startproject blog
3. 如果沒有報錯,即項目創(chuàng)建成功
項目目錄結(jié)構(gòu)
項目創(chuàng)建成功后我們可以發(fā)現(xiàn),在原先的路徑下多出了一個blog的文件夾,并且其內(nèi)部還自動生成了若干文件和文件夾。
項目目錄結(jié)構(gòu)
manage.py // 項目管理器 執(zhí)行python manage.py可以查看所有命令
blog // 項目容器,包含項目的一些基本配置文件信息
__init__.py // python中聲明模塊的文件,默認為空
settings.py // 項目的總配置文件,包含了數(shù)據(jù)庫、web應(yīng)用、時間等配置信息
urls.py // url配置文件,Django項目中所有頁面地址都需要在此配置
wsgi.py // python服務(wù)器網(wǎng)管接口 全稱:Python Web Server Gateway Interface
啟動項目服務(wù)器
python manage.py runserver 默認使用8000端口號
或
python manage.py runserver 9999 自定義端口號
在執(zhí)行以上啟動服務(wù)的命令時,python會先對項目進行檢查,之后再啟動。

這個時候我們就可以在瀏覽器中通過 127.0.0.1:8000來訪問了
創(chuàng)建應(yīng)用
1. 打開終端進入項目中manage.py同級目錄
2. 執(zhí)行命令: python manage.py startapp blog
3. 添加應(yīng)用名到settings.py配置文件中的INSTALLED_APPS中,如下圖所示

應(yīng)用目錄結(jié)構(gòu)
migrations // 數(shù)據(jù)移植模塊,內(nèi)容自動生成
__init__.py
__init__.py
admin.py // 該應(yīng)用的后臺管理系統(tǒng)配置
apps.py // 當(dāng)前應(yīng)用的一些配置
models.py // 數(shù)據(jù)模型模塊,使用ORM框架
tests.py // 自動化測試模塊,在這里編寫測試腳本
views.py // 執(zhí)行響應(yīng)的代碼模塊,項目中大部分代碼均在這里編寫(代碼邏輯處理的主要地點)
創(chuàng)建第一個響應(yīng)頁面
1. 編輯blog.views.py文件
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello World!')
2. 配置urls.py
import blog.views as hv
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', hv.index)
]
此時再次訪問 127.0.0.1:8000/index/時即可看到頁面上顯示出Hello World!。

注意:
編輯blog.views.py
- 中每個響應(yīng)對應(yīng)一個函數(shù),函數(shù)必須返回一個響應(yīng)
- 中函數(shù)必須存在一個參數(shù),一般約定為request
- 中每個響應(yīng)(函數(shù))對應(yīng)一個URL
編輯urls.py
- 每個URL都以url的形式寫出來
- url函數(shù)放在urlpatterns列表中
- url函數(shù)包含三個參數(shù):URL(正則)、對應(yīng)方法(響應(yīng)函數(shù)名稱)、名稱
URL的另一種配置方式
1. 在根urls.py中引入include
2. 在APP目錄下創(chuàng)建urls.py文件,格式與根urls.py相同
3. 根urls.py中url函數(shù)的第二個參數(shù)改為include( 'blog.urls')
即:


這樣做的主要目的是為了防止在大型項目中,根urls.py文件配置雜亂、臃腫而不易維護,將其每個頁面的url配置分散到每個應(yīng)用中的urls.py中。
Templates介紹
Templates說白了就是HTML文件,主要使用了Django模板語言(Django Template Language , DTL)
開發(fā)第一個Template
1. 在APP的根目錄下創(chuàng)建名叫Templates的目錄
2. 在該目錄下再創(chuàng)建一個以該APP應(yīng)用名為名的目錄(假設(shè)在blogAPP下創(chuàng)建了Templates目錄,再在Templates目錄下創(chuàng)建blog目錄),這里是為了防止多個APP引用各自Templates目錄下同名模板引發(fā)的引用錯亂。
3. 在views.py中返回render()

render()函數(shù)支持一個dict類型的參數(shù)
該字典是后臺傳遞到模板文件的參數(shù),鍵為參數(shù)名
在模板中使用{{ 參數(shù)名 }}來直接使用
如下:



Models介紹
通常,一個model對應(yīng)數(shù)據(jù)庫的一張數(shù)據(jù)表
Django中的Model以類的形式表現(xiàn)
其中包含了一些基本字段以及數(shù)據(jù)的一些行為
編寫Model
1. 在應(yīng)用根目錄下創(chuàng)建models.py,并引入models模塊
2. 創(chuàng)建類,集成models.Model,該類即是一張數(shù)據(jù)表
3. 在類中創(chuàng)建字段

字段創(chuàng)建
字段即類里面的屬性(變量)
字段創(chuàng)建參考這里
attr = models.CharField(max_length = 64)
attr1 = models.TextField()
生成數(shù)據(jù)表
1. 終端進入manage.py同級目錄
2. 執(zhí)行命令 python manage.py makemigrations APP名(可選) (如果跟上APP名字,則表示只該APP下生成數(shù)據(jù)遷移;否則該項目下所有的應(yīng)用都生成數(shù)據(jù)遷移)

3. 再執(zhí)行命令 python manage.py migrate

根據(jù)終端輸出可以知道,執(zhí)行命令不僅僅只生成了blog.0001_initial...,還生成了很多的auth開頭的和admin開頭的東東,關(guān)于這些具體是什么,我們可以從項目根目錄中的settings.py中的INSTALLED_APPS中可以略知一二,在INSTALLED_APPS中除了我們自己添加的blog之外,剩余的都是系統(tǒng)自帶的。
執(zhí)行完畢后,Django會自動在app/migrations目錄下生成移植文件,如下:
# -*- coding: utf-8 -*-
# Generated by Django 1.11.18 on 2019-02-20 14:12
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Article',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(default='Title', max_length=32)),
('content', models.TextField(null=True)),
],
),
]
從以上自動生成的移植文件中可知,Django除了為我們生成了我們定義的title和content外,還添加了id作為Article表的主鍵且自增。
執(zhí)行python manage.py sqlmigrate 應(yīng)用名 文件id可以查看SQL語句,如下:

當(dāng)然也可以借助三方軟件來查看根目錄下的db.sqlite3數(shù)據(jù)庫文件并通過可視化三方工具向數(shù)據(jù)庫blog_article數(shù)據(jù)表中添加若干條數(shù)據(jù)。
獲取數(shù)據(jù)庫中的數(shù)據(jù)并展示到頁面
1. blog.views.py中 import models
2. 獲取數(shù)據(jù) article = models.Article.objects.get(pk = 1)
3. 函數(shù)返回數(shù)據(jù) return render(request, 'blog/index.html', {'article' : article})
4. 前端模板中直接使用{{ article.title }}、{{ article.content }}即可獲取到數(shù)據(jù)
自帶Admin后臺介紹
Admin是Django自帶的一個功能強大的自動化數(shù)據(jù)管理界面
被授權(quán)的用戶可以直接在Admin中管理數(shù)據(jù)庫
Django提供了很多針對Admin的定制功能
創(chuàng)建用戶
終端在manage.py同級目錄執(zhí)行命令 python manage.py createsuperuser

localhost:8000/admin即為后臺管理入口
可以更改settings.py中的LANGUAGE_CODE = 'zh_Hans'即為顯示漢語。

定制顯示自己創(chuàng)建的blogAPP的Article數(shù)據(jù)表
1. 在應(yīng)用下admin.py中引入自身的models模塊
2. 編輯admin.py admin.site.register(models.Article)


修改數(shù)據(jù)默認顯示名稱
1. 在Article類下添加一個方法
2. 根據(jù)Python版本選擇__str__(self)或者__unicode__(self)
3. return self.title
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
class Article(models.Model):
title = models.CharField(max_length = 32, default = 'Title')
content = models.TextField(null = True)
def __unicode__(self):
return self.title
