一. 安裝。
首先安裝pip
linux下:
yum install python-pip
windows下:
二、下載源碼安裝。
https://www.djangoproject.com/download/
3.1 Linux 或 Mac 下
|
tar -xvzf django-1.7.6.tar.gz
cd django-1.7.6
(sudo) python setup.py install
|
3.2 Windows 下
直接用解壓軟件解壓,然后到命令行(XP/Win7點擊開始,在下面的那個輸入框中輸入 cmd, Win8在開始那里點右鍵,選擇命令行)
比如在 D:\django-1.7.6\ 這個文件夾下
|
cd D:
cd django-1.7.6
python setup.py install
|
什么?提示 ‘python’不是內部或外部命令,也不是可運行的程序或批處理文件。
Linux用自帶源進行安裝
1.1 ubuntu 下安裝 Django
|
sudo apt-get install python-django -y
|
1.2 Fedora 下安裝用 yum
|
yum install python-django
|
注意:自帶源安裝的 Django 一般版本比較舊,而用 pip 可以安裝最新的版本。
2. 檢查是否安裝成功
終端上輸入 python ,點擊 Enter,進行 python 環境
|
>>> import django
>>> django.VERSION
(1, 7, 6, 'final', 0)
>>>
>>> django.get_version()
'1.7.6'
|
三、Django命令。
1. 新建項目(mywebsite):
django-admin.py startproject mywebsite
django-admin.py文件的目錄 python安裝目錄下的 python27\Lib\site-packages\Django-1.9.2-py2.7.egg\django\bin
2. 新建app(learn)
manage.py startapp learn
manage.py文件的目錄 python安裝目錄下的 python27\Lib\site-packages\Django-1.9.2-py2.7.egg\django\bin\mywebsite
3. 同步數據庫
4. 使用開發服務器。
開發服務器,即開發時使用,一般修改代碼后會自動重啟,方便調試和開發,但是由于性能問題,建議只用來測試,不要用在生產環境。
1
2
3
4
5
6
7
8
9
10
11
|
python manage.py runserver
# 當提示端口被占用的時候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(當然也可以kill掉占用端口的進程)
# 監聽所有可用 ip (電腦可能有一個或多個內網ip,一個或多個外網ip,即有多個ip地址)
python manage.py runserver 0.0.0.0:8000
# 如果是外網或者局域網電腦上可以用其它電腦查看開發服務器
# 訪問對應的 ip加端口,比如 http://172.16.20.2:8000
|
5. 清空數據庫
|
python manage.py flush
|
此命令會詢問是 yes 還是 no, 選擇 yes 會把數據全部清空掉,只留下空表。
6. 創建超級管理員
|
python manage.py createsuperuser
# 按照提示輸入用戶名和對應的密碼就好了郵箱可以留空,用戶名和密碼必填
# 修改 用戶密碼可以用:
python manage.py changepassword username
|
7. 導出數據 導入數據
1
2
|
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
|
關于數據操作 詳見:數據導入數據遷移,現在了解有這個用法就可以了。
8. Django 項目環境終端
|
python manage.py shell
|
如果你安裝了 bpython 或 ipython 會自動用它們的界面,推薦安裝 bpython。
這個命令和 直接運行 python 或 bpython 進入 shell 的區別是:你可以在這個 shell 里面調用當前項目的 models.py 中的 API,對于操作數據,還有一些小測試非常方便。
9. 數據庫命令行
|
python manage.py dbshell
|
Django 會自動進入在settings.py中設置的數據庫,如果是 MySQL 或 postgreSQL,會要求輸入數據庫用戶密碼。
在這個終端可以執行數據庫的SQL語句。如果您對SQL比較熟悉,可能喜歡這種方式。
10. 更多命令
1
|
終端上輸入 python manage.py 可以看到詳細的列表,在忘記子名稱的時候特別有用。
|
四、項目實例。(視圖和網址的應用)
新建一個mywebsite實例,一個learn應用。
成功后的目錄結構
└── wsgi.py
└── learn/
1. 把我們新定義的app加到settings.py中的INSTALL_APPS中
修改 mysite/mysite/settings.py
|
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'learn',
)
|
備注,這一步是干什么呢? 新建的 app 如果不加到 INSTALL_APPS 中的話, django 就不能自動找到app中的模板文件(app-name/templates/下的文件)和靜態文件(app-name/static/中的文件) , 后面你會學習到它們分別用來干什么.
2. 定義視圖函數(訪問頁面時的內容)
我們在learn這個目錄中,把views.py打開,修改其中的源代碼,改成下面的
|
#coding:utf-8
from django.http import HttpResponse
def index(request):
return HttpResponse(u"歡迎光臨 自強學堂!")
|
第一行是聲明編碼為utf-8, 因為我們在代碼中用到了中文,如果不聲明就報錯.
第二行引入HttpResponse,它是用來向網頁返回內容的,就像Python中的 print 一樣,只不過 HttpResponse 是把內容顯示到網頁上。
3. 定義視圖函數相關的URL(網址) (即規定 訪問什么網址對應什么內容)我們打開 mysite/mysite/urls.py 這個文件, 修改其中的代碼:
由于 Django 版本對 urls.py 進行了一些更改:
Django 1.7.x 及以下的同學可能看到的是這樣的:
|
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', 'learn.views.index'), # new
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
)
|
Django 1.8.x及以上,Django 官方鼓勵(或說要求)先引入,再使用:
|
from django.conf.urls import url
from django.contrib import admin
from learn import views as learn_views # new
urlpatterns = [
url(r'^$', learn_views.index), # new
url(r'^admin/', admin.site.urls),
]
|
4. 在終端上運行 python manage.py runserver 我們會看到類似下面的信息:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
December 22, 2015 - 11:57:33
Django version 1.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
|
我們打開瀏覽器,訪問 http://127.0.0.1:8000/
獲取GET傳遞過來的數據:采用 /add/?a=4&b=5 這樣GET方法進行
views.py修改:
from django.shortcuts import render
from django.http import HttpResponse
def add(request):
a = request.GET['a']
b = request.GET['b']
c = int(a)+int(b)
return HttpResponse(str(c))
|
注:request.GET 類似于一個字典,更好的辦法是用 request.GET.get('a', 0) 當沒有傳遞 a 的時候默認 a 為 0
urls.py修改Django1.8以上
1
2
3
4
5
6
7
8
9
|
from django.conf.urls import url
from django.contrib import admin
from calc import views as learn_views
urlpatterns = [
url(r'^add/',
learn_views.add, name='add'), # 注意修改了這一行
url(r'^admin/', admin.site.urls),
]
|
我們打開開發服務器并訪問
1
2
3
|
python manage.py runserver
如果提示 Error: That port is already in use.在后面加上端口號8001,8888等
python manage.py runserver 8001
|
打開網址:http://127.0.0.1:8000/add/ 就可以看到
如果 采用 /add/3/4/ 這樣的網址的方式views.py
Django 1.8.x 及以上:
|
url(r'^add2/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
|
可以看到網址中多了 (\d+), 正則表達式中 \d 代表一個數字,+ 代表一個或多個前面的字符,寫在一起 \d+ 就是一個或多個數字,用括號括起來的意思是保存為一個子組(更多知識請參見Python 正則表達式),每一個子組將作為一個參數,被 views.py 中的對應視圖函數接收。
我們再訪問 http://127.0.0.1:8000/add/4/5/ 就可以看到和剛才同樣的效果,但是這回網址更優雅了
五、項目實例。(模版)
. 打開 learn/views.py 寫一個首頁的視圖
|
from django.shortcuts import render
def home(request):
return render(request, 'home.html')
|
在 learn目錄下新建一個 templates 文件夾,里面新建一個 home.html
默認配置下,Django 的模板系統會自動找到app下面的templates文件夾中的模板文件。
def home(request):
name_list = ['張三', '李四', '王五', '趙六']
content = {'title': '名單'}
return render(request, 'home.html', {'name': name_list, 'content': content})
模版傳參數。
模版中變量訪問
{{content.title}}
模版中方法的應用:
{{ % for n in name % }}
{{% endfor %}}
六、Django使用數據庫。
settings.py配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'Person',
'USER': 'root',
'PASSWORD': '123',
'HOST': '',
'PORT': '3306',
}
}
可能會報錯,沒有mysqldb驅動模塊,https://pypi.python.org/pypi/MySQL-python/下載安裝就行了。
django.db.utils.operationalerror:<2003, cant connect to mysql
上面配置里面的HOST字段修改成:127.0.0.1