zoukankan      html  css  js  c++  java
  • 小谈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
    
  • 相关阅读:
    SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
    备份还原工具—ghost
    太多的if,太多的痛苦
    C#中使用GUID
    WinForm开发中,将Excel文件导入到DataGridView中时,获取Excel中所有表格的名称。
    使用ASP调用C#写的COM+组件
    COM+ and the .NET Framework 虽是英文但比较全面
    在C#中使用COM+实现事务控制
    COM+ and the .NET Framework
    管理员ID过期,无人能够管理Domino服务器
  • 原文地址:https://www.cnblogs.com/richard_A/p/13804963.html
Copyright © 2011-2022 走看看