程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django-視圖

編輯:Python

如需了完整內容請訪問:https://www.emperinter.info/2022/05/31/django-view/

視圖

概述

  • 作用:
    • 視圖接受web請求,並響應Web請求
  • 本質:
    • 視圖就是 一個Python中的函數
  • 響應內容:
    • 網頁
      • 重定向
      • 錯誤視圖
        • 404:url找不到
        • 500: 服務器內部錯誤
    • JSON數據

URL 配置

配置流程

  • settings.py中指定根級URL配置文件:ROOT_URLCONF = 'project.urls',默認實現了。
  • urlpatterns:
    • 一個url實例的對象
    • url對象
      • 正則表達式
      • 視圖名稱
      • 名稱(用來反向解析的)
  • url匹配正則的注意事項:
    • 如果想要從url中獲取一個值,需要對正則加小括號
    • 匹配正確,前方不需要加小斜槓/,一般在最後加
    • 正則前需要加r表示字符串轉義

引入其它url配置

  • 一般在應用中創建urls.py文件,定義本應用的url配置,在工程urls.py文件中使用include()方法: url(r'^', include('myApp.urls',namespace='myApp')),

匹配過程

  • 工程url->應用url->視圖

URL的反向解析(代理):

  • 概述
    • 如果在視圖/模板中使用了硬編碼的連接,在url配置發生改變時,動態生成鏈接的地址。
  • 解決思路
    • 在使用鏈接時,通過url配置的名稱,動態生成url地址。
  • 作用
    • 使用url模板的時候

視圖函數

定義視圖:

  • 本質:一個函數
  • 視圖參數:
    • request 一個HttpRequest的實例
    • 通過url正則表達式獲取的參數
  • 位置:
    • 一般在views.py中定義

錯誤視圖

  • 404視圖
    • 找不到網頁(url匹配不成功)時返回。
    • 可以自己定義。
      • templates下定義404.html
        • request_path:導致出錯的網址。
      • 配置settings.py
        • DEBUG 如果為True 永遠會調用404.html頁面
        • ALLOWED_HOSTS = [*]
  • 500視圖
    • 在視圖代碼中出現錯誤(服務器代碼)。
  • 400視圖
    • 錯誤是客戶的操作。

HttpRequest對象

概念

  • 接收HTTP請求後,會根據報文創建HttpRequest對象
  • 視圖的第一個參數就是HttpRequest對象
  • Djano對象創建的,之後調用試圖傳遞給視圖

屬性

  • path
    • 請求的完整路徑(不包括域名和端口)
  • method
    • 表示請求的方式,常用的有GET、POST
  • encoding
    • 表示浏覽器提交的數據的編碼方式,一般為utf-8
  • GET
    • 類似字典的對象,包含了get請求的所有參數
  • POST
    • 類似字典的對象,包含了post請求的所有參數
  • FILES
    • 類似字典的對象,包含了所有上傳的文件。
  • COOKIES
    • 字典,包含所有的cookie
  • session
    • 類似字典的對象,表示當前會話

方法

  • is_ajax()
    • 如果是XMLHttpRequest發起的,返回True

QueryDict對象

  • request對象中的GET、POST對象都屬於QueryDict對象
  • 方法
    • get()
      • 作用:根據鍵獲取值
      • 只能獲取一個值
      • www.baidu.com/abc?a=1&b=2&c=3
    • getlist()
      • 將鍵的值以列表形式返回
      • 可以獲取多個值
      • www.baidu.com/abc?a=1&a=2&c=3 (注意有兩個a)

GET屬性

# 獲取get傳遞的數據 
def get1(request):
a = request.GET.get("a")
b = request.GET["b"]
c = request.GET.get("c")
return HttpResponse(a + " " + b + " " + c)
def get2(request):
a = request.GET.getlist('a')
a1 = a[0]
a2 = a[1]
b = request.GET.get('c')
return HttpResponse(a1 + " " + a2 + " " + b)

POST屬性

  • 使用表單模擬提交post請求
  • 關閉CSRF:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
  • test case
def showregister(request):
name = request.POST.get("username")
gender = request.POST.get("gender")
age = request.POST.get("age")
hobby = request.POST.getlist("hobby") # checkbox 
info = str("name:\t" + name + "\tgender:" +gender + "\tage:" + age + "\thobby"+ str(hobby))
print(info)
return HttpResponse(info)

HttpResponse對象

如需了解更多請訪問:https://www.emperinter.info/2022/05/31/django-view/


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved