当前位置: 首页 > 知识库问答 >
问题:

跨烧瓶路径使用变量[重复]

越安翔
2023-03-14

我正在学习Flask,有一个关于在路线上下文中使用变量的问题。例如,我的app.py:

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/index")
def index():

   a=3
   b=4
   c=a+b

return render_template('index.html',c=c)

@app.route("/dif")
def dif():

   d=c+a

   return render_template('dif.html',d=d)


if __name__ == "__main__":
   app.run()

在route/dif下,变量d通过获取已计算的c和a的值来计算。如何在页面之间共享变量c和a,以便计算变量d并将其呈现给dif。html?

谢谢你

共有2个答案

凌嘉勋
2023-03-14

您可以使用flask中的变量,方法是将从HTML传递的变量写入URL中,

from flask import Flask, render_template
    app = Flask(__name__)

    @app.route("/index")
    def index():

       a=3
       b=4
       c=a+b

    return render_template('index.html',c=c)

    @app.route("<variable1>/dif/<variable2>")
    def dif(variable1,variable2):

       d=c+a

       return render_template('dif.html',d=d)


    if __name__ == "__main__":

您的html格式如下:as form:

<form action="/{{ variable1 }}/index/{{ variable2}}" accept-charset="utf-8" class="simform" method="POST"

作为href:

<a href="{{ url_for('index',variable1="variable1",variable2="variable2") }}"><span></span> link</a></li>
谷森
2023-03-14

<罢工> 如果你不想使用 会话跨路由存储数据的一种方法是 (见下面的更新):

from flask import Flask, render_template
app = Flask(__name__)

class DataStore():
    a = None
    c = None

data = DataStore()

@app.route("/index")
def index():
    a=3
    b=4
    c=a+b
    data.a=a
    data.c=c
    return render_template("index.html",c=c)

@app.route("/dif")
def dif():
    d=data.c+data.a
    return render_template("dif.html",d=d)

if __name__ == "__main__":
    app.run(debug=True)

注意:需要在访问/dif之前访问/index

基于davidism的评论,上面的代码对生产不友好,因为它不是线程安全的。我已经用过程=10测试了代码,并在/dif中得到了以下错误:

因此,它证明了我们不应该在web应用程序中使用全局变量。

我们可以使用会话或数据库来代替全局变量。

在这个简单的场景中,我们可以使用会话来实现期望的结果。使用会话更新代码:

from flask import Flask, render_template, session
app = Flask(__name__)
# secret key is needed for session
app.secret_key = 'dljsaklqk24e21cjn!Ew@@dsa5'
@app.route("/index")
def index():
    a=3
    b=4
    c=a+b
    session["a"]=a
    session["c"]=c
    return render_template("home.html",c=c)

@app.route("/dif")
def dif():
    d=session.get("a",None)+session.get("c",None)
    return render_template("second.html",d=d)

if __name__ == "__main__":
    app.run(processes=10,debug=True)

输出:

 类似资料:
  • 问题内容: 如果我在flask中具有全局变量,并且有多个用户一次访问该站点,那么一个人会话可以覆盖另一个人会话的全局变量,还是在用户每次请求烧瓶时,flask都会创建我的站点和程序代码的唯一实例浏览器? 问题答案: 一般来说,全局变量在请求之间共享。 某些WSGI服务器可以为每个请求使用新的单独流程,但这不是扩展请求的有效方法。大多数将使用踩踏或几个子进程来分散负载,但是即使在单独的子进程的情况下

  • 问题内容: 我正在用React构建Flask应用程序,但最终遇到了路由问题。 后端负责成为API,因此某些路由如下所示: 以及通往React的主要路线: 我在React应用程序中使用react-router,一切正常,react- router带我进入,并获得了渲染视图,但是当我刷新页面时,Flask应用程序会处理此调用,并且会出错。 最好的解决方案是什么?我正在考虑重定向所有未调用的调用,这是不

  • 我基本上使用了install命令“$pip install Flask”,当我试图运行一个程序时,它会说“找不到模块”Flask安装在“/usr/local/lib/python2.7/site包”中,但我认为pip的意义在于,我可以到处导入这些包。我试图在我的桌面上运行一个文件,甚至当我将Flask文件夹移动到桌面上时,它也不起作用。有什么建议吗?谢谢

  • 任何人请建议如何摆脱已经运行的应用程序。我试过很多关于杀戮过程的东西,但没有一个是真的奏效的。

  • 所以,我有以下路线在烧瓶: 关于导航到http://127.0.0.1:5000/menu-card/ChIJAxXhIUMUrjsR5QOqVsQjCCI,我得到了正确的响应。 但是,我尝试如下更改URL模式: 关于导航到http://127.0.0.1:5000/menu-card?id=ChIJAxXhIUMUrjsR5QOqVsQjCCI我现在得到一个404错误。我做错了什么?

  • 对于以下post请求(如何在flask中使用从ajax发布的数据?): 我得到一个错误: null http://flask-cors.readthedocs.org/en/latest/ 如何在烧瓶和Heroku中启用CORS 应用jwt auth包装器时Flask-cors包装器不工作。 JavaScript-请求的资源上没有'access-control-allog-origin'标头 我的

  • 我想使用一个Eclipse类路径变量来解析我的类路径中的库的附加源代码JAR文件。这是我当前的“。 当我现在为“spring-ws-1.5.8-all.JAR”添加源JAR文件时,.classpath文件的内容是: 如您所见,Eclipse将“sourcepath”属性添加到带有绝对路径的“classpathentry”元素中。 现在我的想法是用类路径变量“SOURCE_path”替换绝对路径,该

  • 我在这里遵循烧瓶教程: http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world 我达到了我尝试的程度/跑py和我得到: 这看起来类似于: ImportError:没有名为flask的模块 但他们的解决方案没有帮助。作为参考,我确实有一个名为flask的文件夹,其中一位用户提到该文件夹可能会导致问题