请考虑我在Google App Engine中的WebApp2应用程序中的以下代码:
count = 0
class MyHandler(webapp2.RequestHandler):
def get(self):
global count
count = count + 1
print count
Run Code Online (Sandbox Code Playgroud)
每次刷新页面时,计数都会增加.
我来自PHP世界,每个请求都是一个新的全球环境.我在这里理解的是,因为我正在使用WebApp2的wsgi配置,所以Python不会对每个请求启动新进程.另一方面,如果我使用cgi配置,全局环境将每次重新实例化,如PHP ...
假设以上是正确的(如果没有,请纠正我)...
编辑:
这是使用threadlocal的尝试:
count = 0
mydata = threading.local()
mydata.count = 0
class MyHandler(webapp2.RequestHandler):
def get(self):
global count
count = count + 1
print count
mydata.count = mydata.count + 1
print mydata.count
Run Code Online (Sandbox Code Playgroud)
这些也会在请求之间递增
我有时候不确定如何使用webapp2.redirect.
有没有时间我应该使用
self.redirect("/blah")而不是return self.redirect("/blah")
这是我对时间线的理解/猜测:(有时候我很困惑,如果响应对象做了什么或者webapp2是否这样做)
初始get函数的示例:
def get():
self.write('hello world')
self.redirect('/foo')
self.write('bye world')
Run Code Online (Sandbox Code Playgroud)
什么" 发生的事情 "?我想路由器找到/ foo /的RequestHandler.在调用foo的requestHandlers get()方法之前,对Request和Response进行了哪些修改.请求是否被删除并替换为新的GET请求?是否删除了响应并替换为新响应?初始请求处理程序中存在哪些上下文?代码执行是否返回到初始请求处理程序get方法,如果是,那么可能存在的上下文是否已恢复?
对不起,如果这有点拗口,我试着解释一下我想知道的:)
也许更容易要求使用重定向的一些用例(做和不做).
NDB模型包含两个属性:email和password.如何避免向数据库添加两条记录相同email?对于属性,NDB没有UNIQUE选项,就像关系数据库那样.
email在添加之前检查new 不在数据库中 - 不会让我满意,因为两个并行进程可以同时进行检查并且每个进程都添加相同email.
我不确定交易可以在这里提供帮助,在阅读了一些手册之后我感觉不到这种印象.也许是同步交易?这是一次一个吗?
我想知道您对这两个Web框架(Django和webapp2)中的哪一个更适合在App Engine平台上使用,以及为什么?
请不要说两者完全不同,因为Django更加完整.两者都是您可以在App Engine中使用的"Web框架".
我只是在学习Google App Engine,并试图想出一个很好的方法来管理我与Google Cloud SQL实例的数据库连接(如果你还没有使用GC-SQL,基本上,它是云中的MySQL,有一些限制).
我正在使用带有webapp2框架的python(2.7)GAE环境来处理请求.我知道常见问题解答说,建议每次请求都要与DB建立新的连接,但我不知道建议的关闭连接的方法是什么.每次我尝试在开发过程中删除表时,GC-SQL挂起并且"show processlist"显示有一堆进程(可能是因为我没有关闭数据库)并且其中一个正在等待锁定(可能是这个过程试图放弃表格).这很烦人,迫使我重新启动GC-SQL实例(比如重新启动mysql-server服务,我想).我还认为偶尔存在数据库打嗝,这与我没有真正关闭数据库连接这一事实有关.
那么,例如,我的webapp2.Requesthandler子类实例上是否应该有一个析构函数来断开与DB的连接?GAE对象有时似乎被缓存,所以这也是需要考虑的事情.我想我可以为每个查询连接/查询/断开连接,但这似乎不是最理想的.
我知道这是一个模糊的问题,但我希望在这个领域有所作为的人可以按我的方式提出一些提示.
提前致谢!
更新: 我尝试使用Shay的答案作为起点,围绕需要cursot的方法实现一个包装器.我收到了GAE错误.以下是一个特定于此的新问题:App Engine中Google Cloud SQL的连接限制是什么,以及如何最好地重用数据库连接?
我使用Python和webapp2构建了一个多语言Web应用程序.
我有一个名为Tag的对象,它有多种语言的翻译.出于这个原因,我创建了以下模型:
class Language(ndb.Model):
code = ndb.StringProperty()
name = ndb.StringProperty(indexed=False)
class MultilingualText(ndb.Model):
language = ndb.KeyProperty(kind=Language)
text = ndb.TextProperty(indexed=False)
class Tag(ndb.Model):
translations = ndb.StructuredProperty(MultilingualText, repeated=True, indexed=False)
Run Code Online (Sandbox Code Playgroud)
我想问一下这是否是执行此类任务的正确方法,以及如何将此结构与WTForms一起用于验证等.
非常感谢提前!
我使用带有或不带googleAppEngine的python 2.7的webapp2.我现在正在尝试将它与Python 3.3一起使用
我已经使用PIP安装webapp2安装运行成功但是当我尝试从IDLE导入webapp2时给了我以下错误:
File "<pyshell#0>", line 1, in <module>
import webapp2
File "C:\Python3\lib\webapp2.py", line 571
except Exception, e:
^
Run Code Online (Sandbox Code Playgroud)
我怀疑这是必须更新才能使用Python3 ...?任何人已经这样做了或者我应该等待webapp2的更新版本?是否有任何我们可以访问的Python 3测试版
我尝试def patch():在我的方法中使用一种方法webapp2.RequestHandler来支持部分资源更新,但后来发现在webapp2.py中冻结了允许的方法:
allowed_methods = frozenset(('GET', 'POST', 'HEAD', 'OPTIONS', 'PUT',
'DELETE', 'TRACE'))
Run Code Online (Sandbox Code Playgroud)
在Google AppEngine上部署时,如何扩展webapp2.RequestHandler或修改WSGIApplication类以允许PATCH HTTP方法?
我有一个用 vue 和 firebase/firestore 构建的应用程序。我使用 firebase 模拟器进行本地开发,并尝试将我的开发工作流程与 cypress 集成。但是,如果我从浏览器访问该应用程序,我会在 cypress 中收到错误消息。
Firebase CLI 版本为 7.9.0,Cypress 版本为“^3.8.0”
我用于加载所有内容的 npm 脚本如下:
"start": "firebase emulators:exec --only firestore \"npm run dev:appandtest\"",
"dev:appandtest": "concurrently -n \"app,test\" -c \"bgYellow.black,bgWhite.black\" \"npm:dev:app\" \"npm:dev:test\"",
"dev:app": "webpack-dev-server --config build/webpack.dev.js",
"dev:test": "npx cypress open",
Run Code Online (Sandbox Code Playgroud)
本地服务器在端口 9000 上运行,而 firebase 模拟器在端口 8080 上运行。
事情运行后,如果我从普通浏览器访问应用程序,一切都很好,如此屏幕所示。
普通的
然后我尝试使用此代码运行基本的柏树测试
describe('The Home Page', function () {
it('successfully loads', function () {
cy.visit('/');
});
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
[2019-12-14T15:29:24.725Z] @firebase/firestore: Firestore (6.6.2): Could not reach Cloud Firestore backend. Backend didn't …Run Code Online (Sandbox Code Playgroud) webapp2 firebase firebase-tools cypress google-cloud-firestore
webapp2 ×10
python ×6
wsgi ×2
autocomplete ×1
cypress ×1
django ×1
firebase ×1
http-patch ×1
mysql ×1
python-2.7 ×1
python-3.x ×1
redirect ×1
search ×1
wtforms ×1