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