V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
NeverBelieveMe
V2EX  ›  Python

flask 中,一个接口中如果想要去调用另一个接口怎么做?

  •  
  •   NeverBelieveMe · 2018-07-17 18:11:33 +08:00 · 9217 次点击
    这是一个创建于 2322 天前的主题,其中的信息可能已经有所发展或是发生改变。
    redirect 的话,我没看懂怎么传参,好像无法传 json 的参数。
    现在就是用 requests 的方式来调用的。
    想问问有没有什么好的方式?
    22 条回复    2021-03-02 14:58:08 +08:00
    waterlaw
        1
    waterlaw  
       2018-07-17 18:17:14 +08:00 via Android
    django 的话有个 urlconfig, 用 requests 好像会丢失请求信息。
    pepesii
        2
    pepesii  
       2018-07-17 18:21:26 +08:00
    你那个是用 class based view 的方式写的,还是 method 的方式;
    如果是 methodd 的方式,它的参数不就是 reqeust, 你直接调那个方法就行;
    如果是 class based view 的话,好像是 class.view 方法调用,记不得了
    NeverBelieveMe
        3
    NeverBelieveMe  
    OP
       2018-07-17 18:23:18 +08:00
    @waterlaw requests 请求的话,用起来倒是还没遇到问题,只是觉得不顺心。
    NeverBelieveMe
        4
    NeverBelieveMe  
    OP
       2018-07-17 18:26:10 +08:00
    @pepesii 直接调用方法,request 参数怎么传呢
    awanabe
        5
    awanabe  
       2018-07-17 18:48:23 +08:00 via iPhone
    路由里面的逻辑就不能抽成一个 util 方法 公共调用么?
    为什么一定要在路由层互相调用呢?又不是跳转
    STRRL
        6
    STRRL  
       2018-07-17 19:03:27 +08:00 via Android
    mvc 要分层
    pepesii
        7
    pepesii  
       2018-07-17 19:37:35 +08:00
    @NeverBelieveMe
    大概这样
    假如你的定义是:
    @route(xxx):
    def func1():
    # 干点啥

    @route(xx):
    def func2():
    return func1(request)
    sikariba
        8
    sikariba  
       2018-07-17 19:43:26 +08:00
    直接 redirect 过去里面应该是可以访问 request 上下文的吧
    heynumber
        9
    heynumber  
       2018-07-17 19:49:43 +08:00
    @pepesii 这样子能的话就太牛逼了!
    rogwan
        10
    rogwan  
       2018-07-17 19:54:22 +08:00
    楼主说说实际的应用场景?针对具体情况,应该有解决方案的
    GoLand
        11
    GoLand  
       2018-07-17 20:10:49 +08:00 via Android
    @route("/patha")
    @route("/pathb")
    def view_func():
    pass
    gemini
        12
    gemini  
       2018-07-18 11:39:45 +08:00
    NeverBelieveMe
        13
    NeverBelieveMe  
    OP
       2018-07-19 11:44:12 +08:00
    @awanabe 我就是想知道有没有这种方式。能抽象出来的事情我也知道的。
    NeverBelieveMe
        14
    NeverBelieveMe  
    OP
       2018-07-19 11:44:51 +08:00
    @rogwan 我就是想知道有没有这种直接调用另外一个接口的方法。实际场景还没有遇到过这种问题。
    NeverBelieveMe
        15
    NeverBelieveMe  
    OP
       2018-07-19 11:46:10 +08:00
    @heynumber @pepesii 这个方法很明显不行。func1 都没有设定参数。
    NeverBelieveMe
        16
    NeverBelieveMe  
    OP
       2018-07-19 11:47:08 +08:00
    @sikariba 上下文我看了一下,没看懂。我再仔细看看。
    NeverBelieveMe
        17
    NeverBelieveMe  
    OP
       2018-07-19 11:47:23 +08:00
    @gemini 传参的问题不好搞定。
    awanabe
        18
    awanabe  
       2018-07-19 12:05:30 +08:00
    @sikariba
    @NeverBelieveMe
    redirect 怎么可能有 request 上下文...
    redirect 使用的 http 的 301,302...相当于新的请求...只会带单次请求的数据...

    实在不行...就存在 session 里面, 用 session_id 去取数据就行了
    awanabe
        19
    awanabe  
       2018-07-19 12:07:29 +08:00
    @NeverBelieveMe
    你这种使用方法有违这个框架的设计理念...
    为什么一定要走这条路呢?

    上面也有人说..要分层....每一层有自己的理念和作用...
    非要违背去做.....

    这种深究有点奇怪...
    pepesii
        20
    pepesii  
       2018-07-19 12:28:23 +08:00
    @NeverBelieveMe 额,我都说了,是大概,我没有写全而已,你 def 函数的时候肯定是有 request 的参数的嘛,我只是给了大概的伪代码
    frostming
        21
    frostming  
       2018-07-19 17:07:50 +08:00
    @NeverBelieveMe 不要这样搞,分层是正确的道路。

    路由 1 产生一个 json,然后发给路由 2 返回结果
    那就应该把这个处理 json 的东西抽出来作一个函数,输入参数为 json,然后路由 1 和路由 2 都去调这个函数
    purensong
        22
    purensong  
       2021-03-02 14:58:08 +08:00
    @NeverBelieveMe,楼主你用 requests 调用遇到过 starting new HTTP connection ( 1 ):localhost:5000,卡着不动的情况吗,我这也是遇到了访问接口一,在接口一里调用了接口二,两个接口对应 localhost:5000 的不同 path
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   884 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:36 · PVG 04:36 · LAX 12:36 · JFK 15:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.