今天看了下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
[完]