Django基礎2---url控制器模塊與views視圖模塊
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(r‘show_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視圖模塊