Django+Mysql安裝配置詳解(Linux)

Perface

Django是一個開源的Web應用框架,由Python寫成,並於2005年7月在BSD許可證下發布。Django的主要目標是使得開發複雜的、數據庫驅動的網站變得簡單。Django採用MVC設計模式注重組件的重用性和“可插拔性”,敏捷開發和DRY法則(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和數據模型。本文介紹Django在Linux+Mysql環境下安裝、配置的過程,包括安裝、運行、添加應用的所有流程,最終建立一個可以從Mysql讀取文章並顯示的Django應用。文章面向剛接觸Python/Django的初學者,所以安裝過程都以默認環境爲主,用pip可以大大簡化安裝過程。

Install

首先下載Django

wget www.djangoproject.com/download/1.4/tarball/

得到Django-1.4.tar.gz,將其解壓後安裝

tar xzvf Django-1.4.tar.gz
cd Django-1.4
sudo python setup.py install

如果提示缺少setuptools還要下載安裝setuptools(建議提前安上,因爲在安裝MySQL for Python的時候也會用到)。

完成安裝後,Django會拷貝一個django-admin.py到/usr/local/bin下,這個py文件引入了Django的管理模塊。

進階方式:virtualenvpip

Setup

要創建一個Django項目非常簡單,使用startproject命令,輸入項目名稱:

django-admin.py startproject mysite

Django會在當前目錄下自動生成一個名爲mysite的文件夾,裏面有以下文件:

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

以上是Django 1.4以後的目錄結構,如果是1.4之前的版本,manage.py和settings.py等文件是在同一層。manage.py只是用來執行命令,移動或是改名都沒有影響。實際的項目文件夾是和manage.py同一層的mysite文件夾,所以下文提到項目文件夾都指mysite/mysite。

  • __init__.py:python特性,可以是空文件,只是表明這個文件夾是一個可以導入的包。
  • settings.py:配置文件,主要是數據庫信息、加載模塊的信息。
  • manage.py:命令行工具,實現與Django之間的交互。
  • wsgi.py:開發都是用Django自帶的測試服務器,用wsgi啓動Django時才用得上。

創建項目後,進入項目文件夾,啓動Django自帶的web服務器:

python manage.py runserver

Django會自動檢查配置文件中的錯誤,如果全部正常則順利啓動:

Validating modelsxn--
0 errors found

 

Django version 1.4.1, using settings ‘mysite.settings’
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

訪問http://127.0.0.1:8000,如果順利顯示,說明Django已經可以正常使用了。但現在只有本機可以訪問,要讓外網能夠訪問,或是要更換默認的8000端口,可以執行命令:

python manage.py runserver 0.0.0.0:8080

這樣就將端口修改爲8080,且外網也可以通過IP訪問本機上的Django。

現在要讓Django支持Mysql數據庫。編輯配置文件(settings.py)。在第12行找到

1
2
3
4
5
6
7
8
9
10
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', #設置爲mysql數據庫
        'NAME': 'dmyz',  #mysql數據庫名
        'USER': 'root',  #mysql用戶名,留空則默認爲當前linux用戶名
        'PASSWORD': '',   #mysql密碼
        'HOST': '',  #留空默認爲localhost
        'PORT': '',  #留空默認爲3306端口
    }
}

因爲Django要通過Python操作Mysql,所以要先安裝Mysql for Python。在Ubuntu下安裝還會提示EnvironmentError: mysql_config not found。因爲通過apt-get安裝的mysql沒有安裝開發工具包,所以找不到mysql_config文件,使用以下命令安裝:

sudo apt-get install libmysqld-dev

URL

URL配置文件很象一個目錄,Django會通過URL配置文件來查找相應的對象,URL地址的使用正則表達式設置。在mysite目錄下可以找到urls.py文件,它是URL配置的默認起點(也可以通過編輯settings.py中的 ROOT_URLCONF值來修改)。直接編輯urls.py

1
2
3
urlpatterns = patterns('',
(r'^$', 'mysite.hello.index'),
)
  • r’^$’:正則,表示根目錄;
  • mysite.hello.index:指向mysite這個項目下的hello模塊中的index函數。

剩下的就很簡單了,在mysite文件夾下建立一個hello.py文件,在其中寫入一個index函數:

1
2
3
4
#hello.py
from django.http import HttpResponse
def index(request):
    return HttpResponse('hello, world')

刷新網站首頁,看到已經輸出了”hello, world”。

另一種方法: 設置一個hello模塊只是方便理解Django的結構,但如果一個首頁就要使用那麼多代碼,是很不pythonic的,所以在生產環境中我們的首頁通常會這麼來寫:

#url.py
urlpatterns = patterns('',
    url(r'^$', 'django.views.generic.simple.direct_to_template', {'template':'index.html'}),
)

Django會自動在模板目錄中找到並加載index.html,只需要修改url.py一個文件就搞定了。

Application

上一節”hello world”的例子只是說明了URL的用法,可以說完全沒有用到Django。Django作爲一個Web框架,目的是實現MVC的分離,它可以自行處理一些通用的操作,讓開發人員可以專注於核心應用的開發。所以,本文的最後一步將編寫一個名爲article的應用,從mysql數據庫裏讀取出文章作者、標題、內容。
首先建立應用,在項目文件夾中執行:

python manage.py startapp article

運行後在項目文件夾中會增加一個article文件夾,裏面有如下文件

models.py
views.py
__init__.py
  • models.py:模型文件,用一個 Python 類來描述數據表,運用它可以通過簡單的 Python 的代碼來創建、檢索、更新、刪除數據庫中的記錄而無需寫一條又一條的SQL語句。
  • views.py:視圖文件,用來聯繫模型與模版。

然後編寫模型文件(article/models.py),用來實現對數據庫的操作:

1
2
3
4
5
6
7
from django.db import models
 
# Create your models here.
class Article(models.Model):
    title    = models.CharField(max_length=50)
    author   = models.CharField(max_length=50)
    content  = models.CharField(max_length=200)

現在要修改配置文件(settings.py)文件,告訴Django這個應用是項目的一部分,打開配置文件,在尾部找到INSTALLED_APPS元組,將article添加進去:

1
2
3
4
5
6
7
8
9
10
11
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django_openid_auth',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    #……
    'article', #加入app
)

可以現運行manage.py sql article命令進行測試,如果可以看到生成的sql語句,說明模型已經正常設置,可以初始化並安裝:

python manage.py syncdb

Django會自動創建名爲article_article的表。而且,因爲在INSTALLED_APPS中使用了django.contrib.auth,所以syncdb命令會要求提供一個管理員帳號和密碼,用來登錄Django的管理工具。

You just installed Django’s auth system, which means you don’t have any superusers defined.

 

Would you like to create one now? (yes/no): yes

簡單的模型就設置完成了,現在來設置視圖,編輯視圖(article/views.py)文件:

1
2
3
4
5
6
7
# article/views.py
from django.shortcuts import render_to_response
from models import Article
 
def latest_article(request):
    article_list = Article.objects.order_by('-id')
    return render_to_response('article/article.html',{'article_list':article_list})
  • 2行:導入Django的render_to_response()函數,它用來調用模板、填充內容和返回包含內容的頁面。
  • 3行:導入之前編寫模型文件中的Article類。
  • 4~6行:定義一個latest_article函數,利用Article類從數據庫獲得數據,並按照id倒序輸出。然後調用模版文件,將變量傳遞過去。

在上面的代碼中使用的模版文件,它的地址是設置文件中的模版路徑+在views.py中定義的路徑,因此如果報錯TemplateDoesNotExist at 路徑的話,很可能就是忘了設置模板路徑。

編輯設置文件(settings.py),修改TEMPLATE_DIRS,設置一個模版路徑,這裏將模版目錄直接指定在項目文件夾(mysite)中:

TEMPLATE_DIRS = (
"/var/www/mysite"
)

這樣程序運行時,加載的靜態模版就是 /var/www/mysite/article/article.html了。如果使用過其它框架或者模板引擎,下面article.html的內容就很容易看懂了,Django在模版文件中利用相應的TAG控制傳遞過來的變量顯示的位置:

{% for article in article_list %}
Author:{{ article.author }}
Title:{{ article.title }}
Content:{{ article.title }}
{% endfor %}

最後,修改URL配置文件,讓article/指向視圖(views.py)中定義的latest_articl函數:

(r’^article/’, ‘article.views.latest_article’),

這樣所有的配置就完成了,當訪問 http://127.0.0.1:8000/article,Django就會自動讀取數據庫中的內容,並顯示在網頁上了。

Epilogue

本文的一些設置並不適用於實際生產環境,比如URL配置,爲了方便重用,通常都會使用include的方式,而在這裏則是直接指定。所以本文旨在介紹一些入門知識和快速配置的方法,如果希望更規範的學習Django,首推Django的官方文檔,其次是Djangobook,我更新這篇文章的時候Djangobook2.0中文版已經翻譯了大半了,也是學習Django很好的教材。

 

轉自http://dmyz.org/archives/110

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章