django開發的大型網站,Django 視圖與網址

 2023-12-06 阅读 19 评论 0

摘要:Django?視圖與網址 此文已經針對 Django 2.0 更新,適用于 Django 1.4 - Django 2.0 所有版本。 ? Django中網址是寫在 urls.py 文件中,用正則表達式對應 views.py 中的一個函數(或者generic類),我們用一個項目來演示。 django開發的大型網站。下載本節所有源代

Django?視圖與網址

?

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

django開發的大型網站。下載本節所有源代碼:

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

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

1
django-admin?startproject?mysite

備注:

用django做一個簡單網站,1. 如果 django-admin 不行,請用 django-admin.py

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

django返回圖片給前端、?

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

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包的目錄結構必須的,與調用有關。

django admin 自定義頁面、?

我們到外層那個 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正則表達式。

轉載于:https://www.cnblogs.com/shaobobo/p/10167686.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/190795.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息