Python 添加额外的属性让 Flask 读取 webapp2

Python Add Extra Attribute to make Flask read webapp2

所以我多年来一直在使用 Google App Engine Webapp2。现在 Python 2 已弃用,Webapp2 仅适用于 Python 2。我使用的所有 classes 都旨在由 webapp2 解释。我没有尝试通过将页面的所有 classes 更改为 Flask 来更改数万行代码,而是在进行一个简单的修复。我只需要当 class 说 self.response.write("whatever your writing") 编译所有这些并且 return 它与烧瓶一起工作。我 运行 遇到的问题是添加 .write() 我只能 self.response("whatever add") 但我不知道如何制作 self.response.write("whatever") 工作。非常感谢有关如何添加 .write() 并使其工作的任何建议。这是我到目前为止所做的,这段代码工作得很好,但我仍然需要添加 .write()。

from flask import Flask
from flask import request

app = Flask(__name__)

class BaseHandler():
  def __init__(self):
    self.data = ""
  def response(self,stuffAdd):
    self.data+=stuffAdd

class MainPage(BaseHandler):
    def get(self):
        self.response("first thing to add")
        self.response("second thing to add")

@app.route('/',methods=['GET'])
def hello_world():
    if request.method == 'GET':
        newMain=MainPage()
        newMain.get()
        return newMain.data

我认为这会满足您的要求:

class Response:
    def __init__(self, handler):
        self.handler = handler

    def __call__(self, stuffAdd):
        self.handler.data += stuffAdd

    def write(self, arg):
        # You can do whatever you want here
        whatever_you_want(self.handler, arg)

class BaseHandler:
    def __init__(self):
        self.data = ""
        self.response = Response(self)

Response 是可调用的 class,这意味着您可以像函数一样调用 class 的实例,在这种情况下会调用 __call__ 方法。

我只是为 write 使用了一个存根 whatever_you_want(self.handler, arg),但显然你可以在那里做任何你想做的事。

多亏了汤姆,它现在可以用了。如果有人试图将旧的 Webapp2 类 转换为 Flask,这里是使其与 python 一起工作的代码 3. 您的 webapp2 语法将使用 Flask 安全会话,进行重定向,执行 post 请求,并写在页面上。这将处理 webapp2 所做的大部分工作。现在,您必须手动将 webapp2 处理程序更改为底部的 Flask 处理程序,但我也将编写一个循环来迭代它,稍后我将 post 在这里。

from flask import Flask, session,request,redirect

app = Flask(__name__)

class Response:
  def __init__(self, handler):
    self.handler = handler

  def write(self, stuffAdd):
    self.handler.data += stuffAdd

class BaseHandler:
  def __init__(self):
    self.data = ""
    self.ChangePage="None"
    self.response = Response(self)
    self.session = session
    self.request= {}
  def redirect(self,arg):
    self.ChangePage=arg

class FirstPage(BaseHandler):
    def get(self):
        self.redirect("/SecondPage")
    def post(self):
        self.response.write("First Page Post")

class SecondPage(BaseHandler):
    def get(self):
        self.response.write("second page")
    def post(self):
        self.response.write("Second Page Post")

class MainPage(BaseHandler):
    def get(self):  
        self.session["name"]="Some Name"
        self.session["phone"]="8675309"
        self.response.write("""
        <html>
        <head>
        </head>
        <body>
        """)
        self.response.write("first thing to add")
        self.response.write("""
        <form method="post" action="/">
            <input type="text" name="name">
            <input type="submit">
        """)
        self.response.write("""
        </body>
        </html>
        """)

    def post(self):
        name=self.request.get('name')
        self.response.write("""
        <html>
        <head>
        </head>
        <body>
        """)
        self.response.write("this is the new post page<br/><br/>I posted " + name)
        SessionName=self.session.get("name")
        SessionPhone=self.session.get("phone")
        self.response.write("<br/><br/>my session name is " + SessionName)
        self.response.write("<br/><br/>my session phone number is " + SessionPhone)
        self.response.write("""
        </body>
        </html>
        """)


app.secret_key = 'your-secret-key'

@app.route('/',methods=['GET','POST'])
def daMain():
    if request.method == 'GET':    
        daPage=MainPage()
        daPage.get()
        if daPage.ChangePage=="None":
            return daPage.data
        else:
            return redirect(daPage.ChangePage)
    if request.method == 'POST':
        darequests=request.form
        daPage=MainPage()
        daPage.request=darequests
        daPage.post()
        if daPage.ChangePage=="None":
            return daPage.data
        else:
            return redirect(daPage.ChangePage)

@app.route('/FirstPage',methods=['GET','POST'])
def daFirst():
    if request.method == 'GET':    
        darequests=request.form
        daPage=FirstPage()
        daPage.request=darequests
        daPage.get()
        if daPage.ChangePage=="None":
            return daPage.data
        else:
            return redirect(daPage.ChangePage)
    if request.method == 'POST':
        darequests=request.form
        daPage=FirstPage()
        daPage.request=darequests
        daPage.post()
        if daPage.ChangePage=="None":
            return daPage.data
        else:
            return redirect(daPage.ChangePage)

@app.route('/SecondPage',methods=['GET','POST'])
def daSecond():
    if request.method == 'GET':    
        daPage=SecondPage()
        daPage.get()
        if daPage.ChangePage=="None":
            return daPage.data
        else:
            return redirect(daPage.ChangePage)
    if request.method == 'POST':
        darequests=request.form
        daPage=SecondPage()
        daPage.request=darequests
        daPage.post()
        if daPage.ChangePage=="None":
            return daPage.data
        else:
            return redirect(daPage.ChangePage)