《Python web開發》筆記四:Django開發基礎

Why Django

在必定的時間內,有限的技術狀況下,建設一個高質量的網站,Django幾乎成了惟一的方案。
Django把全部可能性都考慮到了,從這種程度上看複雜就意味着全面,畢竟時間更重要!html

Django特色

  • 強大的數據庫功能python

  • 自帶的強大的後臺功能mysql

  • 優雅的網址程序員

  • 模板系統web

  • 緩存系統sql

  • 國際化數據庫

Django應用案例

國外:Disqus、Pinterest、Instagram、NASA Science等
國內:豆瓣、知乎、餓了麼等django

Django開發準備

一、安裝pip
二、安裝Django
三、安裝pyflakes
四、Atom安裝插件:atom-django、autocomplete-python、platformio-ide-terminal(也能夠用pycharm)瀏覽器

MTV模型

網頁訪問流程:

request ---->Django Web------>response

流程內部結構:

request——————>urls——————>views<——————models
                              |
                              |
                              ↓
                          templates

MTV

models-----數據: 做爲數據庫的代理人,經過 model 操做數據庫。
Templates-----模板: 把數據填充進網頁中進行渲染。
Views-----視圖:把渲染好的網頁返回給使用者,讓咱們能夠在瀏覽器中看到網頁。
Urls-----連接:找到每一個 url 對應的 view。緩存

爲何要MTV分開?

複雜的功能,分開能夠單獨的職責進行處理,快速找到錯誤,方便處理和維護。

最簡單的Django網站:

網站建立的流程:P ---> A ---> D ---> M ---> V ---> T ---> U
P: 建立project django-admin startproject firstsite
A: 建立APP python manage.py startapp firstapp
D: 建立數據庫 python manage.py migrate
M: 建立數據庫的表 models建立相關模型類class
V: 建立視圖 views建立相關視圖def
T: 建立模板 templates/static 用模板語言進行修改
U: 建立對應的url正則關係 設置訪問url

具體步驟分析

建立站點:

django-admin startproject firstsite

生成如下文件:

firstsite
    ├── manage.py
    └── firstsite
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py

文件解釋:
manage.py:django中命令的運行文件,通常格式爲:python manage.py 命令名稱。
__init__.py:是python包的目錄結構必須的。
setting.py:Django配置全局變量和屬性的文件,好比 DEBUG 的開關,靜態文件的位置等。
urls.py:網址入口,關聯到對應的views.py中的一個函數(或者generic類),訪問網址就對應一個函數。
wsgi.py:部署服務器時用到的wsgi.py文件。

settings內部結構:

  • DEBUG = True時,頁面發生錯誤會直接拋給前臺,便於程序員進行修改。在真實環境中須要關閉,DEBUG=False。

  • 當 DEBUG=False 時,ALLOW_HOSTS這個爲必填項,若是不想輸入,能夠用 ALLOW_HOSTS = ['*'] 來容許全部的訪問。

  • INSTALLED_APPS,用戶新建了APP須要在該欄目下進行註冊。

  • TEMPLATES:若新建了templates文件夾,須要修改DIRS地址:

    'DIRS': [os.path.join(BASE_DIR, 'templates').replace('\\', '/')],
  • DATABASES默認的是:sqlite3, 修改成mysql以下:

    DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'NAME': 'testdb',
                'USER':'younger',
                'PASSWORD':'123',
                'HOST':'',
                'PORT':'',
            }
        }
  • LANGUAGE_CODE = 'en-us', 中文修改成'zh-Hans'。

建立APP

python manage.py startapp firstapp
(項目站點的模塊,一個project下面能夠有多個app)

生成如下文件:
migrations: 生成數據庫的py腳本文件夾。
__init__: 是python包的目錄結構必須的。
admin.py:後臺,能夠用不多量的代碼就擁有一個強大的後臺。
models.py: 與數據庫操做相關,存入或讀取數據時用到這個,固然用不到數據庫的時候 你能夠不使用。
views.py: 處理用戶發出的請求,從urls.py中對應過來, 經過渲染templates中的網頁能夠將顯示內容,好比登錄後的用戶名,用戶請求的數據,輸出到網頁。
tests.py: 網站的測試代碼。

添加app到INSTALL_APPS

新建的app若是不加到INSTALL_APPS 中的話, django 就不能自動找到app中的模板文件(app-name/templates/下的文件)和靜態文件(app-name/static/中的文件) 。

建立數據庫

python mange.py makemigrations

makemigrations命令生成的文件會存到migrations/目錄下,生成複雜的建立數據庫的語句。

python mange.py migrate

以前的makemigrations操做只是生成migration文件,尚未對數據庫進行操做,接下來執行migrate命令,完成數據的合併和修改。

makemigrations vs migrate
makemigrations的意思是將model編譯成mysql能夠理解的sql語句,存放在那個migrations文件夾裏面。
migrate是將這個最新生成的py文件執行,讓數據庫可以按照sql語句進行表的修改。因爲sql語句中有不少的標點符號是和python衝突的,常常須要轉義數據庫才能執行。所以直接使用model模塊能夠省去你不少書寫sql語句的煩惱。

啓動服務器

python mange.py runserver 臨時測試的服務器

案例分析

views中定義視圖

t = Template(html_string)      # 用來把 html 字符變成模板,相似於打孔。
c = Context({'person':person}) # 建立一個上下文 context,django 規定 context 必須是字典的形式,相似於造補丁。
web_page = t.render(c)           # 對模板進行渲染,把上下文渲染到模板裏面,相似於打補丁。
return HTTPResponse(web_page)  # web_page表示的網頁字符串轉化具體可見的網頁response。

拓展閱讀:
一、《圖解HTTP》筆記
二、Django 基礎教程(自強學堂)

備註
該筆記源自網易微專業《Python web開發》1.一、1.2節
本文由EverFighting創做,採用 知識共享署名 3.0 中國大陸許可協議進行許可。

相關文章
相關標籤/搜索