• 小谈Django中的response对象


    response对象

    最常用的三个response对象

    • HttpResponse('xxx') HttpResponse对象 , 返回字符串 ;
    • render(request, '模板的路径', {}) 返回一个页面 ;
    • redirect('路径') 重定向 : 对这个路径再发出一次请求 ;

    render和redirect的本质都是HttpResponse对象 :
    render返回的是一个页面 ;
    redirect的本质就是HttpResponse对象加上一个状态码( 301 , 302 )和响应头 ;

    return redirect(url)
    
    # 上面的代码等价下面的代码
    
    ret = HttpResponse(status=301)
    ret['location'] = url
    return ret
    

    JsonResponse对象

    JsonResponse : 直接返回前端数据 , 而不是页面
    使用场景 : 项目用前后端分离时 , 后端只做逻辑 , 前端有专业前端工程师做 , 后端返回的都是数据 , 前端拿到数据再去渲染 .


    示例 :

    # views.py
    from django.http.response import JsonResponse
    
    def get_data(request):
        ret = {'name' : 'alex', 'pwd':'dsb'}
        # ret = [1, 2, 3]
        # return JsonResponse(ret, safe=false)
        return JsonResponse(ret)
        
    # 前端页面显示: {'name' : 'alex', 'pwd':'dsb'}
    
    • Response Headers 中的 Content-Type : "application/json" ; 这种类型的话 , 前端会自动进行反序列化直接拿到数据(一个字典)( 本应该 : 后端先做序列化变成普通字符串 , 再进行encode编码设置拿到字节 ; 前端拿到数据后先进行解码成普通字符串, 再进行反序列化拿到正常数据(一个字典) , 才能拿到正常数据 ) ;
    • 如果序列化的数据类型是 非字典但是可以被json序列化的 数据类型时 , 会报错 : " 非字典的数据在序列化时要指定safe=false ; "

    JsonResponse本质 : 还是HttpResponse

    示例 :

    from django.http.response import JsonResponse
    
    def get_data(request):
        ret = {'name' : 'alex', 'pwd':'dsb'}
        rerurn HttpResponse(ret)
    
    # 前端页面显示的是:  namepwd
    
    # --------------------------------------------------
    import json
    from django.http.response import JsonResponse
    
    def get_data(request):
        ret = {'name' : 'alex', 'pwd':'dsb'}
        rerurn HttpResponse(json.dumps(ret))
    
    # 前端页面显示: {'name' : 'alex', 'pwd':'dsb'}
    # 但是Content-Type : "text/html" ; charset='utf-8' ; 相当于前端拿到的还是普通字符串 , 还需要前端自己做反序列化
    
    # -------------------------------------------------------------
    
    import json
    from django.http.response import JsonResponse
    
    def get_data(request):
        ret = {'name' : 'alex', 'pwd':'dsb'}
        rerurn HttpResponse(json.dumps(ret), content-type="application/json")
    
    # 这次结果就和JsonResponse一样了 : 这个示例就说明了JsonResponse的本质 , 还是HttpResponse
    
  • 相关阅读:
    C#实现带阴历显示的日期代码
    ASP.NET实现支付宝接口功能
    网站添加手机短信功能
    ASP.NET支付宝扫码即时到账支付开发流程(序言)
    ASP.NET支付宝扫码即时到账支付开发流程(下)
    ASP.NET支付宝扫码即时到账支付开发流程(上)
    如何把自己写的程序加入到开机启动项(Windows)
    C#操作注册表
    重温SQL——行转列,列转行
    Unity Hub破解
  • 原文地址:https://www.cnblogs.com/richard_A/p/13804963.html
Copyright © 2020-2023  润新知