Django之views

来源:https://www.cnblogs.com/hantaozi430/archive/2018/01/27/8350514.html
-Advertisement-
Play Games

一.路由配置系統 1.1 基本認識 a. URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL與要為該URL調用的視圖函數之間的映射表 b. URLconf 在請求的URL 上查找,將它當做一個普通的Python 字元串。不包括GET和POST參數以及功能變數名稱。 例如,htt ...


一.路由配置系統

1.1 基本認識

  a. URL配置(URLconf)就像Django 所支撐網站的目錄。它的本質是URL與要為該URL調用的視圖函數之間的映射表

  b. URLconf 在請求的URL 上查找,將它當做一個普通的Python 字元串。不包括GET和POST參數以及功能變數名稱。

例如,http://www.example.com/myapp/ 請求中,URLconf 將查找myapp/

在http://www.example.com/myapp/?page=3 請求中,URLconf 仍將查找myapp/

URLconf 不檢查請求的方法。換句話講,所有的請求方法 —— 同一個URL的POSTGETHEAD等等 —— 都將路由到相同的函數。

  c. 每個捕獲的參數都作為一個普通的Python 字元串傳遞給視圖,無論正則表達式使用的是什麼匹配方式。

1.2 語法

urlpatterns = [
         url(正則表達式, views視圖函數,參數,別名)

1.3 基本用法

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),         #不加$,匹配開頭
    url(r'^login/$', views.login),              #加$,完整匹配
#加括弧,將作為位置參數傳入view函數里
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^menu/(\d+)', views.menu), # menu(request,1)
'''
有名分組(named group)
將用"()"捕獲的URL中的值以關鍵字參數傳入view函數中
在Python 正則表達式中,命名正則表達式組的語法是(?P<name>pattern),其中name 是組的名稱,pattern 是要匹配的模式。
'''
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]
'''
利用有名分組,給view參數設預設值
'''

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^blog/$', views.page),
    url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]

1.4 URL分發

'''
當有多個app,且url路徑較多時,為方便管理,可進行url分發
在app目錄中建立自己的urls,在共用urls文件中利用‘include’實現
'''
from django.conf.urls import include, url
urlpatterns = [
   url(r'^admin/', admin.site.urls),
   url(r'^blog/', include('blog.urls')),
]

1.5 URL反向解析

  在使用Django 項目時,一個常見的需求是獲得URL 的最終形式,以用於嵌入到生成的內容中(視圖中和顯示給用戶的URL等)或者用於處理伺服器端的導航(重定向等)。

人們強烈希望不要硬編碼這些URL(費力、不可擴展且容易產生錯誤)或者設計一種與URLconf 毫不相關的專門的URL 生成機制,因為這樣容易導致一定程度上產生過期的URL。

換句話講,需要的是一個DRY 機制。除了其它有點,它還允許設計的URL 可以自動更新而不用遍歷項目的源代碼來搜索並替換過期的URL。

獲取一個URL 最開始想到的信息是處理它視圖的標識(例如名字),查找正確的URL 的其它必要的信息有視圖參數的類型(位置參數、關鍵字參數)和值。

Django 提供一個辦法是讓URL 映射是URL 設計唯一的地方。你填充你的URLconf,然後可以雙向使用它:

  • 根據用戶/瀏覽器發起的URL 請求,它調用正確的Django 視圖,並從URL 中提取它的參數需要的值。
  • 根據Django 視圖的標識和將要傳遞給它的參數的值,獲取與之關聯的URL。

第一種方式是我們在前面的章節中一直討論的用法。第二種方式叫做反向解析URL、反向URL 匹配、反向URL 查詢或者簡單的URL 反查。

在需要URL 的地方,對於不同層級,Django 提供不同的工具用於URL 反查:

  • 在模板中:使用url 模板標簽。
  • 在Python 代碼中:使用django.core.urlresolvers.reverse() 函數。
  • 在更高層的與處理Django 模型實例相關的代碼中:使用get_absolute_url() 方法
#urls中
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^loginggggg/$', views.login,name='login'),

#templates中
<form action="{% url 'login' %}" method="post">

1.6 名稱空間(namespace)

二.視圖函數(views)

2.1 介紹

  接受web請求併進行邏輯處理繼而返回web響應。

  約定是將視圖放置在項目或應用程式目錄中的名為views.py的文件中。

2.2 請求對象

request作為views函數中的第一個參數使用

Request.body
'''
一個字元串,代表請求報文的主體。在處理非 HTTP 形式的報文時非常有用,例如:二進位圖片、XML,Json等。
  但是,如果要處理表單數據的時候,推薦還是使用 HttpRequest.POST 。
  另外,我們還可以用 python 的類文件方法去操作它,詳情參考 HttpRequest.read() 。
'''

Request.path
'''
一個字元串,表示請求的路徑組件(不含功能變數名稱)。
  例如:"/music/bands/the_beatles/"
'''

Request.method
'''
一個字元串,表示請求使用的HTTP 方法。必須使用大寫。
  例如:"GET"、"POST"
'''

Request.GET
'''
一個類似於字典的對象,包含 HTTP GET 的所有參數。詳情請參考 QueryDict 對象。
'''

Request.POST
'''
  一個類似於字典的對象,如果請求中包含表單數據,則將這些數據封裝成 QueryDict 對象。
  POST 請求可以帶有空的 POST 字典 —— 如果通過 HTTP POST 方法發送一個表單,但是表單中沒有任何的數據,QueryDict 對象依然會被創建。
   因此,不應該使用 if request.POST  來檢查使用的是否是POST 方法;應該使用 if request.method == "POST" 
  另外:如果使用 POST 上傳文件的話,文件信息將包含在 FILES 屬性中。
'''

Request.META
'''
   一個標準的Python 字典,包含所有的HTTP 首部。具體的頭部信息取決於客戶端和伺服器,下麵是一些示例:
    CONTENT_LENGTH —— 請求的正文的長度(是一個字元串)。
    CONTENT_TYPE —— 請求的正文的MIME 類型。
    HTTP_ACCEPT —— 響應可接收的Content-Type。
    HTTP_ACCEPT_ENCODING —— 響應可接收的編碼。
    HTTP_ACCEPT_LANGUAGE —— 響應可接收的語言。
    HTTP_HOST —— 客服端發送的HTTP Host 頭部。
    HTTP_REFERER —— Referring 頁面。
    HTTP_USER_AGENT —— 客戶端的user-agent 字元串。
    QUERY_STRING —— 單個字元串形式的查詢字元串(未解析過的形式)。
    REMOTE_ADDR —— 客戶端的IP 地址。
    REMOTE_HOST —— 客戶端的主機名。
    REMOTE_USER —— 伺服器認證後的用戶。
    REQUEST_METHOD —— 一個字元串,例如"GET" 或"POST"。
    SERVER_NAME —— 伺服器的主機名。
    SERVER_PORT —— 伺服器的埠(是一個字元串)。
   從上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,請求中的任何 HTTP 首部轉換為 META 的鍵時,
    都會將所有字母大寫並將連接符替換為下劃線最後加上 HTTP_  首碼。
    所以,一個叫做 X-Bender 的頭部將轉換成 META 中的 HTTP_X_BENDER 鍵。
'''

 

2.3 render

  結合一個給定的模板和一個給定的上下文字典,並返回一個渲染後的 HttpResponse 對象。

render(request, template_name,{})

template_name:模板名稱

{}:可選,對html文件進行渲染。具體見Django之templetes

return render(request,'dep_change.html',{'dep_init_name':dep_init_name})
return render(request,'dep_change.html',locals())      #不需一個一個傳值

  

2.4 redirect

重定向。參數為一個url地址。

 


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

-Advertisement-
Play Games
更多相關文章
  • mui傳值,使用mui.openWindow()實現,參數extras傳入參數,被傳入的頁面用plus接收即可 ...
  • function num(obj){ obj.value = obj.value.replace(/[^\d.]/g,""); //清除"數字"和"."以外的字元 obj.value = obj.value.replace(/^\./g,""); //驗證第一個字元是數字 obj.value = o ...
  • 數組方法是否為數組Array.isArray(param)如果param是 Array,則為true; 否則為false。數組轉字元串joinjoin(separator)以separator為分隔符,省略的話則用預設用逗號為分隔符可以實現重覆字元串,實質是在n+1個空字元串之間加入要重覆 ...
  • 本文最初發表於 "博客園" ,併在 "GitHub" 上持續更新 前端的系列文章 。歡迎在GitHub上關註我,一起入門和進階前端。 以下是正文。 數組的定義 之前學習的數據類型,只能存儲一個值(字元串為一個值)。如果我們想存儲多個值,就可以使用數組。 數組的定義 (1)字面量定義。舉例: (2)對 ...
  • 1. 問題 當使用tab切換時,部分特殊場景需要獲取當前元素的類名或者id。 2.解決思路,tab切換是綁定函數,函數會傳遞過去當前對象,通過當前對象獲取對象屬性 vue部分代碼:本項目是在vue-cli下運行,因此vue的初始化函數略有差異。 ...
  • 到了年底,開發任務相對較少,閑來看了幾篇優秀的代碼優化文章,現在分享出來,記錄一下,以便以後再次重讀 1.反覆推敲代碼 2.寫優雅的代碼 3.寫模塊化的代碼 4.寫可讀的代碼 5.寫簡單的代碼 6.寫直觀的代碼 7.寫無懈可擊的代碼 8.正確處理錯誤 總結: 世界上有兩種“沒有bug”的代碼。一種是 ...
  • win10系統配置虛擬主機1.用記事本或Sublime Text打開httpd.confctrl + f 搜索httpd-vhosts.conf 將#Include conf/extra/httpd-vhosts.conf的#號去掉保存 2.打開extra/httpd-vhosts.conf添加如下 ...
  • Relatives Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15566 Accepted: 7900 Description Given n, a positive integer, how many positive i ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...