程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了蟒蛇| Flask,在类中使用 request.form POST 数据并更新 Jinja 模板大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决蟒蛇| Flask,在类中使用 request.form POST 数据并更新 Jinja 模板?

开发过程中遇到蟒蛇| Flask,在类中使用 request.form POST 数据并更新 Jinja 模板的问题如何解决?下面主要结合日常开发的经验,给出你关于蟒蛇| Flask,在类中使用 request.form POST 数据并更新 Jinja 模板的解决方法建议,希望对你解决蟒蛇| Flask,在类中使用 request.form POST 数据并更新 Jinja 模板有所启发或帮助;

我正在使用外汇转换器 API 构建一个小应用程序,它的功能是获取一种货币,并将一个值转换为新货币。在访问我的类“调查”时,我似乎被抓住了我试图从我的 HTML 表单中获取数据的所有内容。 我的程序被 self.convertFrom=request.form['convertFrom'] 捕获,python 调试器给我“RuntimeError:在请求上下文之外工作。”如果有人可以显示,我将不胜感激/向我解释我在这里做错了什么。

app.py

from flask_deBUGtoolbar import DeBUGToolbar
from forex_python.converter import CurrencyRates
from handleForm import Survey
app = Flask(__name__)
survey = Survey()
result=["Give me something to convert!"]

@app.route("/")
def home_page():
    """Loads home page where user can enter their first conversion"""
    return render_template('index.HTML')

@app.route("/conversion")
def show_conversion():
    """shows the users conversion"""
    return render_template('convsubmit.HTML',result=result)

@app.route("/conversion/new",methods=["POST"])
def add_conversion():
    """clear old conversion from List and add new"""
    result=[]
    result.append(survey.convertCurrency())
    return redirect("/conversion")

handleForm.py

from flask import Flask,render_template,request
from forex_python.converter import CurrencyRates
c = CurrencyRates()


class Survey():
    def __init__(self):
        self.convertFrom=request.form['convertFrom'] <---gets caught here
        self.convertTo=request.form['convertTo']
        self.value=request.form['value']
        

    def convertCurrency(self):
        currencyFrom = self.convertFrom
        currencyTo = self.convertTo
        getValue = int(self.value)
        result = c.convert(currencyFrom,currencyTo,getvalue)
        return result

解决方法

请求变量仅在请求处于活动状态时可用。简单来说,它只有在被处理路由的视图函数调用时才可用。

在您的情况下,您正在尝试在任何根函数之外初始化调查对象。该行将在应用服务器启动时调用,在任何请求被保留之前,因此flask 会抛出一个错误,表明您正在请求上下文之外调用它。

要修复它,您应该在视图函数中移动 survey = Survey()


@app.route("/conversion/new",methods=["POST"])
def add_conversion():
    """clear old conversion from list and add new"""
    result=[]
    survey = Survey()
    result.append(survey.convertCurrency())
    return redirect("/conversion")

然这可以解决问题,但让该类构造函数直接访问全局请求仍然不是一个好的模式。

如果需要构造函数本身来初始化这些参数,可以将它们作为参数传递给构造函数,然后在初始化时传递


from flask import Flask,render_template,request
from forex_python.converter import CurrencyRates
c = CurrencyRates()


class Survey():
    def __init__(self,convertFrom,convertTo,value):
        self.convertFrom=convertFrom <---gets caught here
        self.convertTo=convertTo
        self.value=value
        

    def convertCurrency(self):
        currencyFrom = self.convertFrom
        currencyTo = self.convertTo
        getValue = int(self.value)
        result = c.convert(currencyFrom,currencyTo,getvalue)
        return result

然后更改视图函数以将值传递给构造函数

@app.route("/conversion/new",methods=["POST"])
def add_conversion():
    """clear old conversion from list and add new"""
    result=[]
    survey = Survey(request.form["convertFrom"],request.form["convertTo"],request.form["value"])
    result.append(survey.convertCurrency())
    return redirect("/conversion")

大佬总结

以上是大佬教程为你收集整理的蟒蛇| Flask,在类中使用 request.form POST 数据并更新 Jinja 模板全部内容,希望文章能够帮你解决蟒蛇| Flask,在类中使用 request.form POST 数据并更新 Jinja 模板所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。