首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Django中,如何将Request.response重新打包为Django响应?

在Django中,如何将Request.response重新打包为Django响应?
EN

Stack Overflow用户
提问于 2017-11-24 01:04:54
回答 1查看 465关注 0票数 1

我有一个Django应用程序,接受来自远程设备的消息作为POST消息。

这非常适合Django的框架!我使用了通用的View类(来自django.views import View),并定义了我自己的POST函数。

但是远程设备需要一个我在Django中还不能生成的特殊回复。因此,我使用请求库重新创建POST消息,并将其发送到制造商的云服务器。

该服务器处理数据,并在正文中使用特殊消息进行响应。理想情况下,整个HTML响应消息应该返回到远程设备。如果它没有得到有效的回复,它将重新发送该消息。这会很烦人的!

我一直在谷歌上搜索,但我很难弄清楚如何做到这两点:

(a):使用Requests.response对象在Django中回复,不做任何编辑。

(b):构建Django响应并将其发回。

实际上,我想我确实知道怎么做(b),但它是有效的。如果可能的话,我宁愿做(a)。

提前感谢!

里奇。

EN

回答 1

Stack Overflow用户

发布于 2017-11-25 14:40:19

感谢您的评论和问题!

深夜编程的危险:你可能会想得太多,或者错过了显而易见的东西。我如此专注于寻找一种方法来返回request.response,而不需要任何更改/编辑,我甚至没有勾勒出选项(b)是什么。

好吧,事实证明这很简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s = Session()
# Populate POST to cloud with data from remote device request:
req = Request('POST', url, data=data, headers=headers)
prepped = req.prepare()
timeout = 10
retries = 3
while retries > 0:
  try:
    logger.debug("POST data to remote host")
    resp = s.send(prepped, timeout=timeout)
    break
  except:
    logger.debug("remote host connection failed, retry")
    retries -= 1
    logger.debug("retries left: %d", retries)
    time.sleep(.3)
    if retries == 0:
      pass # There isn't anything I can do if this fails repeatedly...
# Build reply to remote device:
r = HttpResponse(resp.content, 
                 content_type = resp.headers['Content-Type'], 
                 status = resp.status_code, 
                 reason = resp.reason, 
                 )
r['Server'] = resp.headers['Server']
r['Connection'] = resp.headers['Connection']
logger.debug("Returning Server response to remote device")
return r

会话"s“允许用户使用"prepped”和" send ",这允许用户在请求对象被发送之前摆弄它,并重试发送。我认为至少可以在重构中删除其中的一些;使这个过程变得更加简单。

这里有3个HTTP对象在起作用:

  1. "req“是我发送到云服务器以获取特殊(加密)回复的帖子。
  2. “是从云服务器返回的回复。正文(.content)包含特殊的回复。
  3. “r”是我需要发送回启动滚动球的远程设备的Django HTTP响应,将POSTing数据发送到我的视图。

用数据填充响应,并将头设置为云服务器返回的值,这非常简单。

我知道这是可行的,因为远程设备不会将相同的数据发送两次!如果此过程中的任何地方出现错误,它将一遍又一遍地重新发送相同的数据。我从一个套接字中继器模块复制了While/try循环。我不知道这是否真的适用于HTTP。我已经在现场硬件上测试了超过48小时,到目前为止还没有失败过。超时也是一个问号,因为我知道远程设备和云服务器有严格的限制。因此,如果我的“中继器”中有错误,如果过程花费太长时间,重试可能不起作用。放弃/放弃当前帖子可能会更好。并等待远程设备重试。抱歉,正在大声重构...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47465070

复制
相关文章
重新整理django中Auth模块
一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:
小小咸鱼YwY
2019/09/12
1K0
Django基础篇-响应
在 django.http 模块中定义了 HttpResponse 对象的 API。
小团子
2019/07/18
4660
Django基础篇-响应
Django-djangorestframework-响应模块
响应模块 一般都用 Response 对象来做返回(最后一定是打包成符合 HTTP 协议的数据格式来传输,Response 类做了一系列处理,所以这里我们只需要关注下它的那些参数即可) 响应类构造器 rest_framework.response.Response def __init__(self, data=None, status=None, template_name=None, headers=None, exception
suwanbin
2019/12/12
2910
Django-DRF | HttpResponse 响应
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2020/02/11
1K0
Django-DRF | HttpResponse 响应
打包你的django程序
上一篇说到打包python程序,这里再补充下关于django程序的打包安装,重点在与打包是那个entry_points的设置。
the5fire
2019/02/28
1.3K0
Django的请求与响应
request.META: 请求中的元数据(消息头) request.META['REMOTE_ADDR']可以请求到客户端地址,当然你可以请求META中的任何信息.
Yuou
2022/09/26
6160
99 - 在Django中读写Session
请解释Session的概念,以及如何在Django中读写Session Session(服务端, key-value) Cookie(Map, key-value) # session.py from django.http import HttpResponse def writeSession(request): request.session['name'] = 'Bill' request.session['age'] = 20 return HttpResponse('wr
ruochen
2021/06/27
1.4K0
99 - 在Django中读写Session
在 PostgreSQL 中解码 Django Session
会话(session)是任何基于 HTTP 的 web 框架的重要组成部分。它使得 web 服务器可以记录重复请求的 HTTP 客户端而不需要对每一次请求重新进行认证。记录会话的方式有多种。其中的一些方法不需要你服务器保持会话数据(如 JSON Web Tokens),而另外一些则需要。
Miigon
2022/10/27
3.3K0
在 PostgreSQL 中解码 Django Session
Django-bootstrap3|在Django中快速使用Bootstrap模版
关于如何快速基于Django使用别人写好的模版搭建网站之前已经有详细讲过,一般我们在Django中使用Bootstrap模版都需要经过以下几个步骤
刘早起
2020/06/28
5.9K0
基于Pycharm的Django学习1 —— Django三种响应
由于Flask比较简单,而且Django和Flask有很多基础语法也是有相通之处的,所以就不写Flask的博客了,一起学Django吧!
全栈程序员站长
2022/10/04
6170
基于Pycharm的Django学习1 —— Django三种响应
Celery在Django中的简单应用
Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列。同时也支持任务调度。需要注意的是,celery并不支持Windows,所以Windows相关的问题很可能在官方无法得到回应。
仙人技术
2020/08/03
2.5K0
Django请求和响应对象
当一个页面被请求时,Django 会创建一个 HttpRequest 对象,这个对象包含了请求的元数据。然后,Django 加载相应的视图,将 HttpRequest 作为视图函数的第一个参数。每个视图负责返回一个 HttpResponse 对象。
zy010101
2021/11/01
1.6K0
Django 教程 --- Django中的视图
Django视图是Django M V T结构的重要参与者之一。视图是用户界面,即您呈现网站时在浏览器中看到的内容。它由HTML / CSS / Javascript和Jinja文件表示。根据Django文档,视图函数是一个Python函数,它接受Web请求并返回Web响应。此响应可以是网页的HTML内容,重定向,404错误,XML文档或图像(Web浏览器可以显示的任何内容)
公众号---人生代码
2020/05/26
3K0
Django 教程 --- Django中的视图
在pycharm中如何将django中多个app放到同个文件夹apps处理
新建apps文件夹后mark为source目录,然后在Setting中import方式为
Ewdager
2020/07/14
2K0
为 Django 配备 GraphQL API
前文再见 REST,你好 GraphQL提到,GraphQL 使得前端按需请求后端数据,前后端接口不再高度耦合,可以大大提高前后端的开发效率,从而快速进行产品迭代。Github v4 版外部 API 只使用 GraphQL,可见 GraphQL 是一个明显的趋势,值得我们去学习和使用。今天就分享一下如何为 Django 配置 GraphQL API。
somenzz
2021/07/01
8750
为 Django 配备 GraphQL API
Django中更改默认数据库为mysq
Django中默认使用sqlite3数据库,今天研究了下如何将它换成常见的mysql数据库。
py3study
2020/01/02
1.2K0
Python 的 Descriptor 在 Django 中的使用
这篇通过Django源码中的cached_property来看下Python中一个很重要的概念——Descriptor(描述器)的使用。想必通过实际代码来看能让人对其用法更有体会。
the5fire
2019/03/01
4.3K0
在django-admin中使用django-ckeditor
在最新学习python中,使用django搭建博客系统,管理后台直接使用django自带的admin模块,所以遇到富文本编辑的问题,经过查阅资料,发现了django-ckeditor这个小插件,下面小威就分享一点点来自小白的经验吧~
用户2619822
2022/06/10
1.6K0
在django-admin中使用django-ckeditor
在Django中接收文件并存储
这是一个简单的接收客户端上传的头像文件并保存的例子,应该看过这个就已经大体会使用接收文件了
py3study
2020/01/21
2.8K0
点击加载更多

相似问题

我们可以在多个类中重新打包和破坏模型,在Django 1.8中重新打包吗?

11

如何打包django项目?

35

Django在单个下载中打包多个文件

15

Django - ajax响应后重新加载模板

13

在Django中为post请求返回适当的响应

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文