大佬教程收集整理的这篇文章主要介绍了蟒蛇| 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,请注明来意。