HttpResponse响应、render 响应、redirect 响应、JsonResponse 响应

2023-11-19

目录

HttpResponse介绍

常用属性

content: 返回的内容

​编辑 content_type:返回给数据的MIME类型

 status_code: 返回的HTTP响应状态码

 render 返回网页

给网页传值

1. 指名道姓方式传值

2. 使用locals()将函数内部所有的变量名都传给网页, 包括request

redirect 重定向

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

传递一个视图的名称

跳转至其他网址

写全地址名

JsonResponse: 返回Json格式数据

对于非字典类型的数据进行JSON序列化时, 需要修改一个safe=False参数


django服务端启动之后, 以浏览器输入不同的路径后缀, 达到访问不同的页面为例:

首先在urls.py中先做好路由与视图的关系

from django.conf.urls import url
from django.contrib import admin
from app01 import views as app01_views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
  # 在app01 的 views.py 中写响应的函数,这里以 index 为例
    url(r'^index/',app01_views.index)
]

然后浏览器会将提交上来的这些数据封装起来, 传给对应的视图函数, 视图函数在处理完相关的逻辑之后, 也需要返回一个响应给浏览器

app01.views.py文件

注意: 所有的视图函数都需要一个位置参数, 这个参数就是请求相关的所有数据对象

from django.shortcuts import render, redirect,HttpResponse

def index(request):
    """
    
    :param request: 
    :return: 
    """
    return '响应对象'

HttpResponse介绍

常用属性

content: 返回的内容

也可以在HttpResponse()的括号内直接写

def index(request):
    response = HttpResponse()
    response.content='<h1>6666</h1>'
    return response

或者

from django.shortcuts import render, HttpResponse, redirect

def index(request):
    response = HttpResponse('<h1>6666</h1>')

    return response

 content_type:返回给数据的MIME类型

默认为text/html. 浏览器会根据这个属性, 来显示数据, 如果是text/html,那么就会解析这个字符串, 如果text/plain, 那么就会显示一个纯文本, 常用的content-tyoe如下;

text/html  >>> 默认的HTML文件

text/plain (纯文本) 注意: 一半在使用'text/plain'时都会加上'插入色图头发', 否则会使乱码的

text/css  >>> css文件

text/javascript  >>>js文件

multipart/form-data  >>> 文件提交

application/json  >>> json传输

application/xml  >>>xml文件

 status_code: 返回的HTTP响应状态码

默认是200 , 也可以自己设置

常用方法

1. set_cokie:  用来设置cookie信息

2. delete_cookie: 用来删除cookie信息

3. write: HttpResponse是一个类似于文件的对象, 可以用来写入数据到数据体content中. 

 render 返回网页

 观察源码发现, render其实也是一个HttpResponse对象, 结合一个给定的模板和一个给定的上下文字典, 并返回一个渲染后的HttpResponse对象

参数说明

request>>> 用于生成响应的请求对象

template_name >>>要使用的模板的完整名称, 可选的参数

context >>> 添加到模板上下文的一个字典, 默认是一个空字典, 如果字典中的某个值时可调用的, 视图将在模板渲染之外你调用它

content_type >>> 生成的文档要使用MIME类型, 默认为DEFALT_CONTENT_TYPE设置的值, 默认为;text/html'

status >>> 响应的状态码 默认为200

useing >>> 用于加载模板的模板引擎的名称.

template 文件夹加入配置之后, 输入网页文件的名称时, 会自动查找并提醒

from django.shortcuts import render, HttpResponse,redirect

def index(request);
    response = render(request,'render_test.html')
    return response

给网页传值

1. 指名道姓方式传值

render(request,'网页',{'字段1;:值,'字段2':值})

views.py 文件中

from django.shortcuts import render, HttpResponse, redirect

def index(request):
  	user_dict = {'name':'frank','age':18}
    response = render(request,'render_test.html', {'data':user_dict,'date':123})

    return response

render_test.html 通过{{ 字段 }} 拿值

<body>
    <div>data:{{ data }}</div>
    <div>date:{{ date }}</div>
</body>

2. 使用locals()将函数内部所有的变量名都传给网页, 包括request

from django.shortcuts import render, HttpResponse, redirect

def index(request):
  	user_dict = {'name':'frank','age':18}
    response = render(request,'render_test.html', locals())

    return response

redirect 重定向

观察源码发现. redirect 其实也是一个HttpResponse对象

参数是:

一个模型>>> 将调用模型的get_absolute_url()函数

一个视图>>> 可以带有参数, 将使用urlresolvers.reverse来反向解析名称

一个绝对的或相对的URL, 将原封不动的作为重定向的位置

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

例如

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

将调用具体ORM对象的get_absoulte_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')

跳转至其他网址

写全地址名

from django.shortcuts import render, HttpResponse, redirect

def index(request):
    response = redirect('https://www.baidu.com/')

    return response

在这里插入图片描述

只写后缀 , 则跳转的是该项目下的其他功能页面

urls.py 

from django.conf.urls import url
from django.contrib import admin
from app01 import views as app01_views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'index/',app01_views.index),
    url(r'home/',app01_views.home),
]

views.py

from django.shortcuts import render, HttpResponse, redirect
def index(request):
    response = redirect('/home/')

    return response


def home(request):
    return render(request,'render_test.html')

在这里插入图片描述

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

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

扩展阅读:

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

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

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

JsonResponse: 返回Json格式数据

如果想要将json格式的数据, 通过HttpResponse返回给前端


from django.shortcuts import HttpResponse
import json

def json_data(request):
    dict_data = {'username':'yietong','pwd':'123'}
    # 序列化
    json_data = json.dumps(dict_data)
    return HttpResponse(json_data)

会发现在前端页面中, 中文的部分是被二进制数据替代了, 并没有中文展示

那么此时, 需要修改dumps方法的一个参数, ensure_ascii=False

from django.shortcuts import HttpResponse
import json

def json_data(request):
  dict_data = {'username':'yieyong', 'pwd':'123'}
  # 序列化
  json_data = json.dumps(dict_data, ensure_ascii=False)
  
  return HttpResponse(json_data)

JsonResponse 其本质就是将数据自动序列化, 然后通过Httpresponse相应返回

注意: 该方法导入的模块是gjango.http

from django.http import JsonResponse

def json_data(request):
  dict_data = {'username':'yietong', 'pwd':'123'}
  
  return JsonResponse(dict_data)

会发现在前端页面中, 中文的部分是被二进制的数据替代了,并没有展示中文

 观察源码发现, 其实底层原理就是调用了dumps方法, 那么只需要传入一个json_dumps_params{'ensure_ascii':False}

from django.http import JsonResponse

def json_data(request):
  dict_data = {'username':'yietong', 'pwd':'123'}
  
  return JsonResponse(dict_data, json_dumps_params{ 'ensure_ascii': False })

此时前端页面中的中文格式数据就能正常展示了

对于非字典类型的数据进行JSON序列化时, 需要修改一个safe=False参数

from django.http import JsonResponse

def json_data(request):
  data = [11,22,33,44]
  
  return JsonResponse(data, safe=False)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpResponse响应、render 响应、redirect 响应、JsonResponse 响应 的相关文章

随机推荐

  • 利用Python每日将股票数据进行爬取、并做了一波处理分析

    1 先展示 时间 价格 涨跌幅 2 说明 因为在上班的时候 直接打开交易软件的话 太明显 会让别人看到我在炒股 所以 自己写一个 可以随时查看自己持仓的股票涨跌情况 3 代码 import tushare as ts import time
  • 【问题解决】利用Eclipse,在hadoop上传文件到hdfs没有内容

    本文适用于一些在网上找了半天答案都没解决问题的人群 因为我也是在按网上说道弄了一天 最后才解决的 如果你是刚遇到问题 还没有深入 建议你查看这篇文章 http f dataguru cn hadoop 208802 1 1 html 将问题
  • 创业的真谛是顺势而为,借船过海!

    追寻成功的路上 顺势最易 借势稍难 造势境界最高 创业者 或者创业团队 积极争取优惠政策 打造自身适宜环境 努力营造外在氛围 最大化有效使用身边各种资源 懂得聚合放大 顺势是为了 为 顺势而为 最终是为了顺势大为 一 顺势而为 无论商场战场
  • Python opencv学习-13 直方图反向投影(用于图像分割)

    代码和图片大量参考https blog csdn net tengfei461807914 article details 77075567 自己跑了下验证了下 个人理解 直方图反向投影用来做图像分割 或者说知道了一个目标的图片的一部分 去
  • 利用Redis bitmap签到功能

    1 简介 BitMap 存储的是连续的二进制数字 0 和 1 通过 bitmap 只需要一个 bit 位来表示某个元素对应的值或者状态 key 就是对应元素本身 我们知道 8 个 bit 可以组成一个 Byte 所以bitmap 本身会极大
  • 为什么程序员都喜欢安静?

    大家回顾一下上学期间 你在上晚自习想完成今天老师布置的作业 但是你的班级却非常的吵闹 跟置身在菜市场一样 你能专心完成作业吗 不受周围吵闹环境的影响吗 相信大部分的人都难以静下心来认真完成作业 有时候好不容易想到一个思路 结果旁边的人拍你一
  • Windows系统常用命令

    Windows常用命令 1 echo 用法 输出一个字符到终端 当加上 gt 后就可输出到文本文件 例如 echo 1 在终端显示一个1 echo 20 gt gt 1 txt 在当前目录下的1 txt文件后面追加一行数据值20 如果没有1
  • AT24C02芯片使用介绍

    AT24C02简介 AT24C02是一个2K位串行CMOS E2PROM 内部含有256个8位字节 有一个16字节页写缓冲器 该器件通过IIC总线接口进行操作 有专门的写保护功能 应用于AT24C02制造过程的先进CMOS技术实质上减少了器
  • 咬牙切齿的按钮

    先看效果 再看代码 查看更多 import url https fonts googleapis com css2 family Roboto wght 500 display swap root sz 9vmin on 4CAF50 of
  • ftp服务器性能对比,ftp服务器软件 性能对比

    ftp服务器软件 性能对比 内容精选 换一换 Java性能分析是鲲鹏性能分析工具的子工具 本章节以openEuler离线环境安装工具 登录 创建Guardian和分析任务 卸载工具为例 指导您快速上手Java性能优分析 由于root用户拥有
  • 机器学习毕设题目有哪些_毕设开源了,126个star,39个fork

    毕设题目 我是去年毕业的 软件工程专业 学校给的毕设题目是实现一个电影院订票系统 如图 嗯 题目一看很简单 其实就是实现一个web版的影票在线订票系统罢了 因此当天接到毕设后的我就大刀阔斧的准备开干了 技术方案选择 先说个大前提 我们学校评
  • c++动态数组(二)之allocator类

    new在灵活性上面一些局限性 以方便它将内存分配和对象构造组合在了一起 delete将内存释放和对象析构组合在一起 当分配一大块内存时 我们通常计划在这块内存上面按需构造对象 在这种情况下 我们希望内存分配和对象构造分离 这意味着我们可以分
  • Python学习之cookies及session用法

    当想利用Python在网页上发表评论的时候 需要一些账号密码登录的信息 这个时候用requests get 请求的话 账号密码全部会显示在网址上 这显然不科学 这个时候需要用post请求 可以这么理解 get是明文显示 post是非明文显示
  • cad等比例缩放快捷键_终于领会CAD缩放(放大与缩小)快捷键

    终于领会CAD缩放 放大与缩小 快捷键 日期 2019 10 09 19 15 01 浏览 9 核心提示 CAD缩放 放大与缩小 快捷键 这个非常简单 鼠标的中键也就是滚轮 双击两下中键图形会适合平面显示全部滚轮前后滚动是缩放 不需要什么快
  • error: “自定义函数XXX” must take exactly one argument

    主要问题在于 类里面的重载的二元运算符时 只需要一个参数 另一个参数由this指针传入 这里如果需要传入两个参数 需要放到类外定义 声明友元 访问私有数据和函数 如下 class myTask public myTask int a int
  • windbg remote stub方式远程调试

    windbg远程调试时 有两种方式 一种为remote session 另一种为remote stub 具体详情请google 我下面说说我在使用remote stub方式时遇到的一些困惑 按照教程 我在target machine启动了s
  • .NET C# 世界日期格式转换为yyyyMMdd

    本文分享了一个按照不同国家的语言生成相应时间格式的案例 有需要做国外网站或者多国语言网站的朋友可以参考一下 本文在引用 C DateTime ToString根据不同语言生成相应的时间格式 基础上做了一个Demo测试 旨在给更多有需要的人能
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • Nodejs-Express框架

    1 认识Web框架 目前在Node中比较流行的Web服务器框架是express koa express早于koa出现 并且在Node社区中迅速流行起来 可以基于express快速 方便的开发自己的Web服务器 并且可以通过一些实用工具和中间
  • HttpResponse响应、render 响应、redirect 响应、JsonResponse 响应

    目录 HttpResponse介绍 常用属性 content 返回的内容 编辑 content type 返回给数据的MIME类型 status code 返回的HTTP响应状态码 render 返回网页 给网页传值 1 指名道姓方式传值