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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...