02-Django基本流程

一、Django簡介

Django是用Python開發(fā)的一個免費開源的Web框架,可以用于快速搭建高性能,優(yōu)雅的網(wǎng)站!

初次發(fā)布于2005年7月,并于2008年發(fā)布了第一個正式版本1.0。

官方文檔: https://www.djangoproject.com/

二、Django特點

  • 強(qiáng)大的數(shù)據(jù)庫功能: 擁有強(qiáng)大的數(shù)據(jù)庫操作接口(QuerySet API),如需要也能執(zhí)行原生SQL。
  • 自帶強(qiáng)大的后臺: 幾行簡單的代碼就讓你的網(wǎng)站擁有一個強(qiáng)大的后臺,輕松管理內(nèi)容!
  • 優(yōu)雅的網(wǎng)址: 用正則匹配網(wǎng)址,傳遞到對應(yīng)函數(shù),隨意定義,如你所想!
  • 模板系統(tǒng): 強(qiáng)大,易擴(kuò)展的模板系統(tǒng),設(shè)計簡易,代碼,樣式分開設(shè)計,更容易管理。
    (注:前后端分離時,也可以用Django開發(fā)API,完全不用模板系統(tǒng)。)
  • 緩存系統(tǒng),與Memcached, Redis等緩存系統(tǒng)聯(lián)用,更出色的表現(xiàn),更快的加載速度。
  • 國際化,完全支持多語言應(yīng)用,允許你定義翻譯的字符,輕松翻譯成不同國家的語言。

三、MVC模式

MVC是一種軟件設(shè)計典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務(wù)邏輯聚集到一個部件中,在改進(jìn)和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務(wù)邏輯。MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中。

- Model(模型)
    應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯部分;
    通常模型對象負(fù)責(zé)在數(shù)據(jù)庫中存取數(shù)據(jù);
- View(視圖)
    應(yīng)用程序中處理數(shù)據(jù)顯示部分;
    通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的;
- Controller(控制器)
    應(yīng)用程序中處理用戶交互部分;
    通常控制器負(fù)責(zé)從視圖中讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù);

優(yōu)點: 降低各個功能模塊之間的耦合性,方便變更,更容易重構(gòu)代碼,最大程度上實現(xiàn)代碼的重用。

四、MTV模式

本質(zhì)上MTV與MVC模式?jīng)]有什么區(qū)別,也是各組件之間為了保持松耦合關(guān)系,只是定義上有些不同。

- Model(模型)
    負(fù)責(zé)業(yè)務(wù)對象與數(shù)據(jù)庫對象(ORM)
- Template(模板)
    負(fù)責(zé)如何把頁面展示給用戶
- View(視圖)
    負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)?shù)臅r候調(diào)用Model和Template

Django還有一個url分發(fā)器,它的作用是將一個個URL的頁面請求分發(fā)給不同的view處理,view再調(diào)用相應(yīng)的Model和Template。

五、Django環(huán)境搭建

  • Django版本選擇

    Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3.
    Django 1.6.x 支持 Python 2.6.X, 2.7.X, 3.2.X 和 3.3.X
    Django 1.7.x 支持 Python 2.7, 3.2, 3.3, 和 3.4 (注意:Python 2.6 不支持了)
    Django 1.8.x 支持 Python 2.7, 3.2, 3.3, 3.4 和 3.5.  (長期支持版本 LTS)
    Django 1.9.x 支持 Python 2.7, 3.4 和 3.5. 不支持 3.3 了
    Django 1.10.x 支持 Python 2.7, 3.4 和 3.5
    Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6(長期支持版本 LTS)
    Django 2.0.x 支持 Python 3.4, 3.5 和 3.6 (注意,不再支持 Python 2)
    
    
  • pip安裝(如果有直接跳過)

    - 下載get-pip.py文件(Linux, Mac OSX, Windows都可用) 
      https://bootstrap.pypa.io/get-pip.py
    - 安裝(在終端中運行)
      $ python get-pip.py
    備注:
      當(dāng)Python2.x和Python3.x共存的時候要區(qū)分是哪個版本需要安裝;
    
    

    pip更新(Linux或MacOS): pip install -U pip

    pip更新(Windows): python -m pip install -U pip

  • 安裝Django

    - 安裝
      $ pip install Django==1.11.4
    - 驗證是否成功()
      進(jìn)入到python環(huán)境(終端中輸入python)
      >>> import django
      >>> django.get_version()
      '1.11.4'
    
    

    操作時,請切換到python3的虛擬環(huán)境中!

六、Django項目創(chuàng)建

- 新建Django項目:
    $ django-admin startproject projectName

- 目錄層級說明:
    manage.py 一個命令行工具,可以使我們多種方式對Django項目進(jìn)行交互
    projectName/__init__.py 一個空文件,告訴python這個目錄被看做一個python包(有這個能稱之為包)
    projectName/settings.py 項目的配置文件
    projectName/urls.py  項目URL聲明(路由器)
    projectName/wsgi.py    項目與WSGI兼容的Web服務(wù)器入口(網(wǎng)關(guān)接口,通常用在現(xiàn)線上環(huán)境部署)

- 項目的運行:
    $ python manage.py runserver 
    $ python manage.py runserver 0.0.0.0:8000
    $ python manage.py runserver 0:8000  # 0.0.0.0簡寫方式

- settings.py項目配置文件
    BASE_DIR 項目根目錄
    SECRET_KEY 秘鑰
    DEBUG 調(diào)試的開啟
    ALLOWED_HOSTS 允許訪問的主機(jī)
    INSTALLED_APPS 安裝的應(yīng)用
    MIDDLEWARE 中間件
    ROOT_URLCONF 站點url配置
    TEMPLATES 模板
    WSGI_APPLICATION wsig應(yīng)用
    DATABASES 數(shù)據(jù)庫
    AUTH_PASSWORD_VALIDATORS 密碼驗證規(guī)則
    LANGUAGE_CODE 語言(中文: zh-hans)
    TIME_ZONE 時區(qū) (中國時區(qū): Asia/Shanghai)

- 站點管理的漢化版(在settings.py中替換以下內(nèi)容即可)
    LANGUAGE_CODE = 'en-us' 替換 LANGUAGE_CODE = 'zh-Hans'
    TIME_ZONE = 'UTC' 替換 TIME_ZONE = 'Asia/Shanghai'

備注: Linux或Mac下,直接在終端中操作;而在Windows中在cmd中操作(開始 -> 搜索cmd)

Linux中輸入tree可以看到具體的目錄結(jié)構(gòu)(樹狀)

七、創(chuàng)建應(yīng)用

要先進(jìn)入項目目錄下,cd projectName 然后執(zhí)行下面的命令:

$ python3 manage.py startapp appName

項目文件說明: 
  admin.py 站點配置
  models.py 模型
  views.py 視圖

其實一個項目中可以創(chuàng)建多個應(yīng)用;
sqlite是輕量級小型數(shù)據(jù)庫(嵌入級數(shù)據(jù)庫),在Django中默認(rèn)使用的就是sqlite【一般在手機(jī)APP中都會使用到這個sqlite】

八、激活應(yīng)用

settings.py文件中,將appName應(yīng)用加入到INSTALL_APPS選項中.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'appName'   # 添加自己的應(yīng)用
]

請求流程: 用戶請求 -> urls -> views -> templates -> 用戶響應(yīng) 【從后往前寫】

九、設(shè)計表結(jié)構(gòu)

  • 班級表

    表名: grades
    字段: 序號id、班級名gname、開班時間gdate、男生數(shù)量gboynum、女生數(shù)量ggirlnum、是否刪除isdel
    
    
  • 學(xué)生表

    表名: students
    字段: 序號id、學(xué)生名sname、性別ssex、年齡sage、班級sclass、  簡介sbrief、是否刪除isdel
    
    

十、配置數(shù)據(jù)庫

  • __init__中添加兩行代碼 (確保安裝mysql,另外需要pip3 install pymysql)

    import pymysql
    pymysql.install_as_MySQLdb()
    
    

    python3安裝的是PxMysql (和python2是不一樣的)

  • settings.py中修改默認(rèn)數(shù)據(jù)庫

    DATABASES = {
      'default': {
          # 修改為mysql
          'ENGINE': 'django.db.backends.mysql',
          # 必須先創(chuàng)建有對應(yīng)的數(shù)據(jù)庫
          'NAME': 'zyz',
          # 用戶名
          'USER': 'root',
          # 密碼
          'PASSWORD': '123456’,
          # 主機(jī)
          'HOST': '127.0.0.1',
          # 端口號
          'POST': '3306’
      }
    }
    
    

    Django默認(rèn)使用SQLine數(shù)據(jù)庫

十一、定義模型

  • 班級表

    # 班級表Grades
    class Grades(models.Model):
      # 對應(yīng)字段,以及字段類型
      # id          = models.IntegerField()
      gname       = models.CharField(max_length=30)
      gdate       = models.DateField()
      gboynum     = models.IntegerField()
      ggirlnum    = models.IntegerField()
      isdel       = models.BooleanField(default=False)
    
    

    需要引入from django.db import models。模型類要繼承models.Model類。

  • 學(xué)生表

    # 學(xué)生表Students
    class Students(models.Model):
      # 在沒有添加主鍵時,它會在生成時自動添加主鍵
      # id          = models.IntegerField()
      sname       = models.CharField(max_length=30)
      ssex        = models.CharField(max_length=10)
      sage        = models.IntegerField()
      sbrief      = models.CharField(max_length=50)
      isdel       = models.BooleanField(default=False)
    
      # 關(guān)聯(lián)外鍵(學(xué)生都會有一個班級)
      sclass = models.ForeignKey('Grades')
    
    

十二、數(shù)據(jù)庫中生成對應(yīng)表單

  • 生成遷移文件

    $ python manage.py makemigrations
    
    備注: 在migrations目錄中生成一個遷移文件,此時數(shù)據(jù)庫中還沒生成表單
    
    
  • 執(zhí)行遷移

    $ python manage.py migrate
    
    備注: 相當(dāng)于執(zhí)行了MySQL語句創(chuàng)建了表單(appname_students、appname_grades)
    
    

    就算是沒有創(chuàng)建模型,也是要執(zhí)行遷移,因為除了自己系統(tǒng)需要在數(shù)據(jù)庫中生成對應(yīng)的表單!

十三、數(shù)據(jù)庫表單操作

- 查詢所有數(shù)據(jù)
    Grades.objects.all()
    備注: 在模型類中,其實會有一個隱藏屬性objects
    備注: 添加數(shù)據(jù)本質(zhì),就是創(chuàng)建一個模型類的對象實例

- 添加數(shù)據(jù)
    # 創(chuàng)建對象
    stu1 = Students()
    # 對象屬性
    stu1.sname = '哈哈'
    # 保存
    stu.save()

- 查看數(shù)據(jù)(查看對象)
    Grades.objects.get(pk=1)
    Grades.objects.get(pk=2)

- 修改數(shù)據(jù)(修改對象屬性)
    g = Grades.objects.get(pk=1)
    g.gboynum = 70  
    g.save()

- 刪除數(shù)據(jù)
    g.delete()  # 物理刪除,即數(shù)據(jù)庫中表單數(shù)據(jù)被刪除

- 關(guān)聯(lián)對象
    # 獲取到班級對象 (pk即是id那個字段)
    grade = Grades.objects.get(pk=2)
    # 添加學(xué)生對象
    stu2 = Students()
    stu2.sname = '李花花'
    stu2.ssex = '女'
    stu2.sage = 18
    stu2.sbrief = '你負(fù)責(zé)賺錢養(yǎng)家,我負(fù)責(zé)貌美如花.'
    stu2.sclass = grade
    stu2.save()

- 獲取關(guān)聯(lián)對象
    語法: 
        對象.關(guān)聯(lián)的類名小寫_set.all()
    例如: 
         grade.students_set.all()
    備注: 在班級中,想要獲取某個班級中關(guān)聯(lián)的學(xué)生信息

    需求: python04班級存在,   如何快速關(guān)聯(lián)上快速創(chuàng)建對應(yīng)學(xué)生?            # 可以直接通過以下方法創(chuàng)建,并且不需要調(diào)用保存 (但班級是python04而不是python05)
    # 其實就是直接grade和創(chuàng)建的學(xué)生對象關(guān)聯(lián)起來了
    stu3 = grade.students_set.create(sname='王八',ssex='男',sage=20,sbrief='哈哈,咬我啊..')

十四、視圖

- 方式一
def hello(request):
    return HttpResponse('hello')

- 方式二
def hello(request):
    return render(request, 'hello.html')

- 模板渲染(帶參數(shù))
def student(request):
    students = Student.objects.all()
    return render(request, 'students.html', context={'student_data': students})

十五、啟動服務(wù)器

語法:
    python3 manage.py runserver ip:port
例如:
    python3 manage.py runserver
備注:
    IP可以不寫,代表即是本機(jī)IP
    端口號默認(rèn)是8000
    啟動成功后,在瀏覽器可以看到”It worked!”
說明:
    這是一個純python寫的輕量級web服務(wù)器,僅僅在開發(fā)測試階段中使用

作者:西門奄
鏈接:http://www.lxweimin.com/u/77035eb804c3
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內(nèi)容

  • 一、Django簡介 Django是用Python開發(fā)的一個免費開源的Web框架,可以用于快速搭建高性能,優(yōu)雅的網(wǎng)...
    EndEvent閱讀 2,469評論 1 2
  • 模塊間聯(lián)系越多,其耦合性越強(qiáng),同時表明其獨立性越差( 降低耦合性,可以提高其獨立性)。軟件設(shè)計中通常用耦合度和內(nèi)聚...
    riverstation閱讀 2,085評論 0 8
  • 一、Django簡介 Django是用Python開發(fā)的一個免費開源的Web框架,可以用于快速搭建高性能,優(yōu)雅的網(wǎng)...
    仙靈兒閱讀 3,477評論 0 5
  • Web框架之Django: (1)簡介: Django是一個由Python寫成開源的重量級Web應(yīng)用框架,采用MT...
    老肖閱讀 3,073評論 0 18
  • 切換到創(chuàng)建項目的目錄 cd C:\Users\admin\Desktop\DjangoProject創(chuàng)建名為pr...
    在努力中閱讀 3,304評論 2 3