HttpResponse對象
- 在django.http模塊中定義了HttpResponse對象的API
- HttpRequest對象由Django自動建立,HttpResponse對象由程序員建立
- 不調用模板,直接返回數據
#coding=utf-8
from django.http import HttpResponse
def index(request):
return HttpResponse('你好')
from django.http import HttpResponse
from django.template import RequestContext, loader
def index(request):
t1 = loader.get_template('polls/index.html')
context = RequestContext(request, {'h1': 'hello'})
return HttpResponse(t1.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 import HttpResponse
from datetime import *
def index(request):
response = HttpResponse()
if request.COOKIES.has_key('h1'):
response.write('<h1>' + request.COOKIES['h1'] + '</h1>')
response.set_cookie('h1', '你好', 120)
# response.set_cookie('h1', '你好', None, datetime(2016, 10, 31))
return response
- delete_cookie(key):刪除指定的key的Cookie,若是key不存在則什麼也不發生
子類HttpResponseRedirect
- 重定向,服務器端跳轉
- 構造函數的第一個參數用來指定重定向的地址
在views1.py中
from django.http import HttpResponse,HttpResponseRedirect
def index(request):
return HttpResponseRedirect('js/')
def index2(request,id):
return HttpResponse(id)
在應用的urls.py中增長一個url對象
url(r'^([0-9]+)/$', views1.index2, name='index2'),
from django.core.urlresolvers import reverse
def index(request):
return HttpResponseRedirect(reverse('booktest:index2', args=(1,)))
子類JsonResponse
- 返回json數據,通常用於異步請求
- _init _(data)
- 幫助用戶建立JSON編碼的響應
- 參數data是字典對象
- JsonResponse的默認Content-Type爲application/json
from django.http import JsonResponse
def index2(requeset):
return JsonResponse({'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)
except BookInfo.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