Python添加额外属性以使Flask读取webapp2

Python添加额外属性以使Flask读取webapp2,python,google-app-engine,flask,attributes,webapp2,Python,Google App Engine,Flask,Attributes,Webapp2,所以我已经使用谷歌应用引擎Webapp2很多年了。现在,Python2已被弃用,Webapp2仅适用于Python2。我使用的所有类都设计为由webapp2解释。我没有试图通过将页面的所有类更改为Flask来更改数万行代码,而是在做一个简单的修复。我只需要当类说self.response.write(“无论你写什么”)时,编译所有这些内容,并将其返回给flask。我遇到的问题是添加.write(),我可以只添加self.response(“任意添加”),但我不知道如何使self.response

所以我已经使用谷歌应用引擎Webapp2很多年了。现在,Python2已被弃用,Webapp2仅适用于Python2。我使用的所有类都设计为由webapp2解释。我没有试图通过将页面的所有类更改为Flask来更改数万行代码,而是在做一个简单的修复。我只需要当类说self.response.write(“无论你写什么”)时,编译所有这些内容,并将其返回给flask。我遇到的问题是添加.write(),我可以只添加self.response(“任意添加”),但我不知道如何使self.response.write(“任意添加”)工作。任何关于如何添加.write()并使其工作的建议都将不胜感激。这是我到目前为止所做的工作,这段代码非常有效,但我仍然需要添加.write()


我想这会满足你的要求:

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
是一个可调用的类,这意味着您可以像调用函数一样调用该类的实例,在这种情况下,将调用
\uuuuuuuuuuuu调用
方法


我刚刚用了一个存根
不管你想要什么(self.handler,arg)
来写
,但是你显然可以在那里做任何你想做的事。

多亏了Tom,现在它可以工作了。如果有人试图将旧的Webapp2类转换为Flask,下面是使其与Python3一起工作的代码。您的webapp2语法将用于使用flask安全会话、执行重定向、执行post请求以及在页面上写入。这将处理webapp2的大部分功能。现在,您必须手动将webapp2处理程序更改为底部的Flask处理程序,但我也将编写一个循环来迭代该处理程序,稍后我将在这里发布它

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)

从烧瓶导入烧瓶,会话,请求,重定向
app=烧瓶(名称)
班级回应:
定义初始化(自我,处理程序):
self.handler=handler
def写入(自我、添加):
self.handler.data+=填充添加
类BaseHandler:
定义初始化(自):
self.data=“”
self.ChangePage=“无”
self.response=响应(self)
self.session=会话
self.request={}
def重定向(自我,arg):
self.ChangePage=arg
类第一页(BaseHandler):
def get(自我):
self.redirect(“/SecondPage”)
def post(自我):
self.response.write(“第一页帖子”)
类第二页(BaseHandler):
def get(自我):
self.response.write(“第二页”)
def post(自我):
self.response.write(“第二页帖子”)
类主页面(BaseHandler):
def get(自我):
self.session[“name”]=“Some name”
self.session[“phone”]=“8675309”
self.response.write(“”)
""")
self.response.write(“要添加的第一件事”)
self.response.write(“”)
""")
self.response.write(“”)
""")
def post(自我):
name=self.request.get('name')
self.response.write(“”)
""")
self.response.write(“这是我发布的新帖子页面”

+name) SessionName=self.session.get(“名称”) SessionPhone=self.session.get(“电话”) self.response.write(“

我的会话名是”+SessionName) self.response.write(“

我的会话电话号码是”+会话电话) self.response.write(“”) """) app.secret\u key='您的密钥' @app.route('/',方法=['GET','POST']) def daMain(): 如果request.method==“GET”: daPage=MainPage() daPage.get() 如果daPage.ChangePage==“无”: 返回daPage.data 其他: 返回重定向(daPage.ChangePage) 如果request.method==“POST”: darequests=request.form daPage=MainPage() daPage.request=darequests daPage.post() 如果daPage.ChangePage==“无”: 返回daPage.data 其他: 返回重定向(daPage.ChangePage) @app.route('/FirstPage',methods=['GET','POST']) def daFirst(): 如果request.method==“GET”: darequests=request.form daPage=FirstPage() daPage.request=darequests daPage.get() 如果daPage.ChangePage==“无”: 返回daPage.data 其他: 返回重定向(daPage.ChangePage) 如果request.method==“POST”: darequests=request.form daPage=FirstPage() daPage.request=darequests daPage.post() 如果daPage.ChangePage==“无”: 返回daPage.data 其他: 返回重定向(daPage.ChangePage) @app.route('/SecondPage',方法=['GET','POST']) def daSecond(): 如果request.method==“GET”: daPage=SecondPage() daPage.get() 如果daPage.ChangePage==“无”: 返回daPage.data 其他: 返回重定向(daPage.ChangePage) 如果request.method==“POST”: darequests=request.form daPage=SecondPage() daPage.request=darequests daPage.post() 如果daPage.ChangePage==“无”: 返回daPage.data 其他: 返回重定向(daPage.ChangePage)
你太棒了!你帮我省了很多时间。为了将当前项目转换为Flask,我需要处理数万行代码。现在我只需要在BaseHandler中添加一些东西来管理会话等等,我就可以开始了。非常感谢你!太好了,很高兴我能帮忙!
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)