【问题标题】:Python Django POST request to different views对不同视图的 Python Django POST 请求
【发布时间】:2019-05-01 02:47:11
【问题描述】:

在 Python Django 中,我向一个名为 view1 的视图发送了一个 POST 请求,并希望在另一个名为 view2 的视图中看到相同的 POST 请求。

我试图将 view1 的方法导入 view2,但在对 view2 执行 GET 请求时,我只是得到了 view1 的方法,而不是来自 view1 的 POST 请求并在 view2 中看到它。

view1.py

@csrf_exempt
def index(request):
  if "POST" == request.method:
    list_data = json.loads(request.body.decode('utf-8'))

  elif "GET" == request.method:
    list_data = serialize('json', ApiStatus.objects.all())

  return HttpResponse(list_data, content_type='application/json')

view2.py

from app.views.view1 import index

def status(request):  
    print("STATUS request method ", request) # gives a GET request when reloading page
    print("INDEX method from view1.py ", index) # shows when doing GET request
    return render(request, 'template.html')

post_file.py

def get_test_req():
    return { 'Samurai': 'Masamune'}

def post_data():
        data = []
        data.append(get_test_req())
        headers = {'Content-Type': 'application/json', 'Accept':'application/json'}
        r = requests.post(view1_url, headers=headers, json=data, timeout=10.0)

预期:在发布到视图 1 后看到从视图 1 到视图 2 的发布请求。

实际:我只在 view2 中看到 GET 请求,并将 view1 显示为导入的值。

【问题讨论】:

  • 您只能发布到单个 URL。任何重定向都不会携带有效负载。如果您解释您要达到的目标,我们可能会想出另一种方法。
  • 嗯,我想做的事情更详细一点,包括使用 ROS(机器人操作系统)。在 view2 中,如果我看到 view1 执行了更新数据库中值的 POST,我可以看到数据已更改到我的数据库中,这将反映在 view2 的 url 中。 View2 url 显示了一个值表。 View2 使用 ROS,如果有 post 请求,ROS 会启动它的节点和服务。一个解决方案可能只是在 view2 中完成所有操作,但我想不理会 view1,只在 view2 中完成所有 ROS 操作。

标签: python django post


【解决方案1】:

我能够找到解决方法。在第一个视图中的初始发布请求中,我没有寻找不同的发布请求,而是将值添加到数据库中。

在第二个视图中,我执行了一个 GET 请求,然后检查数据库中的值是否在最后一分钟更新。如果查询集中有值,我将使用以下代码初始化 ROS 节点:

view2.py

def status(request):
    right_now = datetime.now()
    last_time = right_now - timedelta(seconds=20)
    last_min_data = ApiStatus.objects.values().filter(date_time__gte=last_time)

    if last_min_data.exists():
        logging.debug("\n \n last_min_data EXISTS \n \n")

        rospy.init_node('root')
        s = rospy.Service('ros_post', OneInt, handle_request)

如果有更好的解决方案,我当然愿意倾听。谢谢。

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2019-11-13
    • 2013-04-25
    相关资源
    最近更新 更多