django入門三(視圖)

来源:https://www.cnblogs.com/huashengdoujiao/archive/2018/07/25/9366229.html
-Advertisement-
Play Games

定義視圖 本質就是一個函數 視圖的參數 一個HttpRequest實例 通過正則表達式組獲取的位置參數 通過正則表達式組獲得的關鍵字參數 在應用目錄下預設有views.py文件,一般視圖都定義在這個文件中 如果處理功能過多,可以將函數定義到不同的py文件中 一個HttpRequest實例 通過正則表 ...


定義視圖 

  • 本質就是一個函數
  • 視圖的參數
    • 一個HttpRequest實例
    • 通過正則表達式組獲取的位置參數
    • 通過正則表達式組獲得的關鍵字參數
  • 在應用目錄下預設有views.py文件,一般視圖都定義在這個文件中
  • 如果處理功能過多,可以將函數定義到不同的py文件中
1 #新建views1.py
2 #coding:utf-8
3 from django.http import HttpResponse
4 def index(request):
5     return HttpResponse("hello world")
6 
7 #在urls.py中修改配置
8 from . import views1
9 url(r'^$', views1.index, name='index'),

URLCONFG  

  • 在settings.py文件中通過ROOT_URLCONF指定根級url的配置
  • urlpatterns是一個url()實例的列表
  • 一個url()對象包括:
    • 正則表達式
    • 視圖函數
    • 名稱name
  • 編寫URLconf的註意:
    • 若要從url中捕獲一個值,需要在它周圍設置一對圓括弧
    • 不需要添加一個前導的反斜杠,如應該寫作'test/',而不應該寫作'/test/'
    • 每個正則表達式前面的r表示字元串不轉義
  • 請求的url被看做是一個普通的python字元串,進行匹配時不包括get或post請求的參數及功能變數名稱  
#只匹配“/python/1/”部分
http://www.baidu.com/python/1/?i=1&p=new 
  • 正則表達式非命名組,通過位置參數傳遞給視圖  
url(r'^([0-9]+)/$', views.detail, name='detail'),
  • 正則表達式命名組,通過關鍵字參數傳遞給視圖,本例中關鍵字參數為id
url(r'^(?P<id>[0-9]+)/$', views.detail, name='detail'), 
  • 參數匹配規則:優先使用命名參數,如果沒有命名參數則使用位置參數
  • 每個捕獲的參數都作為一個普通的python字元串傳遞給視圖
  • 性能:urlpatterns中的每個正則表達式在第一次訪問它們時被編譯,這使得系統相當快

包含其他的URLCONFG

  • 在應用中創建urls.py文件,定義本應用中的urlconf,再在項目的settings中使用include()
from django.conf.urls import include, url
urlpatterns = [
    url(r'^', include('usertest.urls', namespace='usertest')),
]
  • 匹配過程:先與主URLconf匹配,成功後再用剩餘的部分與應用中的URLconf匹配
  • 使用include可以去除urlconf的冗餘
  • 參數:視圖會收到來自父URLconf、當前URLconf捕獲的所有參數
  • 在include中通過namespace定義命名空間,用於反解析

URL的反向解析

  • 如果在視圖、模板中使用硬編碼的鏈接,在urlconf發生改變時,維護是一件非常麻煩的事情
  • 解決:在做鏈接時,通過指向urlconf的名稱,動態生成鏈接地址
  • 視圖:使用django.core.urlresolvers.reverse()函數
  • 模板:使用url模板標簽

HttpReqeust對象

  • 伺服器接收到http協議的請求後,會根據報文創建HttpRequest對象
  • 視圖函數的第一個參數是HttpRequest對象
  • 在django.http模塊中定義了HttpRequest對象的API

  屬性

  • 下麵除非特別說明,屬性都是只讀的
  • path:一個字元串,表示請求的頁面的完整路徑,不包含功能變數名稱
  • method:一個字元串,表示請求使用的HTTP方法,常用值包括:'GET'、'POST'
  • encoding:一個字元串,表示提交的數據的編碼方式
    • 如果為None則表示使用瀏覽器的預設設置,一般為utf-8
    • 這個屬性是可寫的,可以通過修改它來修改訪問表單數據使用的編碼,接下來對屬性的任何訪問將使用新的encoding值
  • GET:一個類似於字典的對象,包含get請求方式的所有參數
  • POST:一個類似於字典的對象,包含post請求方式的所有參數
  • FILES:一個類似於字典的對象,包含所有的上傳文件
  • COOKIES:一個標準的Python字典,包含所有的cookie,鍵和值都為字元串
  • session:一個既可讀又可寫的類似於字典的對象,表示當前的會話,只有當Django 啟用會話的支持時

HttpResponse對象

  • 在django.http模塊中定義了HttpResponse對象的API
  • HttpRequest對象由Django自動創建,HttpResponse對象由程式員創建
  • 不調用模板,直接返回數據

  屬性

  • content:表示返回的內容,字元串類型
  • charset:表示response採用的編碼字元集,字元串類型
  • status_code:響應的HTTP響應狀態碼
  • content-type:指定輸出的MIME類型

  方法

  • init :使用頁內容實例化HttpResponse對象
  • write(content):以文件的方式寫
  • flush():以文件的方式輸出緩存區
  • set_cookie(key, value='', max_age=None, expires=None):設置Cookie
    • key、value都是字元串類型
    • max_age是一個整數,表示在指定秒數後過期
    • expires是一個datetime或timedelta對象,會話將在這個指定的日期/時間過期,註意datetime和timedelta值只有在使用PickleSerializer時才可序列化
    • max_age與expires二選一
    • 如果不指定過期時間,則兩個星期後過期

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

-Advertisement-
Play Games
更多相關文章
  • 題意 一家餐廳,第$i$天需要$r_i$塊餐巾,每天獲取餐巾有三種途徑 1、以$p$的費用買 2、以$f$的費用送到快洗部,併在$m$天後取出 3、以$s$的費用送到慢洗部,併在$n$天後取出 問滿足要求時的最小費用 Sol 一道非常不錯的網路流,應該不難看出是費用流。 首先進行拆點,把每個點早上和 ...
  • 上一篇博客Nginx配置詳解已經說過了nginx 的基本配置情況,今天來詳細講述一下nginx的location的配置原則, location是根據Uri來進行不同的定位,location可以把網站的不同部分,定位到不同的處理方式上, location的語法: location [=|~|~*|^~ ...
  • python_day_18 類: 新式類(python3x), 經典類(python2). 單繼承; 新式類經典類一樣. 多繼承: 新式類:廣度優先 類名.mro() 新式類. 經典類:深度優先. 定義一個Animal類,寫三個類:貓,狗,雞,,每個類中都有吃喝自己的方法 執行順序: ...
  • 1、什麼是This逃逸? 在構造器構造還未徹底完成前(即實例初始化階段還未完成),將自身this引用向外拋出並被其他線程複製(訪問)了該引用,可能會問到該還未被初始化的變數,甚至可能會造成更大嚴重的問題。 廢話不多說,看一下代碼 輸出結果:這說明ThisEscape還未完成實例化,構造還未徹底結束。 ...
  • 註:本文是以MASM的語法格式為基礎的,大部分內容參考《Intel彙編語言程式設計 第五版》 1、標識符 標識符是程式員自己定義的名字,用來標識變數、常量、過程或代碼標號。創建標識符時要註意: 1)標識符可以包含1~247個字元; 2)標識符大小寫不敏感(MASM預設不敏感); 3)標識符的第一個字 ...
  • 查看String的源碼可以發現它以一個char類型的數組保存字元串的,而String.length()方法返回的也是這個char數組的長度. 那麼,這個長度和"字元"長度有什麼關係呢? 在這裡就不得不引入碼點和代碼單元的概念,以下是摘抄至《Java核心技術捲一基礎知識(第十版)》中的定義: "碼點( ...
  • 實現HandlerInterceptor介面或者繼承HandlerInterceptor的子類,比如Spring 已經提供的實現了HandlerInterceptor 介面的抽象類HandlerInterceptorAdapter ,下麵講實現其介面的寫法,先看一下這個介面的三個方法. - 方法pr ...
  • Python中,主要的基本類型有:數字(int型)、字元串(string型)、列表(list型)、元祖(tuple型)、字典(direct型)、布爾值(boolean型) 1.int型 1.強轉int 2.查看類型 3.轉換進位 2.string型 1.常見的 2.可進行格式替換 3.判斷類型 4. ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...