Django入门-6:视图-HttpResponse对象

25 篇文章 1 订阅
24 篇文章 0 订阅

HttpResponse对象
   
   
  1. django.http模块中定义了HttpResponse对象的API
  2. HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建

  • 不调用模板,直接返回数据
        
        
    1. #coding=utf-8
    2. from django.http import HttpResponse
    3. def index(request):
    4. return HttpResponse('你好')
  • 调用模板
         
         
    1. from django.http import HttpResponse
    2. from django.template import RequestContext, loader
    3. def detail(request, id):
    4. # return HttpResponse("DETAIL %s" % id)
    5. book = BookInfo.objects.get(pk=id)
    6. template = loader.get_template('booktest/detail.html')
    7. # context = RequestContext(request, {'book': book})
    8. context = {'book': book}
    9. return HttpResponse(template.render(context))

属性
   
   
  1. content表示返回的内容,字符串类型
  2. charset表示response采用的编码字符集,字符串类型
  3. status_code响应的HTTP响应状态码
  4. content-type:指定输出的MIME类型
方法
   
   
  1. init 使用页内容实例化HttpResponse对象
  2. write(content):以文件的方式写
  3. flush():以文件的方式输出缓存区
  4. set_cookie(key, value='', max_age=None, expires=None):设置Cookie
    1. keyvalue都是字符串类型
    2. max_age是一个整数,表示在指定秒数后过期
    3. expires是一个datetimetimedelta对象,会话将在这个指定的日期/时间过期,
    4. 注意datetimetimedelta值只有在使用PickleSerializer时才可序列化
    5. max_ageexpires二选一
    6. 如果不指定过期时间,则两个星期后过期
    •       
            
      1. from django.http import HttpResponse
      2. from datetime import *
      3. def cookieTest(request):
      4. response = HttpResponse()
      5. # 读cookie
      6. if request.COOKIES.has_key('h1'):
      7. response.write('<h1>' + request.COOKIES['h1'] + '</h1>')
      8. # 写cookie
      9. response.set_cookie('h1', '你好', 120)
      10. # 写cookie
      11. # response.set_cookie('h1', '你好', None, datetime(2016, 10, 31))
      12. return response
  • delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生
子类HttpResponseRedirect
  • 重定向,服务器端跳转
  • 构造函数的第一个参数用来指定重定向的地址
        
        
    1. views1.py
    2. from django.shortcuts import render,redirect 【简写】
    3. from django.http import HttpResponse,HttpResponseRedirect
    4. def index(request):
    5. # return HttpResponseRedirect('js/')
    6.    return redirect('js/')
    7. def index2(request,id):
    8. return HttpResponse(id)
    9. 在应用的urls.py中增加一个url对象
    10. url(r'^([0-9]+)/$', views1.index2, name='index2'),

  • 请求地址栏如图:
        
        
    1. 127.0.0.1:8000/
  • 请求结果的地址栏如图:
        
        
    1. 127.0.0.1:8000/js/
  • 推荐使用反向解析
        
        
    1. from django.core.urlresolvers import reverse
    2. def index(request):
    3. return HttpResponseRedirect(reverse('booktest:index2', args=(1,)))
子类JsonResponse
   
   
  1. 返回json数据,一般用于异步请求
  2. _init _(data)
  3. 帮助用户创建JSON编码的响应
  4. 参数data是字典对象
  5. JsonResponse的默认Content-Typeapplication/json

   
   
  1. from django.http import JsonResponse
  2. def index2(requeset):
  3. return JsonResponse({'list': 'abc'})

简写函数

render
   
   
  1. render(request, template_name[, context])
  2. 结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象
  3. request:该request用于生成response
  4. template_name:要使用的模板的完整名称
  5. context:添加到模板上下文的一个字典,视图将在渲染模板之前调用它
   
   
  1. from django.shortcuts import render
  2. def index(request):
  3. return render(request, 'booktest/index.html', {'h1': 'hello'})
重定向
   
   
  1. redirect(to)
  2. 为传递进来的参数返回HttpResponseRedirect
  3. to推荐使用反向解析
   
   
  1. from django.shortcuts import redirect
  2. from django.core.urlresolvers import reverse
  3. def index(request):
  4. return redirect(reverse('booktest:index2'))
得到对象或返回404
   
   
  1. get_object_or_404(klass, args, *kwargs)
  2. 通过模型管理器或查询集调用get()方法,如果没找到对象,不引发模型的DoesNotExist异常,
  3. 而是引发Http404异常
  4. klass:获取对象的模型类、Manager对象或QuerySet对象
  5. **kwargs:查询的参数,格式应该可以被get()和filter()接受
  6. 如果找到多个对象将引发MultipleObjectsReturned异常
   
   
  1. from django.shortcuts import *
  2. def detail(request, id):
  3. try:
  4. book = get_object_or_404(BookInfo, pk=id)
  5. except BookInfo.MultipleObjectsReturned:
  6. book = None
  7. return render(request, 'booktest/detail.html', {'book': book})
  8. settings.py中的DEBUG改为False
  9. 将请求地址输入2100查看效果
得到列表或返回404
   
   
  1. get_list_or_404(klass, args, *kwargs)
  2. klass:获取列表的一个ModelManagerQuerySet实例
  3. **kwargs:查寻的参数,格式应该可以被get()和filter()接受
     
     
  1. from django.shortcuts import *
  2. def index(request):
  3. # list = get_list_or_404(BookInfo, pk__lt=1)
  4. list = get_list_or_404(BookInfo, pk__lt=6)
  5. return render(request, 'booktest/index.html', {'list': list})
  6. settings.py中的DEBUG改为False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琦彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值