1. 程式人生 > >【Django試圖與網址003】

【Django試圖與網址003】

led discover sessions ews 正則表達 linu shortcut test print

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

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

django-admin startproject mysite

備註:

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

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

運行後,如果成功的話, 我們會看到如下的目錄樣式 (沒有成功請參見:https://code.ziqiangxuetang.com/django/django-install.html):

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

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

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

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

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打開,修改其中的源代碼,改成下面的

#coding:utf-8
from django.shortcuts import render

def index(request):
    return HttpResonse(u"開啟網站開發之旅!!!")

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

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

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

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

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

定義視圖函數相關的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 2.0 版本的同學,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),
]

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

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),
]

【Django試圖與網址003】