今天看了下django-restful 里面的response,順便也把 django response 整理一下
django response
1缘圈、from django.http import HttpResponse
from django.http import HttpResponse
def index(request):
data_str = '這是測試文本'
return HttpResponse(content=data_str)
"""
注意,
這里的 content 只能是字符串脖咐,
class HttpResonse 繼承于 class HttpResponseBase
class HttpResponseBase初始化參數(shù)如下:
def __init__(content_type=None, status=None, reason=None, charset=None):
"""
2、from django.http import JsonResponse
from django.http import JsonResponse
def index(request):
data_dict = {
'message': '這是測試文本'
}
return JsonResponse(data=data_dict)
"""
注意,
這里的 data 默認只能是 dict 類型黔龟。
class JsonResponse cl繼承于 class HttpResonse
class JsonResponse 初始化參數(shù)如下:
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,json_dumps_params=None, **kwargs):
data的類型只能是dict,list
如果data想為list類型滥玷,則safe必須為False
"""
3氏身、django.http 中的其他reponse類
from django.http import StreamingHttpResponse
from django.http import FileResponse
from django.http import HttpResponseRedirectBase
from django.http import HttpResponseRedirect
from django.http import HttpResponsePermanentRedirect
from django.http import HttpResponseNotModified
from django.http import HttpResponseBadRequest
from django.http import HttpResponseNotFound
from django.http import HttpResponseForbidden
from django.http import HttpResponseNotAllowed
from django.http import HttpResponseGone
from django.http import HttpResponseServerError
from django.http import Http404
4、from django.template import SimpleTemplateResponse
from django.template import SimpleTemplateResponse
def index(request):
data_dict = {'message': '這是測試文本'}
return SimpleTemplateResponse('test.html', data_dict)
"""
注意惑畴,
這里的 SimpleTemplateResponse里面是沒有request對象的蛋欣,簡單說就是,在test.html中是不可以通過模板語法使用request對象
這里一定要配置好 templates 的路徑是正確的
"""
5如贷、from django.http import TemplateResponse
from django.template import TemplateResponse
def index(request):
data_dict = {'message': '這是測試文本'}
return TemplateResponse(request, 'test.html', data_dict)
"""
注意陷虎,
這里的 TemplateResponse request 和 template參數(shù)是必傳項
可以在html頁面直接使用reqeust對象
"""
6到踏、from django.shortcuts import render
from django.shortcuts import render
def index(request):
data_dict = {'message': '這是測試文本'}
return render(request, 'test.html', data_dict)
"""
注意,
shortcuts的意思是‘快捷方式’
因此尚猿,django為了方便我們使用窝稿,提供了def render(): 方便我們使用
def render(request, template_name, context=None, content_type=None, status=None, using=None):
講真的,我沒感覺方便在什么地方凿掂,和直接使用class區(qū)別不大
"""
django-restful response
1伴榔、from rest_framework.response import Response
from rest_framework.response import Response
def index(request):
data_dict = {'message': '這是測試文本'}
return Response(data=data_dict)
# return Response(data=data_dict, template_name='test.html')
"""
注意,
這里涉及到settings的配置
resetful默認配置如下:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer'
]
}
"""
在瀏覽器訪問127.0.0.1:8080庄萎,可以直接進入到restful 提供的api調(diào)試界面
在postman訪問127.0.0.1:8080踪少,會直接返回接口的返回結(jié)果
如果在瀏覽器訪問時 不想出現(xiàn)api調(diào)試界面,想直接查看返回接口的返回結(jié)果糠涛,
那么要把配置里面的 "rest_framework.renderers.BrowsableAPIRenderer" 去掉
return Response(data=data_dict, template_name='test.html')的意思是援奢,可以返回自己寫的模板頁面
但要在settings里面加上"rest_framework.renderers.TemplateHTMLRenderer"
不然你加template_name參數(shù)是沒有任何效果的
參考:
django:https://docs.djangoproject.com/zh-hans/2.2/ref/request-response/#httpresponse-objects
django-resetful: https://www.django-rest-framework.org/api-guide/renderers/
other blogs: https://www.cnblogs.com/xibuhaohao/p/10192351.html
[完]