Django学习小记[5] —— View Request/Response

Android View 深度分析requestLayout、invalidate与postInvalidate 前言前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看前几篇文章,以便能更容易理解这篇文章的内容。 阅读详情

在Django中,view是指一个方法,这个方法接收一个request,然后返回一个response.

当客户端发送一个请求的时候,Django会创建一个HttpRequest对象,这个对象包含本次请求的所有相关信息,比如请求的路径,请求的参数,请求的方法等等,然后将这个对象作为view方法的第一个参数传给view,view经过处理之后,返回一个HttpResponse对象,这个HttpResponse对象可以是一段HTML文本,可以是一个重定向,可以是一个404的Error,甚至可以是图片,XML/JSON的文档等等。

举个例子:

from django.http import HttpResponse

def index(request):                         
    return HttpResponse("this is a test")

通过request参数,可以获得本次请求的所有数据:

(Pdb) request.method
'GET'
(Pdb) request.GET
<QueryDict: {}>
(Pdb) request.path_info
u'/model1/'
(Pdb) request.META  # header

HttpResponse可以带几个参数:

  • content: 返回的内容
  • content_type: 返回内容的类型
  • status

如:

def index(request):                       
    return HttpResponse('<p>this is a test</p>', content_type="text/html", status="201") 

好,理解了view的基本原理,其实view基本上已经说完了,现在关于view值得一提的主要有以下几个方面:

  • 对异常的处理
  • shortcut
  • Class-based View

在这篇文章中,只介绍一下前面两个,第三个内容较多,留在下一篇文章中单独去介绍。

Returning errors

我们经常会遇到这样的情况,当你在访问一个很久之前保存的网址时,这个网页已经不存在了,于是出现了各种有意思的画面:

404

那这在django中是怎么实现的呢?我们先来自己想一下,在所有抛出404异常的地方,捕获这个异常,然后自己渲染一个404的页面。这样虽然可行,但是略麻烦。像报404这种常见的异常,Django都已经做了比较好的封装。在Django里,你可以主动抛出django.http.Http404异常,这样Django会自动去template路径里找一个叫做”404.html”的页面,如果你访问了一个真的不存在的页面,那么同样,django也会去渲染这个页面。

当django发现有Http404异常时,默认它会调用一个特殊的view:

django.views.defaults.page_not_found(request, template_name='404.html')

这个view会去处理404这个异常,返回404页面和404状态码,如果这个view满足不了你的需求的话,可以在配置文件里进行配置,自己指定view方法来处理,如:

handler404 = 'mysite.views.my_custom_404_view'

虽然看起来挺简单的,但是我在测试的时候,还是碰到几个坑的,在这里记下来:

  • 首先要注意的是这种机制只在DEBUG=False时有效,DEBUG=True时会打印出traceback
  • 其次,要确保配置了TEMPLATE_DIRS,把你的templates告诉了django,否则它找不到404页面
  • 如果在设置了DEBUG=False后,所有的路径都报500的话,那么检查一下ALLOWED_HOSTS这个参数,这个参数是为了防止攻击而设置的,在1.4.4~1.5版本,这个参数默认是['*'],接收所有的host,在大于1.5的版本里,这个参数默认[],默认不接收所有的host,所以在大于1.5的版本里,如果设置DEBUG=False的话,ALLOWED_HOSTS这个参数就必须设置,否则会报500。在1.4.4~1.5版本里,可以不设置,它默认就是接收所有的,但是如果设置了的话,就必须要正确,否则也会报500
Shortcuts

Django提供了几个非常有用的“快捷方式”,将我们经常用到的逻辑,封装成了一个方法,简化了代码:

  • render()
  • render_to_response()
  • redirect()
  • get_object_or_404()
  • get_list_or_404()

不进行详细的解释了,看文档吧

Refs

[1] https://docs.djangoproject.com/en/1.6/topics/http/views/ 
[2] https://docs.djangoproject.com/en/1.6/ref/request-response/ 
[3] https://docs.djangoproject.com/en/1.6/topics/http/shortcuts/

django请求返回不同的类型图片json,xml,html的实例 今天小编就为大家分享一篇django请求返回不同的类型图片json,xml,html的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 立即下载

相关推荐

CIC-IDS2017数据集训练和测试

1、数据集预处理 1.1整合数据并剔除脏数据 如上图所示,整个数据集是分开的,想要训练,必须要整合在一起,同时在数据集中存在Nan和Infiniti脏数据(只有第15列和第16列存在)需要剔除: 具体代码如下: ```python importpandasaspd #按行合并多个Dataframe数据 defmergeData(): monday=writeData("data\MachineLearningCVE\Monday-W...

蓝亚之舟的博客 2万+

django视图(request请求&response返回值)

1、在views.py中,定义视图类。2、必须继承View或者View子类3、不同的请求方法有相应的方法进行对应。GET -> getPUT -> put4、每一个处理请求的方法,必须得返回HttpResponse对象或者HttpResponse子类对象5、每一个处理请求的方法,第二个参数必须为HttpRequest对象# GET -> get 方法'name': '电脑',return HttpResponse(f"{order_id}的post请求")

喵酱 3521

山东大学软件学院计算机组成原理课程设计实验三

文章目录一、实验时间二、实验内容1. 实验目的2. 设计要求3. 实验基本思路三、电路图1. 可预置初值的模256异步计数器2. 8位ALU电路3. 总图四、补充 一、实验时间 第三次实验:2021年4月8日星期四,第六周 第一次部件级实验,开始算分 二、实验内容 微程序控制的运算器设计 1. 实验目的 (1)熟悉简单运算器的结构 (2)熟悉微命令的产生和时序 (3)熟悉运算器功能测试。 2. 设计要求 利用之前设计的具有超前进位功能的8位ALU,实现简单算术或逻辑运算 两操作数由八位寄存器R0、R1提供,

叶卡捷琳堡的博客 1万+

django ViewResponse

django ViewResponse; HttpResponse: 属性: content 返回的内容 charset 编码格式 status_code 响应状态码 content-type MIME类型 方法: init 初始化内容 write(xx) 直接写出文本 flush() 冲刷缓存区 set_cookie(key,value=”xx”,max_age=None,exprise=None) delete_cooki

老牛的博客 261

EastWave应用案例:机箱屏蔽效能仿真

如何使用EastWave对机箱的电磁屏蔽效能进行仿真

2201_76034687的博客 1394

Ubuntu环境下读取罗技G29方向盘信息

Ubuntu环境下读取罗技G29方向盘信息

工大机器人工作室 3463

springMVC controller层的request和对应view层的request区别

web容器用resin,项目采用springMVC,关键配置如下: &lt;bean         class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;         &lt;property name="prefix" value="/WEB-INF/view/" /&gt;  ...

breezylee09的专栏 286

STorM BGC V1.31硬件+SimpleBGC固件:从零搭建三轴云台开发环境(Keil+JLink避坑指南)

本文详细介绍了如何从零搭建STorM BGC V1.31硬件+SimpleBGC固件的三轴云台开发环境,涵盖硬件连接、Keil+JLink开发工具配置、固件编译与烧录等关键步骤,并提供了常见问题的解决方案和调试技巧,帮助开发者快速上手三轴云台开发。

weixin_28693683的博客 380

Django之视图及常用函数与模块

视图函数中返回值就是我们在上面设置的路由路径中可以看到的东西,比如我现在是一个html文件,我在当前服务网址中加上/home路径就可以看到一个html文件,而这个html文件我们通常保存在templates(模板)文件夹中,在render函数中作为传参传入。这里的路由名字我们会在视图中用到,回到我们的应用中的views文件,创建一个函数,名字需要与刚新增的一致,然后继承request,这里的request不是接口测试用的啊注意注意。视图(view),主要用来处理逻辑,即接收请求,进行处理并返回.

m0_57098592的博客 591

电商数据采集实战——多平台价格监控、比价分析与智能告警系统

在电商竞争日益激烈的今天,价格监控与比价分析已成为品牌商、渠道商和消费者的核心需求。对于品牌商而言,需要监控各渠道售价是否低于指导价(破价监控);对于消费者而言,希望在最佳时机以最低价购入心仪商品;对于数据分析师而言,价格波动数据是洞察市场趋势的金矿。然而,电商数据采集面临三大核心挑战:本文将基于 Python + Scrapy + Playwright + Redis + ClickHouse 技术栈,构建一套完整的电商价格监控与比价系统。架构分层说明:电商平台的反爬手段层出不穷,采集系统必须具备多层次的

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 136

cesium 淹没分析

cesium淹没分析

God's asylum的博客 480

django 返回xml数据方法

1.需求背景:        项目需要提供web service 接口,但是只需要获取信息,返回格式为xml,安全性要求也很低,所以没必要使用django rest api库(piston,tastypie等),决定写个简单的,直接用django 的mtv试试。 2.出现问题:        虽然模板是写的xml格式,但是访问的时候,并不是xml的,而是一堆字符串,并没有xml标

xerxes的专栏 1万+

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

我哎GIS博客 1665

Django读取XML并返回XML

Django读取XML并返回XML 用Django对ncclient的接口进行封装,需要post的数据为xml格式,读取后传给ncclient接口的格式仍然是读取的xml并返回XML格式的响应: 我用的xml文本,如 <config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"> <top xmlns

weixin_41106187的博客 2198

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Django在view中将数据库查询数据以JSON格式数据返回

和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式 返回多条数据 示例 import json from django.http import HttpResponse from django.core import serializers def db_to_json(request): scripts = Scripts.objects.all()[0:1] json_data = serializers.serialize('json', scripts) ...

你的bug是我提的博客 952

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Python Django view 两种return 方法

1.使用render方法    return render(request,'index.html')  --&gt;&gt;  返回的页面内容是index.html的内容,但是url不变,还是原网页的url,(比如是login页面的返回方法,跳转后的url还是为login)   一刷新就返回去了2.使用redirect方法    return redirect(request,'idnex.ht...

BUG更新的博客 7595

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

django views中 request, response的常用操作

以问题的形式记录一些请求和响应的常见写法,django1.8为例子。 request 获取post请求中的json数据 def hello(request): data = json.loads(request.body) ...json格式还有一些 非表单序列化 的格式,都可以从 request.body 中获取请求体中的数据,对于ajax请求可以使用 request.is_aja

orangleliu 笔记本 4490

Django View

Django中View是一个可调用对象,接受一个request,并且返回一个response。view可以是一个简单的Python函数,但是也可以是一个可转化成view的类。使用类作为view,通过继承与混合,可以帮助你重用你的代码。 class 类型的view VS 函数型的view: 函数型的view:简单明了,易于编写。缺点:场景覆盖率小,难以扩展。且不易统一配置管理。 class类型的v...

随心的专栏 6924

Django-views视图(HttpResponse和HttpRequest)

Django-views视图(HttpResponse和HttpRequest) 1.基础知识 视图函数是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。这个视图函数代码一般约定是放置在项目或应用程序目录中的名为views...

Last_G的博客 1303

Django View Request和Response

== HttpRequest 对象 - HttpRequest 属性 所有属性应被视为只读的,除非特别声明。 HttpRequest.scheme      (http or https) HttpRequest.body        => HttpRequest.read() HttpRequest.path        /app/path/to/ HttpRequest

lzx1104的专栏 945

django - (六) view和request

django - (六) view和request 拆分request中post和get的处理 viewsfrom django.shortcuts import render from django.http import HttpResponseRedirect from django.urls import reverse # Create your views here. #使用过dja...

gang950502的博客 1066

3 View - Request对象

1.HttpReqeust对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象 视图函数的第一个参数是HttpRequest对象 在django.http模块中定义了HttpRequest对象的API 属性 下面除非特别说明,属性都是只读的 path:一个字符串,表示请求的页面的完整路径,不包含域名 method:一个字符串,表示请求使用的HT...

weixin_30471561的博客 377

Android View重绘和更新: invalidate和requestLayout 总结的不错

Android View重绘和更新: invalidate和requestLayout 总结的不错总述:View有两个很重要的方法:invalidate和requestLayout,常用于View重绘和更新。Invalidate:To farce a view to draw,call invalidate().——摘自View类源码从上面这句话看出,invalidate方法会执行draw过程,重...

oneblue123的博客 3530

view的requestLayout()方法

sdk: public void requestLayout () Since: API Level 1 Call this when something has changed which has invalidated the layout of this view. This will schedule a layout pass of the view

gift的专栏 1万+

Python中Django视图(view)里的request作用

一般在urls.py文件中的urlpatterns的路径在中包含了视图函数的路径。根据这个路径找到views.py文件中的相应的view页面。 视图函数接受请求中的信息,准备好生成页面所需的数据。 每个视图函数都使用HttpRequest对象作为第一参数,并且通常称为request(这就是request的由来)。该对象包含关于请求的元数据,将这个HttpRequest对象作为第一个参数传递给视图函数,每个视图负责返回一个HttpRequest对象。 总体来说就是一个视图函数名会产生一个request对象(

YUZHOUYANGAND的博客 1188
上一篇: Django学习小记[4]——URL Dispatcher
下一篇: Django学习小记[6]——Class-based View
hackerain
博客等级 码龄16年 753粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值