記一次在 Linux 上建立 Django 應用的過程

來源:互聯網
上載者:User

標籤:

0 環境與目標 0.1 環境
  • 伺服器端
    • 作業系統: Ubuntu 14.04.2 LTS
    • 運行時: Python 3.4.0
  • 客戶機端
    • 瀏覽器: Firefox 37.0.1
    • 資料庫用戶端: Navicat Premium 11.1.10
0.2 目標

在伺服器端開始一個 Django 工程,採用 PostgreSQL 資料庫。

0.3 要點
  • Django 安裝
  • PostgreSQL 安裝
  • Django 初始化資料庫
  • 啟動Django 服務
1 實施 1.1 Django 準備 1.1.1 安裝 Django

這裡安裝最新的 Django

$sudo pip3 install django

如果是在原有基礎上升級安裝 Django,則輸入一下命令

$sudo pip3 install django --upgrade

pip 會將舊版本的 Django 卸載後安裝最新版。
注意,這裡使用的命令是 sudo pip3 而不是簡單的使用 pip,是因為沒有在 virtualenv 環境下安裝,所有操作都是在作業系統實環境下完成的,而 Ubuntu 預設的 Python 環境是 Python 2,很多系統基礎軟體都是基於這個版本的 Python 開發,強行改為預設使用 Python 3 會遇到各種蛋疼的情況(不要問我為什麼知道)。之所以採用這種方式,是因為這裡只是我個人用來練習的項目,沒有生產意義,偷懶沒有嚴格做隔離控制。在生產上做開發部署,經常會有多版本並行使用的需求,需要根據實際情況配置開發和生產環境,這裡不做詳細討論。

1.1.2 建立 Django 工程

這裡先建立一個名為 teamtea 的項目

$cd workspace/django$django-admin starproject teamtea

沒錯,現在可以直接使用 Django 的工程管理命令 django-admin 了。
這裡將工程建立好之後先放在一邊,稍後進行配置。

1.2 PostgreSQL 準備 1.2.1 安裝 PostgreSQL

Ubuntu 官方源的 PostgreSQL 總是會慢一個小版本,版本控表示不愉快,於是按照官方網站上的說明安裝了最新版。
首先將 PostgreSQL 官方源添加到 apt 源列表。在 /etc/apt/source.list.d/ 目錄下建立 pgdg.list 檔案,檔案內容為

deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main

這裡是針對 Ubuntu 14.04 的源,其他版本的系統可以在文檔中找到相關的源。
然後匯入源的簽名。

$wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

至此就將 PostgreSQL 的官方源添加到源列表中了。接下來更新包列表,安裝需要用到的 postgresql-9.4postgresql-server-dev-9.4 兩個包。

$sudo apt-get update$sudo apt-get install postgresql-9.4 postgresql-server-dev-9.4

至此完成了 PostgreSQL 9.4 的基本安裝。
同樣需要注意的是,這裡的資料庫版本選擇純粹因為個人喜好,實際開發和生產過程中應按需選擇版本。

1.2.2 配置存取權限

安裝完 PostgreSQL 之後會自動在系統中建立名為 postgres 的使用者,即是 PostgreSQL administrator 使用者,對 PostgreSQL 的操作最好都由這個使用者來進行,盡量避免使用 root 使用者。為了使用這個使用者,首先需要修改它的密碼。

$sudo passwd postgres

postgres使用者密碼和訪問

以上是作業系統中的 postgres 使用者的操作,而我們知道資料庫管理系統也有使用者的概念,PostgreSQL 的管理使用者也是 postgres,為了能夠使用它管理資料庫,同樣需要設定密碼。首先登入到 postgres 使用者下,

$su postgres

然後進入 PostgreSQL 的管理程式 psql,此時是不要求輸入密碼的,因為存取控制項目預設為 peer 即只允許本地作業系統上的 postgres 使用者訪問。

$psql

此時命令提示字元變為 postgres=#,說明進入了 psql 環境,設定密碼,

postgres=# \password

然後退出 psql 環境,

postgres=# \q

之後修改 postgres 使用者的存取控制項目,編輯 /etc/postgresql/9.4/main/pg_hba.conf 檔案,將

local   all             postgres                                peer

修改為

local   all             postgres                                md5

重新載入設定檔使修改生效,

$pg_ctlcluster 9.4 main reload

注意 Debian 系的 Linux 採用的是 pg_ctlcluster 命令,而非 pg_ctl 命令。
此時再次嘗試使用 psql 就需要輸入密碼了。

為了能使客戶機上的 Navicat 登入管理 PostgreSQL,需要開啟對網路連接埠的監聽,編輯 /etc/postgresql/9.4/main/postgresql.conf 檔案,將

#listen_addresses = ‘localhost‘ 

修改為

listen_addresses = ‘*‘ 

注意,這裡去掉了行首的注釋。同樣,重新載入設定檔使修改生效。

1.2.3 建立應用使用者和資料庫

現在可以通過 Navicat 串連管理 PostgreSQL 資料庫了,在圖形化介面下很容易建立使用者和資料庫,這裡建立與應用同名的使用者和資料庫就好了,全部命名為 teamtea

同樣需要添加存取權限,編輯 /etc/postgresql/9.4/main/pg_hba.conf 檔案,添加一行

local   teamtea             teamtea                                md5

這裡限制了使用者 teamtea 只能訪問名為 teamtea 的資料庫,這對應用來說是足夠的,對整個資料庫系統來說也是安全的。
完成上述工作後,就可以退出 postgres 使用者了。

以下為草稿

1.3 配置 Django,啟動服務 1.3.1 配置 Django

現在可以開始配置我們的 Django 工程 teamtea 了,進入工程目錄,編輯檔案 /teamtea/settings.py 檔案,將資料庫配置項修改為

DATABASES = {    ‘default‘: {        ‘ENGINE‘: ‘django.db.backends.postgresql_psycopg2‘,        ‘NAME‘: ‘teamtea‘,        ‘USER‘: ‘teamtea‘,        ‘PASSWORD‘: ‘teamtea‘,        ‘HOST‘: ‘localhost‘,        ‘PORT‘: ‘5432‘,    }}

關於資料庫配置項可以參考官方文檔。

這裡同時將工程的時區設定為 UTC+8 即北京時間,將時區配置項修改為

TIME_ZONE = ‘Asia/Shanghai‘
1.3.2 初始化項目

現在可以對工程進行初始化了,需要說明的是,從 Django 1.7 開始已經將原有的資料庫同步命令 syncdb 標記為 deprecation 了,並將在 1.9 中完全刪除該命令,取代它的是 migrate 命令,

python3 manage.py migrate

這裡需要說明的是,因為 Django 是通過 pip3 安裝在 Python 3 的實環境下的,在執行 manage.py 指令碼之前需要指定運行環境為 Python 3,否則會找不到 Django,使用 virtualenv 會有所改善。

1.3.3 啟動服務

現在可以啟動 Django 內建的簡單測試用 網頁伺服器來測試整個工程是否可以運轉起來了,

python3 manage.py runserver 0.0.0.0:8000

這裡需要指定 IP 和連接埠號碼,否則只能在本地訪問。
現在開啟使用者機的瀏覽器,訪問 http://IP:8000 就可以看到調試用的頁面了,說明程式運行正常。
終止服務只需要 Ctrl-C 終止進程就行了。

2 總結 2.1 過程小結

整個過程還是因為不熟悉走了不少彎路,尤其是在我的短板資料庫這一塊,對 PostgreSQL 還需要加強學習啊。

2.2 還可以做的工作

作為學慣用的工程搭建過程,這邊文章描寫的步驟勉強是夠用的,但是還顯得很簡陋,還有很多工作可以做,例如使用 virtualenv 管理開發環境,避免直接在實環境下進行開發。還可以使用 git 來進資料列版本設定,這既是在學習階段也是很有必要的,它能協助記下每次可以正常啟動並執行代碼,防止某次改動後程式無法運行而又毫無頭緒的尷尬情形。
當然,部署 web 應用還可以使用 uwsgi + nginx 的方式,不過這更複雜,對 Django 的學習來說意義不大,可以當做另外一個主題去研究了。

記一次在 Linux 上建立 Django 應用的過程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.