Django 簡介
Django 是一個高質(zhì)量的WEB框架唯欣,它提供一套程序框架矫膨,讓我們更專注與WEB視圖與模型開發(fā)叠穆,提高WEB開發(fā)效率,節(jié)省時間尸疆。
Django的的設(shè)計模式
Django的設(shè)計模式為MVC模式,M即Model惶岭,為網(wǎng)頁的數(shù)據(jù)存取部分寿弱,由Django的數(shù)據(jù)庫層調(diào)用指定的數(shù)據(jù)庫,存取和修改數(shù)據(jù)按灶,Django支持四種數(shù)據(jù)庫引擎症革,PostgreSQL、MySQL鸯旁、SQLite和Oracle噪矛。要調(diào)用數(shù)據(jù)庫需要修改Django創(chuàng)建的工程的settings.py里的內(nèi)容。V即View铺罢,控制著數(shù)據(jù)顯示的內(nèi)容及顯示的方法艇挨,在Django中由視圖函數(shù)和模板處理,視圖函數(shù)是一個python函數(shù)韭赘,接收一個包含WEB網(wǎng)頁請求信息的對象缩滨,并返回一個可以在WEB網(wǎng)頁中顯示的對象,視圖函數(shù)處理和渲染模板。模板是個文檔,通常用來產(chǎn)生HTML格式內(nèi)容脉漏,模板控制著數(shù)據(jù)的顯示形式苞冯,是WEB瀏覽者能直觀感受到的部分。C為Control侧巨,即控制器舅锄,控制著WEB瀏覽者輸入的URL和視圖函數(shù)之間的映射,Django框架自行處理了這部分的大多數(shù)內(nèi)容司忱,需要由開發(fā)者做的只有提供映射表巧娱。開發(fā)者最需要關(guān)心的部分是模型、視圖函數(shù)和模板烘贴。 Django遵循著松散耦合的原則禁添,每一部分之間的關(guān)聯(lián)性不強,修改一部分時不影響到其它的部分桨踪,這是一種設(shè)計原則老翘,開發(fā)者在用Django開發(fā)web時也應(yīng)當遵循這樣的原則,這樣開發(fā)出來的的網(wǎng)頁代碼清晰锻离,可維護性高铺峭,每個開發(fā)者可以只專注與自己開發(fā)的模塊,而不用關(guān)心其它部分的內(nèi)容和結(jié)構(gòu)汽纠,能夠提高開發(fā)效率卫键。
Django安裝
Django由Python編寫,因此安裝Django需要Python環(huán)境虱朵,一般類Unix系統(tǒng)都裝有Python莉炉,Django已經(jīng)支持Python3,Django目前最新的版本為1.9.5碴犬,Django提供了長期支持版本1.8.12絮宁,支持到2018年4月以后,并不再更新和修復(fù)1.8版本以前的版本服协,因此绍昂,在使用Django時最好選用1.8及以后的版本,Django的一個長期支持版本為1.11版偿荷。 從官網(wǎng)可以下載到Django的各種版本窘游,下載后。解壓跳纳,進入目錄運行命令
$ sudo python setup.py install
即可安裝成功忍饰。 在安裝時,要確保沒有安裝其它版本的Django棒旗,如果安裝了喘批,請卸載撩荣。卸載方法: 如果你用pip安裝,可以直接用pip卸載
$ pip uninstall Django
如果是使用源碼安裝饶深,直接在python的庫里找到Django的文件夾餐曹,并刪除,可以由以下方法找到Django的文件夾
$ python -c "import django; print(django.__path__)"
Django的模型敌厘、模板和視圖函數(shù)
一個簡單的web網(wǎng)頁
- 首先創(chuàng)建一個Django項目
$ django-admin.py startproject mysite
在目錄下會創(chuàng)建一個mysite的目錄台猴,目錄的結(jié)構(gòu)
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
manage.py是用來管理Django項目的帶有參數(shù)的命令管理器,你可以輸入
$ python manage.py help
來獲得它的所有用法俱两。
init.py用來告訴Python這是一個Python包饱狂。
settings.py用來設(shè)置Django項目的各項參數(shù)。
urls.py將相應(yīng)的URL映射到相應(yīng)的視圖函數(shù)上宪彩。
wsgi.py是一個將Django項目掛載到WEB服務(wù)器上的工具的腳本休讳。如何安裝和使用可以參考WSGI的官網(wǎng)。
在項目中創(chuàng)建一個名為polls的app
$ python manage.py startapp polls
polls的目錄結(jié)構(gòu)
polls
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
project和app的區(qū)別: app是一個具體的網(wǎng)頁應(yīng)用尿孔,而工程包含許多個app俊柔,構(gòu)成一個站點。 在mysite/settings.py修改活合,讓Django知道app的存在
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls', #添加項
)
- 修改視圖
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello,world. You're at the polls indes.")
在mysite文件夾下的url.py里如下配置
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^polls/',include('polls.urls')), #添加項
]
在配置mysite目錄下的url時雏婶,include
里接受的參數(shù)是一個字符串,而不是一個模塊白指。url的第一個參數(shù)為加入了正則表達式的字符串留晚,正則表達式的具體語法參見RUNOOB.COM。
-
掛載網(wǎng)頁
運行
$ python manage.py runserver
打開網(wǎng)頁輸入*127.0.0.1:8000/polls,便可看到一個簡單的網(wǎng)頁告嘲。
當你在網(wǎng)頁端輸入地址時错维,Django會根據(jù)mysite目錄下的settings.py里的配置找到URLconf,再根據(jù)其中的配置匹配對應(yīng)的視圖函數(shù)状蜗,然后調(diào)用視圖函數(shù)需五,視圖函數(shù)返回一個Httpresponse對象,Django將期轉(zhuǎn)換為網(wǎng)頁并顯示在瀏覽器中
使用模型
在polls/models.py輸入
from django.db import models
# Create your models here.
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('date published')
def __unicode__(self):
return self.question_text
運行
$ python manage.py make migrations
$ python manage.py migrate
在數(shù)據(jù)庫里創(chuàng)建該模型轧坎。 在polls/views.py里修改視圖函數(shù)
from django.http import HttpResponse
from polls.models import Question
# Create your views here.
def index(request):
lastest_question_list =Question.objects.order_by('-pub_date')[:5]
output =','.join([p.question_text for p in lastest_question_list])
return HttpResponse(output)
此時掛載網(wǎng)頁再刷新,網(wǎng)頁一片空白,證明我們已經(jīng)能夠正確調(diào)用模型了泽示,空白是因為數(shù)據(jù)庫里面并沒有寫入數(shù)據(jù)缸血。管理數(shù)據(jù)庫可以使用admin詳情參見Django Documentation
使用模板
在poll目錄下創(chuàng)建文件夾templates 在templates目錄下創(chuàng)建文件index.html
html>
<head>
<title>Hello,everyone</title>
</head>
<body>
<p>It is now {{ current_date }}.</p>
</body>
</html>
修改視圖函數(shù)
m django.shortcuts import render_to_response
import datetime
# Create your views here.
def index(request):
now=datetime.datetime.now()
return render_to_response('index.html',{'current_date':now})
刷新網(wǎng)頁,便在網(wǎng)頁上顯示了當前的日期和時間械筛。由于時區(qū)問題捎泻,顯示的時間與本地時間不符,可以在settings.py中修改時區(qū)埋哟。
用Apache和WSGI部署Django
首先確保Apache和mod_wsgi已經(jīng)安裝好笆豁。 然后在/etc/apache2/site-available新建文件mysite.conf郎汪,寫入
ServerAdmin webmaster@localhost
DocumentRoot /home/feng/wyc/django/mysite
WSGIScriptAlias / /home/feng/wyc/django/mysite/mysite/wsgi.py
WSGIPythonPath /home/feng/wyc/django/mysite
<Directory /home/feng/wyc/django/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
運行命令
$ sudo a2ensite mysite.conf
$ sudo service apache2 reload
一般情況下,Django便已經(jīng)部署好了闯狱,如果遇到無法正常打開網(wǎng)頁的情況煞赢,可以參看apache的err.log,該文件在/var/log/apache2目錄下。
Django小結(jié)
這里只介紹了Django最基本的一些功能哄孤,運用這些簡單的功能便可以開發(fā)出一些簡單的網(wǎng)頁照筑,Django基礎(chǔ)知識不難,想要更詳細的或者更深入一部了解Django瘦陈,請參見官方教程或者Django Book 中文版凝危。 談一下學習Django的心得,在學習的過程中晨逝,要將參考文檔的每個實例都自己敲一遍蛾默,這樣可以發(fā)現(xiàn)在實際操作中遇到的問題,運行實例出現(xiàn)的問題在調(diào)試模式下網(wǎng)頁上都由詳細的錯誤提示捉貌,根據(jù)錯誤提示很容易找到問題的原因支鸡,自己解決問題,能夠加深認識和印象昏翰。還有一個是在遇到問題的時候盡可能的去找官方文檔或者官方說明苍匆,Django對應(yīng)的每一個版本都有官方手冊,基本上你所遇到的問題都可以在上面找到答案棚菊。在網(wǎng)上搜索到的答案一個是準確度不夠浸踩,它可能是運行的版本和你的版本不一樣或者其它方面有差別,另一個是網(wǎng)上的答案五花八門统求,可能你在網(wǎng)上找到答案的時間比你自己解決問題的時間還要長检碗。