Django views.py視圖文件
一. 創建views.py文件,在工程文件夾根目錄創建views.py視圖文件,其實任意文件名都可以,使用views是為了遵循傳統。
注:所有的views函數都需要以request對象作為第一個參數,request代表客戶端瀏覽器向服務器請求的一個信息字符串,views中的函數需要接收這個字符串才行對他進行處理。
二.HttpResponse函數:
在views.py里面,我們可以使用HttpResponse直接給頁面返回一個字符串。
調用HttpResponse直接給頁面返回一個字符串。
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello World!")
三.調用render函數返回一個網頁:
render 英文是提供的意思:
render 是一個主要用來返回一個html模板頁面的函數。
render(request,template_name,context=None,content_type=None,status=None,
using=None)
此方法的作用是:接收到一個請求,結合一個給定的模板和一個給定的context上下文字典,並返回一個渲染后的 HttpResponse 對象。通俗的講就是接收到一個請求,然后指定好一個html模板,並把上下文context字典中的內容, 加載進templates_name中指定的模板文件, 並通過瀏覽器渲染呈現.
參數詳解:
request: 是一個固定參數, 就是指通過接受到的通過wsgi處理過的客戶端瀏覽器請求數
據。
template_name:templates中定義的HTML文件, 要注意路徑比如'templates\polls\index.html', 參數就要寫‘polls\index.html’
context: 要傳入上下文中用於渲染呈現的數據, 默認是一個字典格式,鍵即下文html模板中需要被替換的元素,鍵值即在views視圖函數中需要傳到html模板中變量需要替換成的值。
content_type: 生成的文檔要使用的MIME 類型。默認為DEFAULT_CONTENT_TYPE 設置的值。
status: http的響應代碼,默認是200.
using: 用於加載模板使用的模板引擎的名稱。
常見的MIME類型(通用型):
超文本標記語言文本 .html text/html
xml文檔 .xml text/xml
XHTML文檔 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文檔 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG圖像 .png image/png
GIF圖形 .gif image/gif
JPEG圖形 .jpeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二進制數據 application/octet-stream
注:使用默認就能返回所有類型。
from django.shortcuts import render
def index(request):
context={} #首先初始化這個字典
context['hello']= "Hello World!" #context中的hello鍵代表Hello World!字
符串
return render(request, 'index.html', context)
而在index.html文件中:
參數hello需要用雙括號括起來代表需要替換的字符:
如圖中的{{hello}}
而在views視圖文件中的context字典則代表了上下文需要替換的文字和字符串,即context字典元素中的鍵值即末班中需要替換的變量。即context 字典中元素的鍵值 "hello" 對應了模板中的變量 "{{ hello }}"。
這樣通過render函數我們就完成了使用模板來輸出數據,從而實現數據與視圖分離。
四.調用redirect 函數重定向
redirect:英文意思改變線路,改變方向,在我們這里是重定向的意思。
參數可以是:
一個模型:將調用模型的get_absolute_url() 函數
一個視圖,可以帶有參數:將使用urlresolvers.reverse 來反向解析名稱
一個絕對的或相對的URL,將原封不動的作為重定向的位置,即返回一個模板位置。
默認返回一個臨時的重定向;傳遞permanent=True 可以返回一個永久的重定向。
示例:
你可以用多種方式使用redirect() 函數。
傳遞一個對象:
將調用get_absolute_url() 方法來獲取重定向的URL:
from django.shortcuts import redirect
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object)
傳遞一個視圖的名稱:
可以帶有位置參數和關鍵字參數;將使用reverse() 方法反向解析URL:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
傳遞要重定向的一個硬編碼的URL
def my_view(request):
...
return redirect('/some/url/')
也可以是一個完整的URL,可以是返回外部的網站,這里測試返回百度網站:
from django.shortcuts import render,redirect
def blog(request):
return redirect("http://www.baidu.com")
def my_view(request):
...
return redirect('http://example.com/')
默認情況下,redirect() 返回一個臨時重定向。以上所有的形式都接收一個permanent 參數;如果設置為True,將返回一個永久的重定向:
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object, permanent=True)