render_to_response

render_to_response('index.html', locals(),context_instance=RequestContext(request))

参数顺序:(template_name, dictionary=None, context_instance=None)

在django模板系统中,有两种封装模板变量的类,一个是django.template.Context,这是最常用的,我们在使用render_to_response方法的时候传入的第二个dictionary参数,就会被这个Context类封装一次,然后传到模板当中。

另一个是django.template.RequestContext,它和Context类相比有两个不同之处。

第一个不同的是,在生成一个RequestContext变量的时候,需要传入一个HttpRequest对象作为它的第一个参数。

其次,它会增加一些自动注入模板的变量,这些变量由settings中的TEMPLATE_CONTEXT_PROCESSORS中声明的方法返回,TEMPLATE_CONTEXT_PROCESSORS中的方法都接收一个HttpRequest对象,最终return一个dict。这个dictionary里面的元素就会成为RequestContext中自动注入模板的变量。比如django.contrib.auth.context_processors.auth就会返回user、messages、perms变量

# in django/contrib/auth/context_processors.py
def auth(request):
""" ignore doc string """
def get_user():
.... return {
'user': SimpleLazyObject(get_user),
'messages': messages.get_messages(request),
'perms': lazy(lambda: PermWrapper(get_user()), PermWrapper)(),
}

有时候会用到dictionary=locals()这种操作,这是将当前域的所有局部变量都赋给dictionary

Response与HttpResponse的区别

  • HttpResponse

    # django/http/response.py
    # HttpResponse的初始化
    class HttpResponseBase(six.Iterator):
    def __init__(self, content_type=None, status=None, reason=None, charset=None): class HttpResponse(HttpResponseBase):
    def __init__(self, content=b'', *args, **kwargs):
    super(HttpResponse, self).__init__(*args, **kwargs)
    # Content is a bytestring. See the `content` property methods.
    self.content = content
    • HttpResponse对象由Django创建,常用于函数式视图
    • super()常用于调用父类的方法。
      super(HttpResponse, self).__init__(*args, **kwargs)

      即调用HttpResponse父类HttpResponseBase的__init__方法

    • 因此,HttpResponse生成格式为HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
    • 注意如果前端需要json数据类型,而data是一个字典,则需要手动把data转为json格式。HttpResponse(json.dumps(data))
  • Response

    # rest_framework/response.py
    # Response的初始化
    class Response(SimpleTemplateResponse):
    def __init__(self, data=None, status=None,
    template_name=None, headers=None,
    exception=False, content_type=None):
    • Response对象是Django REST framework框架封装的对象

    • Response会自动将传入data的数据转为json,无需手动转换。甚至可以直接Response(data=serializer.data)

    • 一般在DRF框架中类的视图中使用Response对象,类的视图要继承APIView

    • 如果要在函数式视图使用Response,需要加上@api_view装饰器,如

      from rest_framework.decorators import api_view
      
      @api_view(['GET', 'POST', ])
      def articles(request, format=None):
      data= {'articles': Article.objects.all() }
      return Response(data, template_name='articles.html')

      如果不加装饰器的话,会报错:“.accepted_renderer not set on Response”

Django中的response的更多相关文章

  1. Django中的Request和Response

    接触Django这么久了,从来没有好好学习关于Django中的Request和Response对象.借着文件上传下载的相关工作,现在总结一下也不错. 当一个页面请求过来,Django会自动创建一个Re ...

  2. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  3. Django中如何使用django-celery完成异步任务1(转)

    原文链接: http://www.weiguda.com/blog/73/ 本篇博文主要介绍在开发环境中的celery使用,请勿用于部署服务器. 许多Django应用需要执行异步任务, 以便不耽误ht ...

  4. Django中的CSRF

    CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的 ...

  5. django中怎样生成非HTML格式的内容。

    某些时候可能有这种需求.在网页中点击一个链接或者一个button希望返回一张图片.一个pdf文档.一个csv文档等而非HTML. 在diango中非常easy做到这些.django中的view用来接收 ...

  6. [Django高级]理解django中的中间件机制和执行顺序

    原文来自 Understanding Django Middlewares, 这篇文章从整体上介绍了django中中间件定义,作用,和怎么样自己写中间件 –orangleliu. 注:middlewa ...

  7. cookie和session的区别及在Django中应用

    Django中Cookie和session应用 什么是cookie? cookie是客户端浏览器上的一个文件,以键值对进行保存,类似于字典的 {'key' : 'value'} ,与服务器端没有关系, ...

  8. 简单操作django中session和cookie

    cookie 1.会话技术 2.客户端的会话技术( 数据库保存在浏览器上) 3.问题导致原因: 在web应用中,一次网络请求是从request开始,到response结束,跟以后的请求或者跟其他请求没 ...

  9. python中各个response使用

    Python django中我们经常用的response有django中的 JsonResponse, HttpResponse,还有DRF中的Response 在使用的时候,经常会不知道如何什么时候 ...

随机推荐

  1. [考试反思]1110csp-s模拟测试108:消遣

    是套废题.T1题面错了,T2细节多而暴力>部分分,T3题目错了. T1:打表 题面应该是输出差值期望而不是答案值期望. 看到题目,果断打表. 答案就是所有值差之和除2的k次方. #include ...

  2. angularjs $scope与this的区别,controller as vm有何含义?

     壹 ❀ 引 初学angularjs的同学对于$scope一定不会陌生,scope(作用域)是将view(视图)与model(模板)关联起来的桥梁,通过controller(控制器)对于model的数 ...

  3. [译]ASP.NET:WebForms vs MVC

    原文示例(VS2012): 1.  Download Simple WebForm demo - 6.7 KB 2.  Download Simple MVC Demo demo - 1.5 MB 介 ...

  4. Cypress 之 常用API

    .visit() 访问一个远程URL.>>详情参考 Cypress 之 cy.visit() cy.visit(url) cy.visit(url, options) cy.visit(o ...

  5. Java入门系列之集合LinkedList源码分析(九)

    前言 上一节我们手写实现了单链表和双链表,本节我们来看看源码是如何实现的并且对比手动实现有哪些可优化的地方. LinkedList源码分析 通过上一节我们对双链表原理的讲解,同时我们对照如下图也可知道 ...

  6. JDK1.8源码分析02之阅读源码顺序

    序言:阅读JDK源码应该从何开始,有计划,有步骤的深入学习呢? 下面就分享一篇比较好的学习源码顺序的文章,给了我们再阅读源码时,一个指导性的标志,而不会迷失方向. 很多java开发的小伙伴都会阅读jd ...

  7. .net core 中间件使用

    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; usi ...

  8. 由浅入深了解RabbitMQ

    简介 RabbitMQ是流行的开源消息队列系统.RabbitMQ是AMQP(高级消息队列协议)的标准实现.支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Actio ...

  9. 读写锁(ReadWriteLock)

    为了提高性能,Java提供了读写锁,读写锁分为读锁和写锁.多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM控制的.如果没有写锁的情况下,读是无阻塞的,在一定程度上提高了程序的执行效率. 读 ...

  10. ASP.NET Core 设置默认起始页(如default.html)

    测试页面foo.html 在Startup.cs内使用middleware 代码如下: DefaultFilesOptions defaultFilesOptions = new DefaultFil ...