Django-response對象


response對象

HttpResponse的使用

HttpRequest對象由Django自動創建,HttpResponse對象則由我們手動創建。我們設計的每一個視圖都需要實例化,填充和返回一個HttpResponse,也就是函數的return的值。

傳遞字符串

from django.http import HttpResponse

response = HttpResponse("THIS IS HTTPRESPONSE")
response = HttpResponse("只能傳字符串", content_type="text/plain")

設置或刪除響應頭信息

response = HttpResponse()
response['Content-Type'] = 'text/html; charset=UTF-8'
del response['Content-Type']

HttpResponse的屬性

HttpResponse.content:響應內容,bytes類型

HttpResponse.charset:響應內容的編碼,如果沒指定,將會從content_type中解析出來。

HttpResponse.status_code:響應的狀態碼,比如404,200。

HttpResponse.reason_phrase:響應的HTTP原因短語。

JsonResponse對象

JsonResponse是HttpResponse的一個子類,是Django提供的用於創建Json編碼類型響應的快捷類。

from django.http import JsonResponse

response = JsonResponse({'jjzz': 'jjzz on the world'})
print(response.content)

b'{'jjzz': 'jjzz on the world'}'

【注意】

默認情況下,JsonResponse只能傳遞字典類型,如果要序列化非字典類型需要設置一下safe關鍵字參數,如果沒有傳遞safe,會報TypeError錯誤。


response = JsonResponse([1, 2, 3], safe=False)

與HttpResponse的區別

  • Content-Type頭部默認設置為application/json,HttpResponse的響應頭是text/html
  • 傳遞的參數通常應該為一個字典數據類型
  • 只有設置safe = False,才能序列化除字典以外的其他對象

Django shortcut functions

render()

結合一個給定的模板和一個給定的上下文字典,並返回一個渲染后的 HttpResponse 對象。

參數:

  • request: 用於生成響應的請求對象。
  • template_name:要使用的模板的完整名稱,可選的參數
  • context:添加到模板上下文的一個字典。默認是一個空字典。如果字典中的某個值是可調用的,視圖將在渲染模板之前調用它。
  • content_type:生成的文檔要使用的MIME類型。默認為 DEFAULT_CONTENT_TYPE 設置的值。默認為'text/html'
  • status:響應的狀態碼。默認為200。
  • useing: 用於加載模板的模板引擎的名稱。
# 
from django.shortcuts import render

def my_view(request):
    # 視圖的代碼寫在這里
    return render(request, 'myapp/index.html', {'foo': 'bar'})
    
# 上面方式及等同於下面的方式
from django.http import HttpResponse
from django.template import loader

def my_view(request):
    # 視圖代碼寫在這里
    t = loader.get_template('myapp/index.html')
    c = {'foo': 'bar'}
    return HttpResponse(t.render(c, request))

redirect()

參數可以是:

  • 一個模型:將調用模型的get_absolute_url() 函數
  • 一個視圖,可以帶有參數:將使用urlresolvers.reverse 來反向解析名稱
  • 一個絕對的或相對的URL,將原封不動的作為重定向的位置。

默認返回一個臨時的重定向;傳遞permanent=True 可以返回一個永久的重定向。

使用redirect() 函數

傳遞一個具體的ORM對象

將調用具體ORM對象的get_absolute_url() 方法來獲取重定向的URL:

from django.shortcuts import redirect
 
def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object)

傳遞一個視圖的名稱

def my_view(request):
    ...
    return redirect('some-view-name', foo='bar')

傳遞要重定向到的一個具體的網址

def my_view(request):
    ...
    return redirect('/some/url/')

當然也可以是一個完整的網址

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)  

擴展閱讀:

臨時重定向(響應狀態碼:302)和永久重定向(響應狀態碼:301)對普通用戶來說是沒什么區別的,它主要面向的是搜索引擎的機器人。

A頁面臨時重定向到B頁面,那搜索引擎收錄的就是A頁面。

A頁面永久重定向到B頁面,那搜索引擎收錄的就是B頁面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM