request与response

Posted kindvampire

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了request与response相关的知识,希望对你有一定的参考价值。

request

当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

常用值

request.method     # 请求方法 GET POST,八种请求方法 
request.path_info  # 路径  不包含ip和端口  也不包含参数
request.GET        # url上携带的参数  {}  
request.POST       # form提交POST请求的参数  {}   编码类型是urlencode 
request.body       # 请求体,bytes类型
request.FILES      # 上传的文件的编码类型是:enctype="multipart/form-data",默认为form-urlencoded
request.COOKIES    # cookie的字典 
request.session    # session的数据
request.META       # 请求头,数据类型为字典;获取:小写 ——> 大写 即:后台获取其中的值时,key需要大写,中间带-的key转为"_"。如:request.META.get(‘CONTENT_TYPE‘)

request.get_full_path()   # 获取全路径路径  不包含ip和端口  包含参数
request.get_signed_cookie()  # 获取加密的cookie
request.is_ajax()   # 是否是ajax

附:request.META

 一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器,下面是一些示例:
    CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
    CONTENT_TYPE —— 请求的正文的MIME 类型。
    HTTP_ACCEPT —— 响应可接收的Content-Type。
    HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
    HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
    HTTP_HOST —— 客服端发送的HTTP Host 头部。
    HTTP_REFERER —— Referring 页面。
    HTTP_USER_AGENT —— 客户端的user-agent 字符串。
    QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
    REMOTE_ADDR —— 客户端的IP 地址。
    REMOTE_HOST —— 客户端的主机名。
    REMOTE_USER —— 服务器认证后的用户。
    REQUEST_METHOD —— 一个字符串,例如"GET""POST"。
    SERVER_NAME —— 服务器的主机名。
    SERVER_PORT —— 服务器的端口(是一个字符串)。
   
   从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时, 都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_ 前缀。 所以,一个叫做 X
-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。

response

与由Django自动创建的HttpRequest对象相比,HttpResponse对象是我们的职责范围了。我们写的每个视图都需要实例化,填充和返回一个HttpResponse。

HttpResponse类位于django.http模块中。

使用

1、传递字符串

from django.http import HttpResponse
response = HttpResponse("Here‘s the text of the Web page.")
response = HttpResponse("Text only, please.", content_type="text/plain")

2、设置或删除响应头数据

response = HttpResponse()
response[Content-Type] = text/html; charset=UTF-8‘ #可以直接在这里做修改
del response[Content-Type]

属性

HttpResponse.content:响应内容

HttpResponse.charset:响应内容的编码

HttpResponse.status_code:响应的状态码

JsonResponse对象

JsonResponse是HttpResponse的子类,专门用来生成JSON编码的响应。

from django.http import JsonResponse

response = JsonResponse({foo: bar})
print(response.content)

# 结果
b{"foo": "bar"}

默认只能传递字典类型,如果要传递非字典类型需要设置一下safe关键字参数。

response = JsonResponse([1, 2, 3], safe=False)

Django shortcut functions

render()

1、作用:结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。

2、render()源码解析:

def render(request, template_name, context=None, content_type=None, status=None, using=None):
    """
    Returns a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    content = loader.render_to_string(template_name, context, request, using=using)
    return HttpResponse(content, content_type, status)

形参:

  • request: 用于生成响应的请求对象。
  • template_name:要使用的模板的完整名称,可选的参数
  • context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
  • content_type:生成的文档要使用的MIME类型。默认为 DEFAULT_CONTENT_TYPE 设置的值。默认为‘text/html‘
  • status:响应的状态码。默认为200。
  • useing: 用于加载模板的模板引擎的名称。

redirect()

实参:

  • 一个模型:将调用模型的get_absolute_url() 函数
  • 一个视图,可以带有参数:将使用urlresolvers.reverse 来反向解析名称
  • 一个绝对的或相对的URL,将原封不动的作为重定向的位置。

redirect函数的多种使用方式

传递一个具体的ORM对象(了解即可)

原理:将调用具体ORM对象的get_absolute_url() 方法来获取重定向的URL

from django.shortcuts import redirect
 
def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object)

传递一个视图的名称

def my_view(request):
    ...
    return redirect(some-view-name, foo=bar)

传递要重定向到的一个具体的网址

def my_view(request):
    ...
    return redirect(/some/url/)

当然也可以是一个完整的网址

def my_view(request):
    ...
    return redirect(http://example.com/)

默认情况下,redirect() 返回一个临时重定向。以上所有的形式都接收一个permanent 参数;如果设置为True,将返回一个永久的重定向:

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object, permanent=True)  

注:

临时重定向(响应状态码:302)和永久重定向(响应状态码:301)对普通用户来说是没什么区别的,它主要面向的是搜索引擎的机器人。

A页面临时重定向到B页面,那搜索引擎收录的就是A页面。

A页面永久重定向到B页面,那搜索引擎收录的就是B页面。

 大佬博客:https://www.cnblogs.com/maple-shaw/p/9285269.html

以上是关于request与response的主要内容,如果未能解决你的问题,请参考以下文章

Jsp获取Java的重定向赋值(String)

javaWeb中request请求转发和response重定向

response.sendRedirect(url)与request.getRequestDispatcher(url).forward(request,response)的区别

javaweb入门-----request与response的作用

JavaWeb Request和Response

response.sendRedirect()与request.getRequestDispatcher("/index.jsp").forward(request, respon