日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django视图(一)

發(fā)布時間:2024/4/11 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django视图(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Django視圖(一)

文章目錄

  • Django視圖(一)
    • 一、視圖
      • 1.視圖簡介
      • 2.視圖的功能
      • 3.使用視圖的過程
      • 4.內(nèi)置錯誤視圖
    • 二、URLconf
      • 1.配置
      • 2.語法
      • 3.獲取值
    • 三、HttpReqeust對象
      • 1.屬性
      • 2.示例

一、視圖

1.視圖簡介

  • 視圖就是python中的函數(shù),視圖一般被定義在"應(yīng)用/views.py"文件中
  • 視圖必須返回一個HttpResponse對象或子對象作為響應(yīng)。響應(yīng)可以是一張網(wǎng)頁的HTML內(nèi)容,一個重定向,一個404錯誤等。

視圖的第一個參數(shù)必須為HttpRequest實例,還可能包含下參數(shù)如:

  • 通過正則表達(dá)式組獲得的關(guān)鍵字參數(shù)。
  • 通過正則表達(dá)式組獲取的位置參數(shù)。

2.視圖的功能

視圖負(fù)責(zé)接受Web請求HttpRequest,進(jìn)行邏輯處理,返回Web響應(yīng)HttpResponse給請求者。

示例:

  • 1) 創(chuàng)建項目test3。
django-admin startproject test3

  • 2) 進(jìn)入項目目錄,創(chuàng)建應(yīng)用booktest。
cd test3 python manage.py startapp booktest

  • 3) 在test3/settings.py中INSTALLED_APPS項安裝應(yīng)用
  • 4) 在test3/settings.py中DATABASES項配置使用MySQL數(shù)據(jù)庫test2,數(shù)據(jù)庫在第二部分已經(jīng)創(chuàng)建。
  • 5) 在test3/settings.py中TEMPLATES項配置模板查找路徑。
  • 6)創(chuàng)建模板目錄結(jié)構(gòu)如下。

3.使用視圖的過程

視圖就是一個python函數(shù),被定義在"應(yīng)用/views.py"文件中。 使用視圖時需要進(jìn)行兩方面操作,兩個操作不分先后。

  • 1)在"應(yīng)用/views.py"中定義視圖。
    request參數(shù)必須有。是一個HttpRequest類型的對象。參數(shù)名可以變化,
    但不要更改。
在booktest/views.py中定義視圖函數(shù)index:def index(request):return HttpResponse("視圖函數(shù)index")
  • 2)配置URLconf,將視圖函數(shù)和url對應(yīng)起來。

url配置的過程
1)在項目的urls文件中包含具體應(yīng)用的urls文件,在具體應(yīng)用的urls文件中包含具體url和視圖的對應(yīng)關(guān)系。
2)url配置項是定義在一個名叫urlpatterns的列表中,其中的每一個元素就是一個配置項,每一個配置項都調(diào)用url函數(shù)。

在test3/urls.py中編輯加入如下代碼:

from django.conf.urls import include, url from django.contrib import adminurlpatterns = [url(r'^admin/', include(admin.site.urls)),url(r'^', include('booktest.urls')), #這句代碼是新加入的,包含booktest應(yīng)用中的urls文件 ]

在booktest目錄下創(chuàng)建urls.py文件并編輯其內(nèi)容如下:

from django.conf.urls import url #導(dǎo)入url函數(shù)from booktest import views #導(dǎo)入視圖模塊urlpatterns = [url(r'^$', views.index), #建立url和views.index視圖函數(shù)的關(guān)聯(lián) ]
  • 啟動服務(wù)器

啟動服務(wù)器,并通過瀏覽器訪問 http://127.0.0.1:8000, 頁面顯示如下:

4.內(nèi)置錯誤視圖

  • Django內(nèi)置處理HTTP錯誤的視圖,主要錯誤及視圖包括:
  • 404錯誤:page not found視圖
  • 500錯誤:server error視圖
    如果想看到錯誤視圖而不是調(diào)試信息,需要修改test3/setting.py文件的DEBUG項。
DEBUG = False ALLOWED_HOSTS = ['*', ]
  • 404錯誤及視圖

將請求地址進(jìn)行url匹配后,沒有找到匹配的正則表達(dá)式,則自動調(diào)用404視圖,這個視圖會調(diào)用404.html的模板進(jìn)行渲染,如果要顯示自定義的頁面,則需要的templates目錄下面自定義一個404.html文件。視圖傳遞變量request_path給模板,表示導(dǎo)致錯誤的URL。

  • a)url沒有配置
  • b)url配置錯誤
  • 1)在templates中創(chuàng)建404.html。
  • 2)定義代碼如下:
<html> <head><title></title> </head> <body> 找不到了 <hr/> {{request_path}} </body> </html>
  • 3)在瀏覽器中輸入如下網(wǎng)址:
http://127.0.0.1:8000/test/
  • 4)運行效果如下圖:
  • 500錯誤及視圖

在視圖中代碼運行報錯會發(fā)生500錯誤,調(diào)用內(nèi)置錯誤視圖(和404錯誤原理一致),使用templates/500.html模板渲染。

  • 視圖處理過程如下圖:

二、URLconf

用戶通過在瀏覽器的地址欄中輸入網(wǎng)址請求網(wǎng)站,對于Django開發(fā)的網(wǎng)站,由哪一個視圖進(jìn)行處理請求,是由url匹配找到的。

1.配置

  • 1)在test3/settings.py中通過ROOT_URLCONF指定url配置,默認(rèn)已經(jīng)有此配置。
  • 2)打開test3/urls.py可以看到默認(rèn)配置。

    注意點:

在test3/urls.py中進(jìn)行包含配置,在各自應(yīng)用中創(chuàng)建具體配置。
定義urlpatterns列表,存儲url()對象,這個名稱是固定的。
urlpatterns中的每個正則表達(dá)式在第一次訪問它們時被編譯,這使得運行很快。

2.語法

url()對象,被定義在django.conf.urls包中,有兩種語法結(jié)構(gòu):

  • 語法一:包含,一般在自定義應(yīng)用中創(chuàng)建一個urls.py來定義url。

這種語法用于test3/urls.py中,目的是將應(yīng)用的urls配置到應(yīng)用內(nèi)部,數(shù)據(jù)更清晰并且易于維護(hù)。

url(正則,include('應(yīng)用.urls'))
  • 1)如示例在test3/urls.py文件,包含booktest中的urls。
url(r'^',include('booktest.urls')),

  • 如示例在booktest目錄下創(chuàng)建urls.py文件。
  • 語法二:定義,指定URL和視圖函數(shù)的對應(yīng)關(guān)系。

在應(yīng)用內(nèi)部創(chuàng)建urls.py文件,指定請求地址與視圖的對應(yīng)關(guān)系。

url(正則,'視圖函數(shù)名稱')
  • 1)如示例在booktest/urls.py中創(chuàng)建首頁的url,代碼如下
from django.conf.urls import url from booktest import views urlpatterns=[url(r'^$',views.index), ]
  • 2)如示例在booktest/views.py中創(chuàng)建視圖index
from django.shortcuts import render from django.http import HttpResponsedef index(request):return HttpResponse("視圖函數(shù)index")

說明1:正則部分推薦使用r,表示字符串不轉(zhuǎn)義,這樣在正則表達(dá)式中使用\只寫一個就可以。 說明2:不能在開始加反斜杠,推薦在結(jié)束加反斜杠。

正確:index/ 正確:index 錯誤:/index 錯誤:/index/

3.獲取值

請求的url被看做是一個普通的python字符串,進(jìn)行匹配時不包括域名、get或post參數(shù)。 如請求地址如下:

http://127.0.0.1:8000/delete1/?a=10
  • 1)去除掉域名和參數(shù)部分,并將最前面的/去除后,只剩下如下部分與正則匹配。
delete1/
  • 2)打開booktest/urls.py文件,定義與這個地址匹配的url如下
url(r'^delete\d+/$',views.show_arg),

  • 3)在booktest/views.py中創(chuàng)建視圖show_arg。
def show_arg(request):return HttpResponse('show_arg')
  • 4)啟動服務(wù)器,輸入上面的網(wǎng)址,瀏覽器中效果如下圖。

    可以在匹配過程中從url中捕獲參數(shù),每個捕獲的參數(shù)都作為一個普通的python字符串傳遞給視圖。

獲取值需要在正則表達(dá)式中使用小括號,分為兩種方式:

  • 位置參數(shù)
  • 關(guān)鍵字參數(shù)

注意:兩種參數(shù)的方式不要混合使用,在一個正則表達(dá)式中只能使用一種參數(shù)方式。

  • 方式一:位置參數(shù)

直接使用小括號,通過位置參數(shù)傳遞給視圖。

  • 1)為了提取參數(shù),修改上面的正則表達(dá)式如下:
url(r'^delete(\d+)/$',views.show_arg),
  • 2)修改視圖show_arg如下:

注意:參數(shù)的名字是任意的如a1、b8,盡量做到見名知意。

def show_arg(request,id):return HttpResponse('show arg %s'%id)
  • 3)刷新瀏覽器頁面,效果如下圖:
  • 4)在地址欄輸入如下地址:
http://127.0.0.1:8000/2/?a=10
  • 5)瀏覽器頁面效果如下圖
  • 方式二:關(guān)鍵字參數(shù)

在正則表達(dá)式部分為組命名。

  • 1)修改正則表達(dá)式如下:

其中?P部分表示為這個參數(shù)定義的名稱為id,可以是其它名稱,起名做到見名知意。

url(r'^delete(?P<id1>\d+)/$',views.show_arg),
  • 2)修改視圖show_arg如下

注意:視圖show_arg此時必須要有一個參數(shù)名為id1,否則報錯。

def show_arg(request,id1):return HttpResponse('show %s'%id1)
  • 3)刷新瀏覽器頁面,效果如下圖

三、HttpReqeust對象

服務(wù)器接收到http協(xié)議的請求后,會根據(jù)報文創(chuàng)建HttpRequest對象,這個對象不需要我們創(chuàng)建,直接使用服務(wù)器構(gòu)造好的對象就可以。視圖的第一個參數(shù)必須是HttpRequest對象,在django.http模塊中定義了HttpRequest對象的API。

1.屬性

下面除非特別說明,屬性都是只讀的。

  • path:一個字符串,表示請求的頁面的完整路徑,不包含域名和參數(shù)部分。
  • method:一個字符串,表示請求使用的HTTP方法,

常用值包括:'GET'、'POST'。在瀏覽器中給出地址發(fā)出請求采用get方式,如超鏈接。
在瀏覽器中點擊表單的提交按鈕發(fā)起請求,如果表單的method設(shè)置為post則為post請求。

  • encoding:一個字符串,表示提交的數(shù)據(jù)的編碼方式。

如果為None則表示使用瀏覽器的默認(rèn)設(shè)置,一般為utf-8。
這個屬性是可寫的,可以通過修改它來修改訪問表單數(shù)據(jù)使用的編碼,接下來對屬性的任何訪問將使用新的encoding值。

  • GET:QueryDict類型對象,類似于字典,包含get請求方式的所有參數(shù)。
  • POST:QueryDict類型對象,類似于字典,包含post請求方式的所有參數(shù)。
  • FILES:一個類似于字典的對象,包含所有的上傳文件。
  • COOKIES:一個標(biāo)準(zhǔn)的Python字典,包含所有的cookie,鍵和值都為字符串。
  • session:一個既可讀又可寫的類似于字典的對象,表示當(dāng)前的會話,只有當(dāng)Django 啟用會話的支持時才可用

cookies和session都是服務(wù)器和瀏覽器用來保持登陸狀態(tài)的手段

運行服務(wù)器,在瀏覽器中瀏覽首頁,可以在瀏覽器“開發(fā)者工具”中看到請求信息如下圖:

2.示例

接下來演示屬性path、method、encoding

  • path、encoding
  • 1)打開booktest/views.py文件,代碼如下:
def index(request):str='%s,%s'%(request.path,request.encoding)return render(request, 'booktest/index.html', {'str':str})
  • 2)在templates/booktest/下創(chuàng)建index.html文件,代碼如下:
<html> <head><title>首頁</title> </head> <body>- request對象的path,encoding屬性:<br/> {{ str }} <br/> </body> </html>
  • 3)打開瀏覽器請求,運行效果如下圖:
  • 4)以chrome瀏覽器為例,設(shè)置編碼如下圖,默認(rèn)為utf-8編碼。
  • method
  • 1)打開booktest/views.py文件,編寫視圖method_show,代碼如下:
def method_show(request):return HttpResponse(request.method)
  • 2)打開booktest/urls.py文件,新增配置如下:
url(r'^method_show/$', views.method_show),
  • 3)修改templates/booktest/下創(chuàng)建index.html文件,添加代碼如下:
<html> <head><title>首頁</title> </head> <body> ... ... 2.request對象的method屬性:<br/> <a href='/method_show/'>get方式</a><br/> <form method="post" action="/method_show/"><input type="submit" value="post方式"> </form> <br/> </body> </html>
  • 4)打開瀏覽器,輸入如下網(wǎng)址:
http://127.0.0.1:8000/
  • 5)瀏覽效果如下圖:
  • 6)點擊鏈接,轉(zhuǎn)到method_show,瀏覽效果如下圖:

  • 回到method_test頁面,點擊按鈕,轉(zhuǎn)到method_post,瀏覽效果如下圖,報錯了。
  • 8)打開test3/settings.py文件,將MIDDLEWARE_CLASSES項的csrf注釋。
  • 9)回瀏覽器刷新

    未完待續(xù)…

總結(jié)

以上是生活随笔為你收集整理的Django视图(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。