3 View - Response对象

阅读目录

回到顶部

1. HttpResponse对象:返回数据

from django.http import HttpResponse
  • 在django.http模块中定义了HttpResponse对象的API
  • HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建
  • 不调用模板,直接返回数据
#coding=utf-8
from django.http import HttpResponse

def index(request):
    return HttpResponse(‘你好‘)
  • 调用模板

from django.http import HttpResponse
from django.template import RequestContext, loader

def index(request):
    t1 = loader.get_template(‘polls/index.html‘)
    context = RequestContext(request, {‘h1‘: ‘hello‘})
    return HttpResponse(t1.render(context))

属性

  • content:表示返回的内容,字符串类型
  • charset:表示response采用的编码字符集,字符串类型
  • status_code:响应的HTTP响应状态码
  • content-type:指定输出的MIME类型

方法

  • init :使用页内容实例化HttpResponse对象
  • write(content):以文件的方式写
  • flush():以文件的方式输出缓存区
  • set_cookie(key, value=‘‘, max_age=None, expires=None):设置Cookie
    • key、value都是字符串类型
    • max_age是一个整数,表示在指定秒数后过期
    • expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime和timedelta值只有在使用PickleSerializer时才可序列化
    • max_age与expires二选一
    • 如果不指定过期时间,则两个星期后过期

from django.http import HttpResponse
from datetime import *

def index(request):
    response = HttpResponse()
    if request.COOKIES.has_key(‘h1‘):
        response.write(‘<h1>‘ + request.COOKIES[‘h1‘] + ‘</h1>‘)
    response.set_cookie(‘h1‘, ‘你好‘, 120)
    # response.set_cookie(‘h1‘, ‘你好‘, None, datetime(2016, 10, 31))
    return response

  • delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生

回到顶部

2.Cookie

浏览器存储的一段纯文本信息,键值对格式保存 的

服务器端设置的,response传递到客户端的

再次访问的时候放到request.head发送到服务器端

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。
客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

 Cookie的不可跨域名性

很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?

答案是否定的。Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie

(1)服务器设置cookie,通过response传递到浏览器

  (2)再次访问服务端,放在request传递过去

  (3)服务端接受cookie

回到顶部

2.子类HttpResponseRedirect:重定向

  • 重定向,服务器端跳转
  • 构造函数的第一个参数用来指定重定向的地址

在views1.py中
from django.http import HttpResponse,HttpResponseRedirect
def index(request):
    return HttpResponseRedirect(‘js/‘)
def index2(request,id):
    return HttpResponse(id)


在应用的urls.py中增加一个url对象
url(r‘^([0-9]+)/$‘, views1.index2, name=‘index2‘),
  • 请求地址栏如图:

  • 请求结果的地址栏如图:

  • 推荐使用反向解析
from django.core.urlresolvers import reverse

def index(request):
    return HttpResponseRedirect(reverse(‘booktest:index2‘, args=(1,)))

回到顶部

3.子类JsonResponse

  • 返回json数据,一般用于异步请求
  • _init _(data)
  • 帮助用户创建JSON编码的响应
  • 参数data是字典对象
  • JsonResponse的默认Content-Type为application/json
from django.http import JsonResponse

def index2(requeset):
    return JsonResponse({‘list‘: ‘abc‘})

回到顶部

4.简写函数:render,redirect

render

  • render(request, template_name[, context])
  • 结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的HttpResponse对象
  • request:该request用于生成response
  • template_name:要使用的模板的完整名称
  • context:添加到模板上下文的一个字典,视图将在渲染模板之前调用它
from django.shortcuts import render

def index(request):
    return render(request, ‘booktest/index.html‘, {‘h1‘: ‘hello‘})

重定向

  • redirect(to)
  • 为传递进来的参数返回HttpResponseRedirect
  • to推荐使用反向解析
from django.shortcuts import redirect
from django.core.urlresolvers import reverse

def index(request):
    return redirect(reverse(‘booktest:index2‘))

得到对象或返回404

  • get_object_or_404(klass, args, *kwargs)
  • 通过模型管理器或查询集调用get()方法,如果没找到对象,不引发模型的DoesNotExist异常,而是引发Http404异常
  • klass:获取对象的模型类、Manager对象或QuerySet对象
  • **kwargs:查询的参数,格式应该可以被get()和filter()接受
  • 如果找到多个对象将引发MultipleObjectsReturned异常

from django.shortcuts import *

def detail(request, id):
    try:
        book = get_object_or_404(BookInfo, pk=id)
    except BookInfo.MultipleObjectsReturned:
        book = None
    return render(request, ‘booktest/detail.html‘, {‘book‘: book})



将settings.py中的DEBUG改为False
将请求地址输入2和100查看效果

得到列表或返回404

  • get_list_or_404(klass, args, *kwargs)
  • klass:获取列表的一个Model、Manager或QuerySet实例
  • **kwargs:查寻的参数,格式应该可以被get()和filter()接受
from django.shortcuts import *

def index(request):
    # list = get_list_or_404(BookInfo, pk__lt=1)
    list = get_list_or_404(BookInfo, pk__lt=6)
    return render(request, ‘booktest/index.html‘, {‘list‘: list})


将settings.py中的DEBUG改为False

原文地址:https://www.cnblogs.com/Bighua123/p/8334020.html

时间: 2024-10-13 15:54:54

3 View - Response对象的相关文章

Servlet之Response对象

下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头.这些方法通过HttpServletResponse 对象可用. 1    String encodeRedirectURL(Stringurl) 为 sendRedirect 方法中使用的指定的 URL进行编码,或者如果编码不是必需的,则返回 URL 未改变. 2    String encodeURL(Stringurl) 对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未

django的request对象和response对象

概述Django 使用 request 和 response 对象表示系统状态数据..当请求一个页面时,Django创建一个 HttpRequest 对象.该对象包含 request 的元数据. 然后 Django 调用相应的 view 函数(HttpRequest 对象自动传递给该view函数<作为第一个参数>), 每一个 view 负责返回一个 HttpResponse 对象. 本文档解释了 HttpRequest 和 HttpResponse 对象的 API.HttpRequest 对象

python 视图 (FBV、CBV ) 、Request 和Response对象 、路由系统

一.FBV和CBV1.基于函数的view,就叫FBV(Function Based View) 示例: def add_book(request): pub_obj=models.Publisher.objects.all() #从数据库获取全部出版社对象 if request.method=='POST': add_name=request.POST.get('book_name') pub_id=request.POST.get('pub_id') models.Book.objects.c

Webform 内置对象 Response对象、Request对象,QueryString

Request对象:获取请求Request["key"]来获取传递过来的值 QueryString:地址栏数据传递 ?key=value&key=value注意事项:不需要保密的东西可以传不要传过长东西,因为长度有限,过长会造成数据丢失 Response对象:响应请求Response.Write("<script>alert('添加成功!')</script>");Response.Redirect("Default.asp

Request和Response对象

最早接触Request和Response对象的时候是听王勇老师将Servlet的时候,我们编写一个Servlet类.我们在浏览器端发送一个url请求之后,会调用Servlet类对这个请求做相应的处理,Servlet类就是通过重写的service()方法来实现的,而我们知道的Request和Response对象就是作为service()方法的参数传入的.   1.整体印象 2.Request对象 Request对象的主要职责是获得HTTP请求中封装的信息,获得url和表单参数:还有一个功能就是对页

ASP.NET Response 对象的部分方法和属性

Response 对象: 返回到客户端的输出 (1).方法: Response.Write() : 输出信息到客户端 Response. Redirect() : 重定向 Response .Clear() : 清除在缓冲区的所有HTML页面 Response .End() :终止处理ASP.NET程序,并返回当时的状况 Response.Flush() : 立刻送出缓冲区的HTML数据 Response. WriteFile() 读取一个文件,并且写入客户端输出流(实质:打开文件,并且输出到客

Response对象

Response对象来自HttpResponse类,它用于向客户端输出信息或设置客户端输出状态,使用Response对象可以直接发送信息给浏览器.重定向浏览器到另一个URL或设置cookie的值等. 数据输出: Response对象使用Write方法.WriteFile方法对数据进行输出,输出的数据包括字符.字符串.文件等. 网页重定向与参数传递: 利用Response对象的Redirect方法实现网页重定向功能.在重定向时,进行参数的传递,重定向的地址与参数之间使用“?”分割,参数与参数之间使

ASP.NET之Request和Response对象

经过了牛腩新闻公布系统和html的学习对B/S开发的流程有了些理解.前面尽管用到了非常多知识.但对制作网页仅仅能说知其然.当学到asp.net视频中的解说才干够说開始知其所以然了. 今天来说说client与server之间进行交流用到的Request和Response对象. Request:用户在client使用Web浏览器向Web应用程序发出请求时,会将client信息发给server.server收到一个HTTP请求,包括了全部查询字符串參数或表单參数.Cookie数据以及浏览器信息. 在a

javaweb学习总结二十六(response对象的用法二 下载文件)

一:浏览器打开服务器上的文件 1:读取服务器上面的资源,如果在web层,可以直接使用servletContext,如果在非web层 可以使用类加载器读取文件 2:向浏览器写数据,实际上是把数据封装到response对象上,然后服务器发现response中响应 体中有数据绑定,然后写给浏览器 3:设置响应头,控制浏览器的读取或者解析方式 如下:打开服务器上的图片 1 /**在页面上查看图片*/ 2 private void viewImage(HttpServletResponse respons