1. 程式人生 > >Django 視圖與網址

Django 視圖與網址

lin discover rtp welcome color .py 下載 針對 order

Django 視圖與網址

此文已經針對 Django 2.0 更新,適用於 Django 1.4 - Django 2.0 所有版本。

Django中網址是寫在 urls.py 文件中,用正則表達式對應 views.py 中的一個函數(或者generic類),我們用一個項目來演示。

下載本節所有源代碼:

學習編程最好的辦法就是動手敲代碼,請按照教程做,本節很簡單,不提供源代碼了,動手開始吧!

一,首先,新建一個項目(project), 名稱為 mysite

1 django-admin startproject mysite

備註:

1. 如果 django-admin 不行,請用 django-admin.py

2. 如果是在Linux是用源碼安裝的,或者用 pip 安裝的,也是用 django-admin.py 命令

技術分享圖片

運行後,如果成功的話, 我們會看到如下的目錄樣式 (沒有成功的請參見環境搭建一節):

1 2 3 4 5 6 7 mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py

我們會發現執行命令後,新建了一個 mysite 目錄,其中還有一個 mysite 目錄,這個子目錄 mysite 中是一些項目的設置 settings.py

文件,總的urls配置文件 urls.py 以及部署服務器時用到的 wsgi.py 文件, __init__.py 是python包的目錄結構必須的,與調用有關。

我們到外層那個 mysite 目錄下(不是mysite中的mysite目錄)

二, 新建一個應用(app), 名稱叫 learn

1 python manage.py startapp learn # learn 是一個app的名稱

我們可以看到mysite中多個一個 learn 文件夾,其中有以下文件。

1 2 3 4 5 6 learn/ ├── __init__.py ├── admin.py
├── models.py ├── tests.py └── views.py

註:Django 1.8.x 以上的,還有一個 migrations 文件夾。Django 1.9.x 還會在 Django 1.8 的基礎上多出一個 apps.py 文件。但是這些都與本文無關。

把我們新定義的app加到settings.py中的INSTALL_APPS

修改 mysite/mysite/settings.py

1 2 3 4 5 6 7 8 9 10 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/中的文件) , 後面你會學習到它們分別用來幹什麽.

定義視圖函數(訪問頁面時的內容)

我們在learn這個目錄中,把views.py打開,修改其中的源代碼,改成下面的

1 2 3 4 5 6 # coding:utf-8 from django.http import HttpResponse def index(request): return HttpResponse(u"歡迎光臨 自強學堂!")

第一行是聲明編碼為utf-8, 因為我們在代碼中用到了中文,如果不聲明就報錯.

第二行引入HttpResponse,它是用來向網頁返回內容的,就像Python中的 print 一樣,只不過 HttpResponse 是把內容顯示到網頁上。

我們定義了一個index()函數,第一個參數必須是 request,與網頁發來的請求有關,request 變量裏面包含getpost的內容,用戶瀏覽器,系統等信息在裏面(後面會講,先了解一下就可以)。

函數返回了一個 HttpResponse 對象,可以經過一些處理,最終顯示幾個字到網頁上。

那問題來了,我們訪問什麽網址才能看到剛才寫的這個函數呢?怎麽讓網址和函數關聯起來呢?

定義視圖函數相關的URL(網址) (即規定 訪問什麽網址對應什麽內容)

我們打開 mysite/mysite/urls.py 這個文件, 修改其中的代碼:

由於 Django 版本對 urls.py 進行了一些更改:

Django 1.7.x 及以下的同學可能看到的是這樣的:

1 2 3 4 5 6 7 8 9 10 11 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 2.0 版本的同學,Django 官方鼓勵(或說要求)先引入,再使用:

1 2 3 4 5 6 7 8 9 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), ]

Django 2.0 版本的同學,urls.py 有比較大的變化(a)(上面 Django 1.8 的在 2.0 中也可以用,是兼容的)

1 2 3 4 5 6 7 8 9 from django.contrib import admin from django.urls import path from learn import views as learn_views # new urlpatterns = [ path(‘‘, learn_views.index), # new path(‘admin/‘, admin.site.urls), ]

以上都修改並保存後,我們來看一下效果!

在終端上運行 python manage.py runserver 我們會看到類似下面的信息:

1 2 3 4 5 6 7 8 9 10 11 12 $ python manage.py runserver Performing system checks... System check identified no issues (0 silenced). You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions. Run ‘python manage.py migrate‘ to apply them. December 14, 2017 - 15:09:47 Django version 2.0, using settings ‘mysite2.settings‘ Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.

提示:上面有一些數據庫相關的提示,但目前我們沒有用到,暫時先忽略他們。

我們打開瀏覽器,訪問 http://127.0.0.1:8000/

不出意料的話會看到:

技術分享圖片

註意:如果是在另一臺電腦上訪問要用 python manage.py ip:port 的形式,比如監聽所有ip:

1 2 3 python manage.py runserver 0.0.0.0:8000 監聽機器上所有ip 8000端口,訪問時用電腦的ip代替 127.0.0.1

Django中的 urls.py 用的是正則進行匹配的,如果不熟悉,您可以學習正則表達式以及Python正則表達式。

Django 視圖與網址