django中url路由配置及渲染方式

来源:https://www.cnblogs.com/bdydrq/archive/2019/02/24/10423125.html
-Advertisement-
Play Games

今天我們學習如何配置url、如何傳參、如何命名、以及渲染的方式,內容大致有以下幾個方面。 創建視圖函數並訪問 創建app django中url規則 捕獲參數 路徑轉換器 正則表達式 額外參數 渲染方式 創建視圖並訪問 項目中自帶的Python文件中,並沒有帶有視圖,因此我們自己創建一個,通常,我們把 ...


  今天我們學習如何配置url、如何傳參、如何命名、以及渲染的方式,內容大致有以下幾個方面。

  • 創建視圖函數並訪問
  • 創建app
  • django中url規則
  • 捕獲參數
  • 路徑轉換器
  • 正則表達式
  • 額外參數
  • 渲染方式

創建視圖並訪問

  項目中自帶的Python文件中,並沒有帶有視圖,因此我們自己創建一個,通常,我們把視圖命名views.py。

  然後在views.py中,導入頭文件

 

     from django.http import HttpResponse 

 

  然後我們在views.py中,寫一些Python函數,用來訪問

 

    def hello(request):                          /*request用戶的請求 */
    
        return HttpResponse(‘hello,歡迎來到django’)

 

 在url.py中為視圖函數配置路由

  

from django.urls import path
from .  import views

urlpatterns = [
    path('hello',hello),       
]

   

   運行項目,如果上傳方式是Ctrl+S的話,記得上傳之後再運行,成功後

  瀏覽器輸入  127.0.0.1:8000/hello    即可訪問到

 


 

創建app

 

  創建APP的方式不只一種,在虛擬機里可以創建,也可以在pycharm里創建

  命令為:Python manage.py startapp appname

  在虛擬機里創建完,要在pycharm中下載下來

 

在pycharm中創建:

    方式一:

  項目運行成功後,在terminal裡面找到本項目,輸入命令 Python manage.py startapp appname

 

 

  如果沒有連接本地,則需要重新連接

 

 

  方式二:

    tool   ---->   run manage.py projectname

   

 

   startapp appname

  此方法也需要下載下來

 

 

下載完成後,創建的app就出現了。

 

 

 

 

 


 

url規則

1、網址組成

    網址:全球統一資源定位符

    https://www.i.cnblogs.com/EditPosts.aspx?postid=10423125

    這是本文網址,做個慄子吧

    https://www.i.cnblogs.com/EditPosts.aspx?postid=10423125

    協議              功能變數名稱                      路徑                   參數            

 

    django只搜索路徑部分,與其他都無關

 2、django的路由系統

     當一個請求來到

    1、首先到項目目錄下,url.py里查找路由規則

    2、跟urlconf模塊,裡面定義了urlpatterns變數

    3、按順序運行每一個,到第一個匹配的模式停止

    4、一旦匹配,django導入並調用給定的視圖

    5、如果沒有匹配到,或者中間出錯,則返回404

 

3、path里參數的含義

 

    path(route,view,kwargs=None,name=None)

  •  route   :   (必須有)是一個字元串的url規則
  • view      :  (必須有)是個視圖
  • kwargs   :(可有可無)額外參數,是字典類型,傳遞給view
  • name     :(可有可無)url名字

4、在url中捕獲參數

 

   尖括弧   < 參數  > 可以捕獲參數,傳遞給視圖

  本來捕獲的值是字元串

  如果要捕獲兩個參數,尖括弧間可用/斜杠,也可用-連接符,但訪問要一致

 

5、路徑轉化器

 

  如果想要讓捕獲的參數符合條件,那麼我們會用到路徑轉化器

  符號是冒號   :       eg:<int:age>

  常用的路徑轉化器

  int   :    匹配任意整數

  path  :   匹配任意非空字元

   str    :   匹配除了 / 路徑分隔符外所有字元串

  uuid  :  格式化id

  sulg   :  匹配任意ASCII字元和連字元及下劃線

 

6、正則表達式

 

  前面我們學習到路徑轉化器,但是有時候我們的轉化器並不能夠完全滿足我們捕獲參數的條件,像int轉化器去捕獲年份,如果我們傳入10000,肯定會捕獲呀,但不合理,因此,我們正則表達式可以更好用一些。

  使用時,首先要導入進來 form django.url import re_path

  參數跟path里相同

  下麵看正則表達式的方法用什麼捕獲方式

  第一種是分組的,在視圖中根據參數名傳參

re_path(r'plan/(?P<year>\d\d\d\d)/(?P<month>[0-9]|1[0-2])/',plan),

  年  四位數,月  0-9 或者1和0-2

  第二種是不分組的,在視圖中安位置傳參

re_path(r'plan/(\d{4})\([0-9]|1[0-2]/',plan),

  \d\d\d\d與\d{4}含義相同,都是四位整數

 

7.主路由分配給分路由

 

    如果所有是url都在主路由下配置,那麼對於檢查和維護修改都會帶來不便,因此我們需要將主路由分配給各個app下的路由

  方式:include()

    使用方法:先需要導入,

      from django.urls import path,include

  使用:   eg,名為teacher的APP,將主路由分給teacher.url

    path(‘teacher/’,include('teacher.urls')),

    在teacher-APP中,創建urls.py(因為新建的APP沒有自帶url.py)

    在teacher.url.py中,手動輸入

    form  django.urls import path

    from .views import *

    這裡的views是此APP里的views

        include可以多級使用

  include的原理:當遇到include時,路徑就被切斷,然後在include包含的分路由中開始繼續檢索。

  在path(‘teacher-<age>/’,include('teacher.urls')),裡面傳參是可以的,就是分路由每個都要傳參。

 

8、傳遞額外參數

 

  當在路由中傳入額外參數時,如果kwargs中key值與捕獲參數不一致,按照kwargs為準。

    

  

 

    如果在include後,傳遞的話,那麼相當於此分路由各個url後都有此額外參數。

9、app_name的作用

  -頁面重定向

    redirect     可以實現頁面跳轉

    導入  from django.shortcuts import render,redirect,reverse

    使用     return  redirect(‘網址或者路徑’)

  -reverse

    如果給path裡加入name參數,reverse(name)就等於前面路徑

    因此實現頁面跳轉,可以設變數url=reverse(name的值)     然後return redirect(url)即可實現

  -app_name 

    那我們的name就不可以設為一樣的嗎?

    在不同app下其實可以一樣,但需要使用app_name

    在url.py里urlpatterns前寫

      app_name = ‘appname’  

    使用:

    url=reverse(appname:name)


 

10、模板系統

    HTML源碼寫到模板文件中

  -模板路徑設置

    在項目中創建templates文件夾,在文件夾內創建跟APP同名的文件夾

    主目錄下settings.py中找到           然後寫入            

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
  }

  -渲染

    在templates下寫的HTML要如何使用呢?

    在需要使用的視圖中引用

    from django.template.loader import get_template
    from django.shortcuts import render

   使用時需要渲染,用render 

def new(request):
fg=get_template('student/index.html') 路徑從templates往下的開始寫
html=fg.render()
return HttpResponse(html)

    訪問此視圖,HTML模板即可被渲染出來

  另一種更簡便的方法

def new(request):

return render(request,'student/index.html')

 

這次就到這裡,下一篇會深入模板變數哦。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先,不論是在Windows、Linux還是Mac上,Webassembly的編譯都是主要依賴於Emscripten SDK這個工具的。但是,在這裡必須要吐槽一下,不論是WebAssembly官網、WebAssembly中文網還是Emscriptem官網安裝文檔上給出的安裝方式基本都是這樣的(中文網 ...
  • 本文是抽屜組件在PC端滾動滑鼠中鍵、手機端滑動時,滾動數據列表實現方法,沒有使用iscroll等第三方插件,支持火狐,谷歌,IE等瀏覽器。演示在:www.jgui.com Github地址:https://github.com/zhaogaojian/JGUI覺得好的給個star,謝謝! 源碼未壓縮 ...
  • 一、服務註冊中心介紹 分散式服務框架部署在多台不同的機器上。例如服務A是訂單相關的處理服務,服務B是訂單的客戶的相關信息服務。此時有個需求需要在服務A中獲取訂單客戶的信息。如下圖: 此時就面臨以下幾個問題: 1、集群A中的服務調用者如何發現集群B中的服務提供者。 2、集群A中的服務調用者如何選擇集群 ...
  • 一個成熟的大型分散式系統,並不是在其開始時,就設計為這樣,而是在之後的不斷優化,迭代而不斷的進化成熟的。 在一個系統剛開始運行時,可能用戶數,業務處理等都還比較簡單,因此由一臺伺服器就能支撐起其正常的業務處理。其系統架構模型可能如下所示: 1,單應用架構 其應用服務和資料庫服務,都部署在同一臺伺服器 ...
  • 前言:這段時間項目組正在加班加點的進行基於現有單體應用的微服務架構改造。微服務是一種架構概念,這個概念是2012年出現的,作為加快Web和移動應用程式開發進程的一種方法,2014年開始受到各方的關註,而2015年,可以說是微服務的元年;越來越多的論壇、社區、blog以及互聯網行業巨頭開始對微服務進行 ...
  • 本文主要介紹fio是如何運行的,並且以單線程、單job為例 fio的入口在fio.c中的main函數,下麵列出了main函數,此處只出示了一些調用的關鍵函數 在main函數中主要調用了兩個關鍵函數,parse_options,顧名思義,就是分析options,也就是fio的參數,而fio_backe ...
  • 前言 最近大家討論最多的就是《流浪地球》了,偶爾刷逼乎,狗血的事情也是層出不窮,各種撕逼大戰,有興趣的小伙伴可以自行搜索。 截止目前,《流浪地球》已上映20天,累計票房43.94億,豆瓣評分7.9分。博主是正月初七看的,票價有點小貴,整體效果還算可以,雖然劇情有點尷尬,各種鏡頭切換有時候看的稀里糊塗 ...
  • 首先, 還是以天氣為例, 準備如下數據: 輸出: 上面的例子就是以 'city' 為基準對兩個 dataframe 進行合併, 但是兩組數據都是高度一致, 下麵調整一下: 輸出:從輸出我們看出, 通過 merge 合併, 會取兩個數據的交集. 那麼, 我們應該可以設想到, 可以通過調整參數, 來達到 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...