Django入門-6:檢視-HttpResponse物件
阿新 • • 發佈:2019-02-17
HttpResponse物件
在django.http模組中定義了HttpResponse物件的API
HttpRequest物件由Django自動建立,HttpResponse物件由程式設計師建立
- 不呼叫模板,直接返回資料
#coding=utf-8
from django.http importHttpResponse
def index(request):
returnHttpResponse('你好')
- 呼叫模板
from django.http importHttpResponse
from django.template importRequestContext, loader
def detail(request, id):
# return HttpResponse("DETAIL %s" % id)
book =BookInfo.objects.get(pk=id)
template = loader.get_template('booktest/detail.html')
# context = RequestContext(request, {'book': book})
context ={'book': book}
returnHttpResponse(template.render(context))
屬性
content:表示返回的內容,字串型別
charset:表示response採用的編碼字符集,字串型別
status_code:響應的HTTP響應狀態碼
content-type:指定輸出的MIME型別
方法
init :使用頁內容例項化HttpResponse物件
write(content):以檔案的方式寫
flush():以檔案的方式輸出快取區
set_cookie(key, value='', max_age=None, expires=None):設定Cookie
key、value都是字串型別
max_age是一個整數,表示在指定秒數後過期
expires是一個datetime或timedelta物件,會話將在這個指定的日期/時間過期,
注意datetime和timedelta值只有在使用PickleSerializer時才可序列化
max_age與expires二選一
如果不指定過期時間,則兩個星期後過期
-
-
from django.http importHttpResponse
from datetime import*
defcookieTest(request):
response =HttpResponse()
- # 讀cookie
if request.COOKIES.has_key('h1'):
response.write('<h1>'+ request.COOKIES['h1']+'</h1>')
# 寫cookie
response.set_cookie('h1','你好',120)
- # 寫cookie
# response.set_cookie('h1', '你好', None, datetime(2016, 10, 31))
return response
-
- delete_cookie(key):刪除指定的key的Cookie,如果key不存在則什麼也不發生
子類HttpResponseRedirect
- 重定向,伺服器端跳轉
- 建構函式的第一個引數用來指定重定向的地址
在views1.py中
from django.shortcuts import render,redirect 【簡寫】
from django.http importHttpResponse,HttpResponseRedirect
def index(request):
# returnHttpResponseRedirect('js/')
returnredirect('js/')
def index2(request,id):
returnHttpResponse(id)
在應用的urls.py中增加一個url物件
url(r'^([0-9]+)/$', views1.index2, name='index2'),
- 請求位址列如圖:
127.0.0.1:8000/
- 請求結果的地址欄如圖:
127.0.0.1:8000/js/
- 推薦使用反向解析
from django.core.urlresolvers import reverse
def index(request):
returnHttpResponseRedirect(reverse('booktest:index2', args=(1,)))
子類JsonResponse
返回json資料,一般用於非同步請求
_init _(data)
幫助使用者建立JSON編碼的響應
引數data是字典物件
JsonResponse的預設Content-Type為application/json
from django.http importJsonResponse
def index2(requeset):
returnJsonResponse({'list':'abc'})
簡寫函式
render
render(request, template_name[, context])
結合一個給定的模板和一個給定的上下文字典,並返回一個渲染後的HttpResponse物件
request:該request用於生成response
template_name:要使用的模板的完整名稱
context:新增到模板上下文的一個字典,檢視將在渲染模板之前呼叫它
from django.shortcuts import render
def index(request):
return render(request,'booktest/index.html',{'h1':'hello'})
重定向
redirect(to)
為傳遞進來的引數返回HttpResponseRedirect
to推薦使用反向解析
from django.shortcuts import redirect
from django.core.urlresolvers import reverse
def index(request):
return redirect(reverse('booktest:index2'))
得到物件或返回404
get_object_or_404(klass, args,*kwargs)
通過模型管理器或查詢集呼叫get()方法,如果沒找到物件,不引發模型的DoesNotExist異常,
而是引發Http404異常
klass:獲取物件的模型類、Manager物件或QuerySet物件
**kwargs:查詢的引數,格式應該可以被get()和filter()接受
如果找到多個物件將引發MultipleObjectsReturned異常
from django.shortcuts import*
def detail(request, id):
try:
book =get_object_or_404(BookInfo, pk=id)
exceptBookInfo.MultipleObjectsReturned:
book =None
return render(request,'booktest/detail.html',{'book': book})
將settings.py中的DEBUG改為False
將請求地址輸入2和100檢視效果
得到列表或返回404
get_list_or_404(klass, args,*kwargs)
klass:獲取列表的一個Model、Manager或QuerySet例項
**kwargs:查尋的引數,格式應該可以被get()和filter()接受
from django.shortcuts import*
def index(request):
# list = get_list_or_404(BookInfo, pk__lt=1)
list = get_list_or_404(BookInfo, pk__lt=6)
return render(request,'booktest/index.html',{'list': list})
將settings.py中的DEBUG改為False