1. 程式人生 > >django的檢視

django的檢視

https://code.ziqiangxuetang.com/django/django-views-urls.html

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