Django學習筆記第三篇--關於響應返回

1、返回簡單類型:html

1 #一、返回簡單字符串
2 #from django.http import HttpResponse
3 return HttpResponse("return string")
4 #二、返回json
5 return HttpResponse(json.dumps(response_data),content_type="application/json")  

2、返回文件類型:django

1 #一、返回一個頁面
2 #from django.shortcuts import render
3 return render(request,"return.html")

3、返回模板類型:json

1 #一、返回模板類型
2 return render(request,"return.html",{"string":"test ok"})

4、文件下載:cookie

 1 #一、簡單流文件下載
 2 return HttpRequest(fd.read())
 3 #相關字節控制:
 4 response = HttpResponse(data, content_type='application/zip')
 5 from urllib import parse
 6 response['Content-Disposition'] = 'attachment;filename=' +parse.quote(z_name)
 7 return response
 8 #二、複雜的大型流文件下載:
 9 def file_download(request):
10     def file_iterator(file_name, chunk_size=512):
11         with open(file_name) as f:
12             while True:
13                 c = f.read(chunk_size)
14                 if c:
15                     yield c
16                 else:
17                     break
18     the_file_name = "file_name.txt"
19     response = StreamingHttpResponse(file_iterator(the_file_name))
20     response['Content-Type'] = 'application/octet-stream'
21     response['Content-Disposition'] = 'attachment;filename="{0}"'.format(the_file_name)
22     return response

5、HttpResponse的更多用法:session

1 #1
2 HttpResponse(xxx,content_type="xxx")
3 #2
4 response = HttpResponse()
5 response["age"] = 120 #響應數據部分
6 #3
7 """以文件形式處理響應數據部分"""
8 response = HttpResponse(my_data,content_type='application/vnd.ms-excel')
9 response['Content-Disposition'] = 'attachment; filename="foo.xls"'

6、HttpResponse的一些方法:app

 1 HttpResponse.__init__(content='', content_type=None, status=200, reason=None, charset=None)
 2 #使用頁面的內容(content)和content-type來實例化一個HttpResponse對象。
 3 #content 應該是一個迭代器或者字符串。若是它是一個迭代器,那麼他應該返回的是一串字符串,而且這些字符串鏈接起來造成response的內容(content)。若是不是迭代器或者字符串,那麼在其被接收的時候將轉換成字符串。
 4 #content_type是可選地經過字符集編碼完成的MIME類型,而且用於填充HTTP Content-Type頭部。若是沒有設定, 會從 DEFAULT_CONTENT_TYPE 和 DEFAULT_CHARSET 設定中提取, 做爲默認值: 「text/html; charset = utf-8「。
 5 #status 是 HTTP 響應狀態碼 。.
 6 #reason 是HTTP響應短語 若是沒有指定, 則使用默認響應短語.
 7 #charset 在response中被編碼的字符集。若是沒有給定,將會從 content_type中提取, 若是提取不成功, 那麼 DEFAULT_CHARSET 的設定將被使用.
 8 #HttpResponse.__setitem__(header, value)
 9 #由給定的首部名稱和值設定相應的報文首部。 header 和 value 都應該是字符串類型。
10 #HttpResponse.__delitem__(header)
11 #根據給定的首部名稱來刪除報文中的首部。若是對應的首部不存在將沉默地(不引起異常)失敗。不區分大小寫。
12 #HttpResponse.__getitem__(header)
13 #根據首部名稱返回其值。不區分大小寫。
14 #HttpResponse.has_header(header)
15 #經過檢查首部中是否有給定的首部名稱(不區分大小寫),來返回True 或 False 。
16 #HttpResponse.setdefault(header, value)
17 HttpResponse.write(content)
18 #此方法使HttpResponse實例是一#個相似文件的對象。
19 HttpResponse.flush()
20 #此方法使HttpResponse實例是一個相似文件的對象。
21 HttpResponse.tell()
22 此方法使HttpResponse實例是一個相似文件的對象。
23 #HttpResponse.getvalue()
24 #HttpResponse.writable()
25 #HttpResponse.writelines(lines)¶

6、響應中對session和cookie的控制:dom

HttpResponse.set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)#設置cookie

HttpResponse.set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=True)
#與set_cookie() 相似,可是在設置以前將用密鑰簽名。一般與
HttpRequest.get_signed_cookie() 
#一塊兒使用。你可使用可選的salt 參考來增長密鑰強度,但須要記住將它傳遞給對應的HttpRequest.get_signed_cookie() 調用。

HttpResponse.delete_cookie(key, path='/', domain=None)

7、重定向:編碼

1 #1
2 from django.http import HttpResponseRedirect
3 return HttpResponseRedirect("redirecturl")
4 #2
5 from django.core.urlresolvers import reverse  
6 from django.shortcuts import redirect  
7 return redirect(reverse('test.views.invoice_return_index', args=[]))

8、錯誤頁加密

1 #views.py
2 from django.shortcuts import render,render_to_response  
3 def page_not_found(request):
4     return render_to_response('404.html')
5 #settings.py
6 要加上下面哦
7 handler404 = app1.views.page_not_found #改動2
相關文章
相關標籤/搜索