日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你的第一个Django程序

發布時間:2023/12/10 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你的第一个Django程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文使用Pycharm、Django 2.0.9、Python 3.6環境,本文大綱

  • 建立Django項目
  • 建立頁面
  • 什么是URLconf和ROOT_URLCONF
  • Django怎么處理URL請求
  • 關于URL尾部的“/” 反斜線

1. 建立一個Django項目

Application name如果填寫會自動幫你建立一個APP,而且APP是必須的,就算你用命令行去創建一個項目也需要再次使用命令創建APP。勾選Enable Django admin,這個后面也會用到。下面是默認的結構。

我們先把下面的內容注釋掉,因為還用不到數據庫。

啟動你的項目

點擊鏈接你會看到下面的內容

2. 你的第一個頁面

再次啟動項目,不過這次你點擊以后會出現404錯誤,你在URL中輸入,將會看到你所期待的頁面。

這時候你可能有一些疑問,我必須要輸入/hello么,如果我需要輸入127.0.0.1:8000就直接看到Hello world頁面怎么辦?畢竟網站都是有一個默認主頁不想輸入下一級?這時候我們就需要修改URL配置了。

這時候無論你是否輸入/hello都會顯示這個頁面,如下圖

URL中什么都不加也就是網站的根目錄其實也根配置其他URL一樣需要些一個匹配模式,這個模式就是空??赡芗毿牡耐瑢W發現我這里的URL匹配模式中沒有了^和$,包括網站根目錄也僅僅是一對引號而不是之前的’^$’這種形式。這是在Django 2.0開始發生的變化,2.0以前都是需要加^和$的。但是這里有個問題這里的URL不是正則類型的不是正則就很容易匹配到多個,如果我想使用正則類型的怎么辦?看下圖:

同樣還是主頁,這里我們用了正則的寫法效果還是一樣的,這個寫法就和Django 1.x里面一樣了,只是這里用了re_path,而且在Django 2.x中要想使用支持正則的URL匹配必須使用這個。

現在我們要討論幾個問題

2.1?什么是URLconf和ROOT_URLCONF

一個URL配置文件也就是上面這樣的,用于配置URL匹配模式的文件就是URLconf。那什么是ROOT_URLCONF呢?

在項目層級的settings.py文件中有一個ROOT_URLCONF配置選項,這個選項又指向了默認項目層級自動生成的urls.py這個URLconf文件。其實這個ROOT_URLCONF就是告訴DJANGO從哪里開始去找匹配你輸入的URL的匹配模式,當第一個匹配到之后就執行對應的動作。如果一直找不到就返回404.

2.2?Django是怎么處理請求的呢

比如你輸入 http://127.0.0.1:8000/hello的時候它怎么就能返回你所期待的內容呢?其實就像上面的ROOT_URLCONF說的那樣,它指向了一個包含URL匹配模式得URL配置文件,這些文件同時還可以再包含其他URL配置文件,那么Django就從ROOT_URLCONF配置的地方開始加載URL配置文件,然后逐一去匹配,找到第一個匹配的就執行對應的動作,如果找不到就返回404.

當輸入/hello時就匹配到了這條,然后去執行hello這個函數,這個函數定義在mysite.views中

這個函數要執行的具體內容是做一個HTTP響應,返回內容是Hello world。就是這樣一個過程。簡單一句話URL的配置就是把HTTP請求中的URL映射到具體的Python函數上。

直白一點說請求/hello Django將會調用mysite.views.hello(request),如果有參數,參數也會被傳遞進來,至于參數怎么傳遞之后在介紹。

2.3?關于URL尾部的“/”

這個“/”是必須的嗎?我好像輸入URL時也沒有輸入這個它自己怎么就給我加上了呢。對于URL來說末尾有沒有“/”無所謂,但是到底需不需要是你自己來決定的。默認情況下雖然你不輸入“/”django會自動給你加上,但至于能不能訪問到你期望的內容就要看你的URL配置是怎樣的。

我們的URL配置是這樣的 “hello/” 而且Django默認會自動在末尾增加“/”如果你沒輸入的話,所以這種情況下你在瀏覽器中是否輸入“/”都會訪問到你所期待的網頁。但如果你這個時候把你URL配置更改一下如下圖:(去掉“/”)

這時候由于django默認自動在末尾增加“/”所以這時候你就看不到那個頁面了,將會得到404.

為什么會這樣呢?很顯然 http://127.0.0.1:8000/hello 和 http://127.0.0.1:8000/hello/ 是兩個URL,后者無法被URL配置文件匹配到啊,所以你看它給你的提示第三項就說的很明白了。如果我就不想要這個“/”那應該怎么辦呢?修改settings.py文件,怎講下面的內容就禁止自動在末尾增加“/”。

這時候你再訪問http://127.0.0.1:8000/hello 這個URL就可以訪問到了。

但是如果你這時候訪問http://127.0.0.1:8000/hello/ 這個就會得到404,為什么?匹配不到啊。我們再次修改一下URL配置

views.py中增加一個方法

再次訪問

所以URL配置中的URL末尾是否包含“/”則是根據喜好都可以。不過根據REST原則“/”只表示分級無特殊意義,所以在URL末尾不建議增加“/”.不過對于傳統WEB頁面來說加與不加都表示同一資源也就是顯示同一結果,所以django才會自動默認加上“/”。

REST AP設計

2.4?難道所有的URL配置都寫在默認的urls.py文件中嗎?

顯然不是這就用到一個include函數了。通常情況下每一個APP都有自己的URL配置文件。

mysite是我們的APP,它下面并沒有配置URL的地方, 其實URL配置文件就是一個.py文件沒有什么特殊的,我們手動建立一個就行。

空空如也的文件,需要寫什么呢?照貓畫虎,參照之前那個默認生成的urls.py就可以。先說一下需求,所有關于mysite這個APP的URL全部在APP里面的URL配置文件中配置。我們先看這個我們新建的URL配置怎么寫:

修改默認的url.py文件

到這里就修改完畢。結果就是輸入 http://127.0.0.1:8000 結果不變還是我們定義的主頁,然后 http://127.0.0.1:8000/mysite/hello? 則顯示mysite.views.hello函數執行結果。如下圖:

雖然上面兩個URL顯示結果一樣(因為執行的都是相同的東西),但我們的目的是為了說明URL的引入以及不同APP的URL應該在APP里面設置而不是都寫到默認生成的urls.py文件中。

Include()函數的作用就是允許引入其他的URLconf設置,當Django遇到帶有include()的URL匹配是,如果匹配到那么它會截斷匹配的內容將剩余的字符串發送到include()里面的URL配置中繼續匹配。

http://127.0.0.1:8000/mysite/hello 在默認的URL配置文件中匹配到/mysite/就截斷,然后將hello發送到mystie里面的urls.py去繼續匹配。

轉載于:https://www.cnblogs.com/rexcheny/p/9635647.html

總結

以上是生活随笔為你收集整理的你的第一个Django程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。