1. 程式人生 > >Django基礎2---url控制器模塊與views視圖模塊

Django基礎2---url控制器模塊與views視圖模塊

appname OS 技術分享 正則表達 什麽 url art clock pycha

url控制器:

主要是用於url的分發功能,如用戶輸入:127.0.0.1:8080/apptest

配置url才能使django正確識別用戶的輸入

未配置url報錯類型如下:

技術分享圖片

進行正確的url配置:

打開項目下的urls.py文件:

初始urls文件如下:

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


urlpatterns = [
    url(r^admin/, admin.site.urls),
]

在urlpatterns這個字典內進行你的url配置

如:

首先應該導入你的視圖函數:from appname import views

url(regex,view,kwargs),填寫路徑的正則表達式,這樣才可以匹配到輸入的url,第二個參數調用視圖內的處理函數:url()後必須加逗號用於與其他url的區別,不然django無法識別

一個基本的請求響應就是:用戶輸入url-------url控制器進行匹配------尋找相應的視圖內與之對應的處理函數

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

urlpatterns 
= [ url(r^admin/, admin.site.urls), url(rshow_time/, views.show_time), ]

隨後在views.py進行對應url處理函數的代碼,這裏處理函數盡量與路徑名稱有一些關聯性,出錯的話也好找到進行修改

視圖中的show_time()處理函數:

from django.shortcuts import render,HttpResponse

import time 
...
...
...


def show_time(request):  函數的參數必須有,接受http請求與處理都封存在參數內
    times 
= time.time() return HttpResponse(times) # 作為測試 這裏返回一個http響應

啟動這個webapp:

1.

cmd或者pycharm下的cmd:

命令:python manage.py runserver 8080 這裏的端口號不要填被占用的端口號就行

2.

pycharm右上角的運行log也可以運行當前項目的webapp

url的命名規則分為兩種:1、無命名規則 2、有命名規則

第一種:

url匹配的正則只要能夠匹配上就行 ,如 url(r‘/d+/d+‘,) 只要輸入的url有數字 則django就可以找到再到視圖中尋找處理的函數

第二種:

正則表達式進行分組:如url(r‘^article/(?P<year>(\d+))/(?P<month>\d+)‘,views.article_year_month) 命名url,函數參數必須與命名形式相同 對應的函數及參數:article_year_month(request, year, month)

url的分發功能:

這種問題的出發點就在於如果一個項目有很多web應用和大量的url,url匹配全部寫在urls.py下,出錯不易尋找,調理不清晰,所以url分發是一個很重要的一點。

特點:將與web應用對應的url放在應用下,新建urls.py,如圖黃色標註的為新建的;紅色標註的為主路由

技術分享圖片

這樣看起來條例清晰了很多,blog下的子鏈全部放在blog下的urls內:

項目主路由對應的urls內說明了分發功能該如何使用:

Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r‘^blog/‘, include(‘blog.urls‘))

用法:在主路由urls這樣修改:新增URLconf下的include模塊
from django.conf.urls import url, include

urlpatterns增加如下內容:

假如你有兩個webapp:一個是blog 一個為pay

urlpatterns = [
url(r‘^blog/‘, include(‘blog.urls‘)),

url(r‘pay/‘, include(‘pay.urls‘))

......

.......
]

然後到對應的webapp下urls內添加代碼:

"""
url分發功能,將urls子鏈分配到每一個webAPP下urls
"""

from django.conf.urls import url
from blog import views


urlpatterns = [

    # url(r‘^clock_time/‘, views.clock_time),

]

這樣的話再到瀏覽器進行訪問:url就應該這麽寫才能訪問到,因為這個子鏈已經被分配到blog下的url

技術分享圖片

views視圖模塊:

http請求產生兩個核心對象:

  http請求:HttpRequest對象

  http響應:HTTPResponse對象

所在位置:django.http

HttpRequest對象

class HttpRequest[source]
屬性

除非另有說明,否則所有屬性均應視為只讀。

HttpRequest.scheme
表示請求方案的字符串(http或https 通常)。

HttpRequest.body
原始HTTP請求主體作為字節字符串。這對於以不同於傳統HTML表單的方式處理數據很有用:二進制圖像,XML有效載荷等。為了處理傳統表單數據,請使用 HttpRequest.POST。

您也可以HttpRequest使用類似文件的界面進行閱讀。看 HttpRequest.read()。

HttpRequest.path
表示請求頁面的完整路徑的字符串,不包括方案或域。

例: "/music/bands/the_beatles/"

HttpRequest.path_info
在某些Web服務器配置下,主機名後的URL部分被分成腳本前綴部分和路徑信息部分。path_info無論使用什麽Web服務器,該屬性始終包含路徑的路徑信息部分。使用此代替path可以使代碼更容易在測試和部署服務器之間移動。

例如,如果WSGIScriptAlias你的應用程序設置為 "/minfo",則path可能是"/minfo/music/bands/the_beatles/" 和path_info會"/music/bands/the_beatles/"。

HttpRequest.method
表示請求中使用的HTTP方法的字符串。這保證是大寫的。例如:

if request.method == ‘GET‘:
do_something()
elif request.method == ‘POST‘:
do_something_else()
HttpRequest.encoding
表示當前編碼的字符串,用於解碼表單提交數據(或者None,表示使用該DEFAULT_CHARSET設置)。您可以寫入此屬性來更改訪問表單數據時使用的編碼。任何後續的屬性訪問(例如讀取GET或POST)將使用新encoding值。如果您知道表單數據不在DEFAULT_CHARSET 編碼中,這很有用。

HttpRequest.content_type
表示請求的MIME類型的字符串,從CONTENT_TYPE標頭解析 。

HttpRequest.content_params
包含在CONTENT_TYPE 標題中的鍵/值參數字典。

HttpRequest.GET
包含所有給定的HTTP GET參數的類似字典的對象。請參閱QueryDict下面的 文檔。

HttpRequest.POST
包含所有給定的HTTP POST參數的類似字典的對象,前提是請求包含表單數據。請參閱QueryDict下面的 文檔。如果您需要訪問請求中發布的原始數據或非表單數據,請HttpRequest.body改為通過屬性訪問此數據 。

有可能請求可以通過POST發送一個空POST 字典 - 例如,如果通過POST HTTP方法請求表單但不包含表單數據。因此,您不應該使用 檢查POST方法的用法; 相反,使用(見)。if request.POSTif request.method == "POST"HttpRequest.method

POST它不包含文件上傳信息。看FILES。

HttpRequest.COOKIES
包含所有Cookie的字典。鍵和值是字符串。

HttpRequest.FILES
包含所有上傳文件的類似字典的對象。每個關鍵 FILES是name從。每個值都是一個。<input type="file" name="" />FILESUploadedFile

FILES將只包含數據,如果請求方法是POST和<form>發布到請求的方法 enctype="multipart/form-data"。否則,FILES將是一個空白字典式的對象。

Django基礎2---url控制器模塊與views視圖模塊