12-视图-HttpResponse对象

HttpResponse对象

  1. 介绍

    1. 视图在接收请求并处理后,必须返回HttpResponse对象或子对象
    2. 在django.http模块中定义了HttpResponse对象的API
    3. HttpRequest对象由Django创建,HttpResponse对象由开发人员创建
    4. 运行服务器,在浏览器中浏览首页,可以在浏览器“开发者工具”中看到响应信息如下图
    5. 标号3为响应头信息,点击标号4处可以查看响应体信息
  2. 属性

    1. content:表示返回的内容
    2. charset:表示response采用的编码字符集,默认为utf-8
    3. status_code:返回的HTTP响应状态码
    4. content-type:指定返回数据的的MIME类型,默认为'text/html'
  3. 方法

    1. init:创建HttpResponse对象后完成返回内容的初始化
    2. set_cookie:设置Cookie信息
    3. write:向响应体中写数据
    4. cookie是网站以键值对格式存储在浏览器中的一段纯文本信息,用于实现用户跟踪
      1. max_age是一个整数,表示在指定秒数后过期
      2. expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期
      3. max_age与expires二选一
      4. 如果不指定过期时间,默认两个星期后过期
      set_cookie(key, value='', max_age=None, expires=None) 
      
    5. delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生
  4. 调用模板简写函数render

    1. 每次调用模板时都要执行加载、上下文、渲染三个步骤,为了简化操作,Django定义了render()函数封装了以上三个步骤的代码,定义在django.shortcuts模块中

    2. 打开booktest/views.py文件,定义视图index3如下

    from django.shortcuts import render
    ...
    def index3(request):
        return render(request, 'booktest/index3.html', {'h1': 'hello'})
    
    1. 是不是用render()函数调用模板比上面简单多了?

子类JsonResponse

  1. 介绍

    1. 在浏览器中使用javascript发起ajax请求时,返回json格式的数据,此处以jquery的get()方法为例
    2. 类JsonResponse继承自HttpResponse对象,被定义在django.http模块中
    3. 接收字典作为参数
    4. JsonResponse对象的content-type为‘application/json’
  2. 示例

    1. 在booktest/views.py文件中定义视图json1、json2,代码如下

      from django.http import JsonResponse
      ...
      def json1(request):
          return render(request,'booktest/json1.html')
      def json2(request):
          return JsonResponse({'h1':'hello','h2':'world'})
      

      在booktest/urls.py文件中配置url

      url(r'^json1/$', views.json1),
      url(r'^json2/$', views.json2),
      

      创建目录static/js/,把jquery文件拷贝到这个目录下
      jquery文件

    2. 打开test3/settings.py文件,在文件最底部,配置静态文件查找路径,并且要求开启调试

      DEBUG = True
      ...
      STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static'),
      ]
      
    3. 在templates/booktest/目录下创建json1.html,代码如下

      
      
          json
          
          
      
      
      
      

        运行服务器,在浏览器中输入如下地址
        http://127.0.0.1:8000/json1/
        点击按钮“获取json数据”后浏览如下图
        json

      • ajax代码执行过程如下

        1. 发起请求
        2. 服务器端视图执行
        3. 执行回调函数

    子类HttpResponseRedirect

    1. 介绍

      1. 当一个逻辑处理完成后,不需要向客户端呈现数据,而是转回到其它页面,如添加成功、修改成功、删除成功后显示数据列表,而数据的列表视图已经开发完成,此时不需要重新编写列表的代码,而是转到这个视图就可以,此时就需要模拟一个用户请求的效果,从一个视图转到另外一个视图,就称为重定向
      2. Django中提供了HttpResponseRedirect对象实现重定向功能,这个类继承自HttpResponse,被定义在django.http模块中,返回的状态码为302
    2. 示例

      1. 在booktest/views.py文件中定义视图red1,代码如下

      from django.http import HttpResponseRedirect
      ...

      1. 定义重定义向视图,转向首页
      def red1(request):
          return HttpResponseRedirect('/')
      
      1. 在booktest/urls.py文件中配置url

      url(r'^red1/$', views.red1),

      在地址栏中输入网址如下

      http://127.0.0.1:8000/red1/

      回车后,浏览器地址栏如下图

    3. 重定向简写函数redirect

      1. 在django.shortcuts模块中为重定向类提供了简写函数redirect
      2. 修改booktest/views.py文件中red1视图,代码如下
          from django.shortcuts import redirect
          ...
          def red1(request):
              return redirect('/')
      

    你可能感兴趣的:(12-视图-HttpResponse对象)