django之视图层

视图层是指浏览器访问的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源码

上一篇:Error Code: 1175. You are using safe update


下一篇:MYSQL的安全模式:sql_safe_updates介绍