django 視圖-----Response對象

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
相關文章
相關標籤/搜索