视图层是指浏览器访问的url在路由层找到了匹配关系后,django将调用相应的视图函数,视图函数将返回一个结果,该结果就是浏览器将要显示的内容。
1.django.shortcuts中的三剑客
HttpResponse、redirect、render
from django.shortcuts import render, HttpResponse, redirect
# HttpResponse
return HttpResponse('hello world')
# redirect
return redirect('https://www.baidu.com')
# render
return render(request,'.html')
# 视图函数本质上都是返回一个HttpResponse对象。
render内部原理
def ab_render(request):
temp = Template("<h1>{{ user_dict }}{{ user_dict.username }}{{ user_dict.password }}</h1>")
user_dict = Context({'user_dict':{'username':'jason','password':123}})
res = temp.render(user_dict)
return HttpResponse(res)
JsonResponse
from django.http import JsonResponse
def index(request):
my_dict = {
'user':'yyh',
'password':123,
}
return JsonResponse(my_dict)
JsonResponse类源码
class JsonResponse(HttpResponse):
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
json_dumps_params=None, **kwargs):
if safe and not isinstance(data, dict):
raise TypeError(
'In order to allow non-dict objects to be serialized set the '
'safe parameter to False.'
)
if json_dumps_params is None:
json_dumps_params = {}
kwargs.setdefault('content_type', 'application/json')
data = json.dumps(data, cls=encoder, **json_dumps_params) # ***
super(JsonResponse, self).__init__(content=data, **kwargs)
可以看到有个默认参数safe=True,如果safe为True则只能传入dict对象否则会报错,可以通过将safe参数变为False,便可传入python的其他基本数据类型。
json.dumps源码