zoukankan      html  css  js  c++  java
  • Django-response对象

    response对象

    HttpResponse的使用

    HttpRequest对象由Django自动创建,HttpResponse对象则由我们手动创建。我们设计的每一个视图都需要实例化,填充和返回一个HttpResponse,也就是函数的return的值。

    传递字符串

    from django.http import HttpResponse
    
    response = HttpResponse("THIS IS HTTPRESPONSE")
    response = HttpResponse("只能传字符串", content_type="text/plain")
    

    设置或删除响应头信息

    response = HttpResponse()
    response['Content-Type'] = 'text/html; charset=UTF-8'
    del response['Content-Type']
    

    HttpResponse的属性

    HttpResponse.content:响应内容,bytes类型
    
    HttpResponse.charset:响应内容的编码,如果没指定,将会从content_type中解析出来。
    
    HttpResponse.status_code:响应的状态码,比如404,200。
    
    HttpResponse.reason_phrase:响应的HTTP原因短语。
    
    

    JsonResponse对象

    JsonResponse是HttpResponse的一个子类,是Django提供的用于创建Json编码类型响应的快捷类。

    from django.http import JsonResponse
    
    response = JsonResponse({'jjzz': 'jjzz on the world'})
    print(response.content)
    
    b'{'jjzz': 'jjzz on the world'}'
    

    【注意】

    默认情况下,JsonResponse只能传递字典类型,如果要序列化非字典类型需要设置一下safe关键字参数,如果没有传递safe,会报TypeError错误。

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

    与HttpResponse的区别

    • Content-Type头部默认设置为application/json,HttpResponse的响应头是text/html
    • 传递的参数通常应该为一个字典数据类型
    • 只有设置safe = False,才能序列化除字典以外的其他对象

    Django shortcut functions

    render()

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

    参数:

    • request: 用于生成响应的请求对象。
    • template_name:要使用的模板的完整名称,可选的参数
    • context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
    • content_type:生成的文档要使用的MIME类型。默认为 DEFAULT_CONTENT_TYPE 设置的值。默认为'text/html'
    • status:响应的状态码。默认为200。
    • useing: 用于加载模板的模板引擎的名称。
    # 
    from django.shortcuts import render
    
    def my_view(request):
        # 视图的代码写在这里
        return render(request, 'myapp/index.html', {'foo': 'bar'})
        
    # 上面方式及等同于下面的方式
    from django.http import HttpResponse
    from django.template import loader
    
    def my_view(request):
        # 视图代码写在这里
        t = loader.get_template('myapp/index.html')
        c = {'foo': 'bar'}
        return HttpResponse(t.render(c, request))
    
    

    redirect()

    参数可以是:

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

    默认返回一个临时的重定向;传递permanent=True 可以返回一个永久的重定向。

    使用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页面。

  • 相关阅读:
    0541-leetcode算法实现之反转字符串II-reverseStrII-python&golang实现
    helm 入门简介与安装(1)
    ubuntu18.04 netplan 设置dns,dns不生效
    服务器报错WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    0344-leetcode算法实现之反转字符串-reverse-string-python&golang实现
    python os模块常用方法总结
    0076-leeycode算法实现之最小覆盖子串-minimum-window-substring-python&golang实现
    0904-leetcode算法实现之水果成篮-fruit-into-baskets-python&golang实现
    0209-leetcode算法实现之长度最小子数组-minimum-size-subarray-sum-python&golang实现
    0977-leetcode算法实现之有序数组的平方sqaure-of-a-sorted-array-python&golang实现
  • 原文地址:https://www.cnblogs.com/jjzz1234/p/11619820.html
Copyright © 2011-2022 走看看