标签: webapp2

部分匹配GAE搜索API

使用GAE搜索API可以搜索部分匹配吗?

我正在尝试创建自动完成功能,其中该术语将是一个部分词.例如.

> b
> bui
> build

将全部归还"建筑".

如何用GAE实现这一目标?

python search google-app-engine autocomplete webapp2

13
推荐指数
1
解决办法
6037
查看次数

了解Python WSGI应用程序中的全局对象持久性

请考虑我在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 ...

假设以上是正确的(如果没有,请纠正我)...

  1. 我怎么能处理我想要一个仅在请求的生命周期内持久化的全局变量的场景?我可以在RequestHandler类中放置一个实例变量,但是我导入的实用程序模块如何使用全局变量来存储消息对象呢?
  2. 是否有某种技术可以重置所有变量,或强制重新实例化环境?
  3. 全球环境是否会无限期地持续存在,还是会在某个时刻自行重置?
  4. 这个GAE是否具体,或者wsgi全局持久性在任何服务器场景中都是一样的吗?

编辑:

这是使用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)

这些也会在请求之间递增

python google-app-engine wsgi webapp2

12
推荐指数
2
解决办法
6818
查看次数

webapp2重定向解释

我有时候不确定如何使用webapp2.redirect.

有没有时间我应该使用 self.redirect("/blah")而不是return self.redirect("/blah")

这是我对时间线的理解/猜测:(有时候我很困惑,如果响应对象做了什么或者webapp2是否这样做)

  1. 我访问我的多线程网站www.mysite.com/name/robert,chrome发送GET请求(假设此请求是文本文件)
  2. webapp2抓取这个"文本文件"并将其转换为webapp2.Request.webapp2也创建了一个新的webapp2.Response.
  3. 不知何故,请求URL被提供给路由器以进行匹配(通过webapp2或响应).适当的RequestHandler被实例化.使用适当的参数调用RequestHandler的get()方法.
  4. 在这段时间内,只有一个请求和一个响应.
  5. get()方法调用response.out.write("hello world")向响应体添加"hello world"?
  6. get()方法调用self.redirect('/ foo')
  7. 东西发生了
  8. get()方法调用self.out.write("bye world")
  9. 响应被发送到包含hello world的客户端,添加了什么食物,再见世界

初始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方法,如果是,那么可能存在的上下文是否已恢复?

对不起,如果这有点拗口,我试着解释一下我想知道的:)

也许更容易要求使用重定向的一些用例(做和不做).

google-app-engine redirect wsgi webapp2

12
推荐指数
1
解决办法
1万
查看次数

保持NDB数据库中属性的唯一性

NDB模型包含两个属性:emailpassword.如何避免向数据库添加两条记录相同email?对于属性,NDB没有UNIQUE选项,就像关系数据库那样.

email在添加之前检查new 不在数据库中 - 不会让我满意,因为两个并行进程可以同时进行检查并且每个进程都添加相同email.

我不确定交易可以在这里提供帮助,在阅读了一些手册之后我感觉不到这种印象.也许是同步交易?这是一次一个吗?

google-app-engine webapp2 app-engine-ndb

12
推荐指数
1
解决办法
4295
查看次数

Django vs App Engine上的webapp2

我想知道您对这两个Web框架(Django和webapp2)中的哪一个更适合在App Engine平台上使用,以及为什么?

请不要说两者完全不同,因为Django更加完整.两者都是您可以在App Engine中使用的"Web框架".

python django google-app-engine python-2.7 webapp2

11
推荐指数
1
解决办法
9074
查看次数

在Google Cloud SQL(GAE)Python应用程序中管理数据库连接的好方法是什么?

我只是在学习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 mysql google-app-engine webapp2 google-cloud-sql

10
推荐指数
2
解决办法
4225
查看次数

如何使用webapp2在Python中建模多语言对象

我使用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一起用于验证等.

非常感谢提前!

python google-app-engine wtforms webapp2

10
推荐指数
1
解决办法
647
查看次数

webapp2与python3

我使用带有或不带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测试版

python compatibility python-3.x webapp2

10
推荐指数
2
解决办法
3136
查看次数

Google AppEngine WebApp2上的PATCH方法处理程序

我尝试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方法?

google-app-engine webapp2 http-patch

10
推荐指数
1
解决办法
1549
查看次数

无法使用 cypress 使用 firestore 本地模拟器测试应用程序

我有一个用 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

10
推荐指数
1
解决办法
1457
查看次数