zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Scan image with TWAIN scanner and insert into Rich Text (R5/Win32)
    软件测试工具汇总
    domino升级602>651
    domino SMTP验证LDAPPOP3的实现
    domino升级602>651>851
    DOMINO中的内置域
    Attaching and importing image files in one click
    传西门子中国运营中近一半业务涉及行贿 沧海
    IT程序员:如何化蛹为蝶? 沧海
    年度个人职业规划秘笈 沧海
  • 原文地址:https://www.cnblogs.com/kindvampire/p/12302025.html
Copyright © 2011-2022 走看看