django 几种reponse方式

今天看了下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初始化参数如下:
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 初始化参数如下:
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参数是必传项
可以在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区别不大
"""
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调试界面
在postman访问127.0.0.1:8080,会直接返回接口的返回结果

如果在浏览器访问时 不想出现api调试界面,想直接查看返回接口的返回结果,
那么要把配置里面的 "rest_framework.renderers.BrowsableAPIRenderer" 去掉

return Response(data=data_dict, template_name='test.html')的意思是,可以返回自己写的模板页面
但要在settings里面加上"rest_framework.renderers.TemplateHTMLRenderer"
不然你加template_name参数是没有任何效果的

参考:
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

[完]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容