【Django試圖與網址003】
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】