Django 2.1.7 视图 - HttpResponse对象、子类JsonResponse、子类HttpResponseRedirect

本文主要是介绍Django 2.1.7 视图 - HttpResponse对象、子类JsonResponse、子类HttpResponseRedirect,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

13423234-c8e484b60d8cd3cc.png

关于视图的篇章

Django 2.1.7 视图
Django 2.1.7 MVT模型示例 - 查询数据,返回渲染模板数据
Django 2.1.7 视图 - 自定义404错误、500错误
Django 2.1.7 视图 - HttpReqeust对象、QueryDict对象

HttpResponse对象

视图在接收请求并处理后,必须返回HttpResponse对象或子对象。在django.http模块中定义了HttpResponse对象的API。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。

运行服务器,在浏览器中浏览首页,可以在浏览器“开发者工具”中看到响应信息如下图:

标号3为响应头信息,点击标号4处可以查看响应体信息。

13423234-4417772bacba6388.png

属性

  • content:表示返回的内容。
  • charset:表示response采用的编码字符集,默认为utf-8。
  • status_code:返回的HTTP响应状态码。
  • content-type:指定返回数据的的MIME类型,默认为'text/html'。

方法

  • _init_:创建HttpResponse对象后完成返回内容的初始化。
  • set_cookie:设置Cookie信息。
    set_cookie(key, value='', max_age=None, expires=None)
  • cookie是网站以键值对格式存储在浏览器中的一段纯文本信息,用于实现用户跟踪。
    • max_age是一个整数,表示在指定秒数后过期。
    • expires是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期。
    • max_age与expires二选一。
    • 如果不指定过期时间,在关闭浏览器时cookie会过期。
  • delete_cookie(key):删除指定的key的Cookie,如果key不存在则什么也不发生。
    write:向响应体中写数据。

示例

直接返回数据

1)打开assetinfo/views.py文件,定义视图index2如下:

def index2(request):str = '<h1>hello world</h1>'return HttpResponse(str)

2)打开assetinfo/urls.py文件,配置url。

urlpatterns = [# ex:/assetinfo/index2path('index2', views.index2),....
]

3)运行服务器,在浏览器中打开如下网址。

http://127.0.0.1:8000/assetinfo/index2
13423234-a5c6bd767fb5e4ea.png

如果使用这种方式构造一个漂亮丰富的页面,对于开发人员真是会发疯,于是就有了下面的方式:

调用模板

可以将html、css、js定义到一个html文件中,然后由视图来调用。

1)打开assetinfo/views.py文件,定义视图index3如下:

from django.template import loaderdef index3(request):# 1.获取模板template = loader.get_template('assetinfo/index3.html')# 2.定义上下文context = {'h1': 'Hello world',}# 3.渲染模板return HttpResponse(template.render(context, request))

2)打开assetinfo/urls.py文件,配置url。

urlpatterns = [# ex:/assetinfo/index3path('index3', views.index3),...
]

3)在templates/assetinfo/目录下创建index3.html,代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>{{h1}}</h1>
</body>
</html>

4)运行服务器,在浏览器中打开如下网址。

http://127.0.0.1:8000/assetinfo/index3
13423234-96a506d8314911c1.png

调用模板简写函数render

每次调用模板时都要执行加载、上下文、渲染三个步骤,为了简化操作,Django定义了render()函数封装了以上三个步骤的代码,定义在django.shortcuts模块中。

1)打开assetinfo/views.py文件,定义视图index3如下:

from django.shortcuts import renderdef index3(request):context = {'h1': 'Hello world',}return render(request, 'assetinfo/index3.html', context=context)

子类JsonResponse

在浏览器中使用javascript发起ajax请求时,返回json格式的数据,此处以jquery的get()方法为例。类JsonResponse继承自HttpResponse对象,被定义在django.http模块中,创建对象时接收字典作为参数。

JsonResponse对象的content-type为'application/json'。

示例

1)在assetinfo/views.py文件中定义视图json1、json2,代码如下:

from django.http import JsonResponsedef json1(request):return render(request,'assetinfo/json1.html')def json2(request):return JsonResponse({'h1':'hello','h2':'world'})

2)在assetinfo/urls.py文件中配置url。

urlpatterns = [# ex:/assetinfo/json1path('json1', views.json1),# ex:/assetinfo/json2path('json2', views.json2),....
]

3)在templates/assetinfo/目录下创建json1.html,代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="/static/js/jquery-3.0.0.min.js"></script><script>$(function () {$('#btnJson').click(function () {$.get('/assetinfo/json2',function (data) {ul=$('#jsonList');ul.append('<li>'+data['h1']+'</li>')ul.append('<li>'+data['h2']+'</li>')})});});</script>
</head>
<body><input type="button" id="btnJson" value="获取json数据"><ul id="jsonList"></ul>
</body>
</html>

4)运行服务器,在浏览器中输入如下地址。

13423234-77dc4a58518670cd.png
13423234-2b2f55be074762dc.png

好了,到这里就可以点击json1页面中的按钮,通过ajax获取json2的json返回数据了。
如下:

13423234-040180b1c91c4c7a.png

ajax代码执行过程如下:

1.发起请求。
2.服务器端视图函数执行。
3.执行回调函数。

子类HttpResponseRedirect

当一个逻辑处理完成后,不需要向客户端呈现数据,而是转回到其它页面,如添加成功、修改成功、删除成功后显示数据列表,而数据的列表视图已经开发完成,此时不需要重新编写列表的代码,而是转到这个视图就可以,此时就需要模拟一个用户请求的效果,从一个视图转到另外一个视图,就称为重定向。

Django中提供了HttpResponseRedirect对象实现重定向功能,这个类继承自HttpResponse,被定义在django.http模块中,返回的状态码为302。

示例

1)在assetinfo/views.py文件中定义视图red1,代码如下:

from django.http import HttpResponseRedirect# 定义重定义向视图,转向刚刚创建的json1页面
def red1(request):return HttpResponseRedirect('json1')

2)在asserinfo/urls.py文件中配置url。

urlpatterns = [# ex:/assetinfo/red1path('red1', views.red1),....
]

3)访问浏览器测试重定向
访问 http://127.0.0.1:8000/assetinfo/red1

13423234-959a0ca21242c88b.png

可以看到页面重定向到访问json1的页面了。

4)查看django的日志信息

[17/Jun/2019 20:37:20] "GET /assetinfo/red1 HTTP/1.1" 302 0
[17/Jun/2019 20:37:20] "GET /assetinfo/json1 HTTP/1.1" 200 629

可以收到/assetinfo/red1的路径请求,然后302转发到另一个路径去。

重定向简写函数redirect

在django.shortcuts模块中为重定向类提供了简写函数redirect。

1)修改assetinfo/views.py文件中red1视图,代码如下:

from django.shortcuts import redirect# 定义重定义向视图,转向刚刚创建的json1页面
def red1(request):return redirect('/assetinfo/json1')

其实就是封装了一下HttpResponseRedirect对象而已。但是路径转发要加上全路径了,这个要注意一下。

13423234-0e3934319aa622f6.png

这篇关于Django 2.1.7 视图 - HttpResponse对象、子类JsonResponse、子类HttpResponseRedirect的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092097

相关文章

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p