标签: webapp2

Google ndb库中的内存泄漏

我认为库中存在内存泄漏ndb但我无法找到.

有没有办法避免下面描述的问题?
您是否有更准确的测试想法来确定问题所在?


这就是我重现问题的方式:

我创建了一个包含2个文件的简约Google App Engine应用程序.
app.yaml:

application: myapplicationid
version: demo
runtime: python27
api_version: 1
threadsafe: yes


handlers:
- url: /.*
  script: main.APP

libraries:
- name: webapp2
  version: latest
Run Code Online (Sandbox Code Playgroud)

main.py:

# -*- coding: utf-8 -*-
"""Memory leak demo."""
from google.appengine.ext import ndb
import webapp2


class DummyModel(ndb.Model):

    content = ndb.TextProperty()


class CreatePage(webapp2.RequestHandler):

    def get(self):
        value = str(102**100000)
        entities = (DummyModel(content=value) for _ in xrange(100))
        ndb.put_multi(entities)


class MainPage(webapp2.RequestHandler):

    def get(self):
        """Use of `query().iter()` was suggested here:
            https://code.google.com/p/googleappengine/issues/detail?id=9610 …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine memory-leaks webapp2 app-engine-ndb

7
推荐指数
1
解决办法
1020
查看次数

Webapp2 Python set_cookie 不支持同站 cookie?

webapp2 文档中没有提到设置SameSitecookie的属性,它似乎是建立在 WebOB 的响应处理程序上的,我检查了 webOB 文档页面,它清楚地显示了'SameSite' flag as an accepted cookie parameter

尽管如此,我还是尝试在 set cookie 中设置它:

self.response.set_cookie(name, secure_cookie, path='/', secure=True,
httponly=True, samesite='lax', expires=expireDate)
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

TypeError: set_cookie() got an unexpected keyword argument 'samesite'

我知道可以使用,self.response.headers.add_header('Set-Cookie', ...但我希望我可以self.response.set_cookie按照 webapp2 文档使用

python cookies google-app-engine webob webapp2

7
推荐指数
1
解决办法
986
查看次数

谷歌应用引擎上的mimetypes.mime_guess()表现得很奇怪

在我的python shell中,我可以做到

>>> import mimetypes
>>> mimetypes.guess_type("ulla.svg")
('image/svg+xml', None)
Run Code Online (Sandbox Code Playgroud)

并且它的行为符合预期,但是,在谷歌应用引擎上运行相同的代码(或至少,这个相同的例子),它返回 (None, None)

class TestHandler(webapp2.RequestHandler):
    def get(self):
        import mimetypes
        self.response.out.write(mimetypes.guess_type("ulla.svg"))
Run Code Online (Sandbox Code Playgroud)

我做错了吗?:)

顺便说一句 - 在我的macbooks shell中它是python 2.7,在app-engine上也是2.7

python google-app-engine mime webapp2

6
推荐指数
1
解决办法
1643
查看次数

如何使用python27 app engine webapp2框架组织文件

我已经完成了python27和app引擎的入门:https://developers.google.com/appengine/docs/python/gettingstartedpython27/

在tut结束时,所有类都在同一个文件(helloworld.py)中,您和您配置路由器以指向文件底部的类的URL路径:

 app = webapp2.WSGIApplication([('/', MainPage),
                           ('/sign', Guestbook)],
                          debug=True)
Run Code Online (Sandbox Code Playgroud)

啧啧没有涉及的是我如何在我的应用程序增长时设置我的类/文件.例如,我将MainPage放在一个单独的文件中,然后在helloworld.py文件中调用'import MainPage'并将路由添加到WSGIApplication中吗?有没有比这更自动化的东西?我该怎么称呼MainPage文件?我应该在哪里存储它?

python google-app-engine python-2.7 webapp2

6
推荐指数
1
解决办法
1167
查看次数

为什么用@ webapp2.cached_property装饰Jinja2实例

webapp2站点(http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html)有一个如何使用的教程webapp2_extras.jinja2,代码如下.

我的问题是:为什么缓存webapp2_extras.jinja2.Jinja2实例返回return jinja2.get_jinja2(app=self.app)?我检查了代码@webapp2.cached_property并发现它将Jinja2实例缓存在一个实例中BaseHandler,它会在请求后被销毁,所以为什么要费心去缓存呢?我在这里错过了什么吗?

import webapp2

from webapp2_extras import jinja2

class BaseHandler(webapp2.RequestHandler):

    @webapp2.cached_property
    def jinja2(self):
        # Returns a Jinja2 renderer cached in the app registry.
        return jinja2.get_jinja2(app=self.app)

    def render_response(self, _template, **context):
        # Renders a template and writes the result to the response.
        rv = self.jinja2.render_template(_template, **context)
        self.response.write(rv)

caching properties jinja2 webapp2

6
推荐指数
1
解决办法
1633
查看次数

如何在Python中使用复选框

我试图在我的HTML中使用复选框,将这些复选框返回到我的python后端,然后如果单击该框,则递增三个计数器.

现在我的HTML如下,工作正常:

<form method="post">
    <input type="checkbox inline" name="adjective" value="entertaining">Entertaining
    <input type="checkbox inline" name="adjective" value="informative">Informative
    <input type="checkbox inline" name="adjective" value="exceptional">Exceptional
</form>
Run Code Online (Sandbox Code Playgroud)

然后在我的python后端我有以下内容:

def post(self):
    adjective = self.request.get('adjective ')

    if adjective :
        #somehow tell if the entertaining box was checked
        #increment entertaining counter
        #do the same for the others
Run Code Online (Sandbox Code Playgroud)

html python checkbox google-app-engine webapp2

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

如何从代码而不是文件渲染django模板

我正在编写一个Google App Engine webapp,它将一些HTML呈现给Django模板.我想要使​​用文件或只是一些非常类似于文件的json来渲染模板.是否可以使用Django将其呈现为读入并存储在数据库中的文件?旧的API.HTML只是api.html的旧版本,但有一些小的改动.将Django渲染到api-html文件可以正常工作.

我知道你不能在GAE上存储文件,我怎样才能动态地使用Django渲染到存储在内存中的HTML?

path = ""
oldAPI = APIVersion().get_by_key_name(version)
if oldAPI is None:
    path = os.path.join(os.path.dirname(__file__), "api.html")
template_values = {
            'responseDict': responseDict,
            }
        if path:
            self.response.out.write(template.render(path, template_values))
        else:
            self.response.out.write(template.render(oldAPI.html,template_values))
Run Code Online (Sandbox Code Playgroud)

python django google-app-engine django-templates webapp2

6
推荐指数
1
解决办法
1413
查看次数

在Visual Studio的Python工具中调试GAE

我可以使用Python工具for Visual Studio 2012 运行我的Google App Engine webapp2应用程序,无需遵循本教程,甚至单步执行服务器初始化代码,但是我无法在获取或发布方法时使用它来解决问题.网站已加载,类似于此视频中显示的main()方法.当我暂停调试器时,它总是在wsgi_server.py中的以下无限循环中结束:

def _loop_forever(self):
  while True:
  self._select()

def _select(self):
  with self._lock:
    fds = self._file_descriptors
    fd_to_callback = self._file_descriptor_to_callback
if fds:
  if _HAS_POLL:
    # With 100 file descriptors, it is approximately 5x slower to
    # recreate and reinitialize the Poll object on every call to _select
    # rather reuse one. But the absolute cost of contruction,
    # initialization and calling poll(0) is ~25us so code simplicity
    # …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine visual-studio webapp2 ptvs

6
推荐指数
1
解决办法
3094
查看次数

使用webapp2会话进行Google Cloud Endpoints身份验证

我的Google Cloud Endpoints API的客户端是一个JavaScript(AngularJS)Web应用程序,托管在与Endpoints API本身相同的Google App Engine应用程序上.我的用户使用webapp2会话(数据存储区)进行身份验证.他们不一定拥有Google帐户.我希望能够向Endpoints API发出请求,这样/api/users/me会返回当前登录用户的用户数据.

首先,我认为我必须为我的App Engine应用程序实现OAuth2提供程序,然后让AngularJS应用程序从我自己的App Engine OAuth提供程序(而不是Google的OAuth提供程序)请求OAuth2访问令牌,就像内置的身份验证机制一样).

但是,此评论建议不要实现我自己的OAuth2提供程序,而是在我的请求中(在消息字段中或在HTTP标头中)向Endpoints API提供任意参数.我猜这个参数应该是一个用户令牌(登录用户特有的一些加密值?).然后应将该值传递给浏览器.那不安全吗?如果可能,我不想在HTTPS上提供我的AngularJS应用程序(以节省成本).

这是OAuth2的一个很好的用例吗?或者OAuth2仅用于授予第三方应用程序访问用户数据的权限?

如果OAuth2不是这样的话:如何将用户令牌安全地传递给浏览器并防止中间人攻击?用户令牌是否应在一定时间后过期?

python google-app-engine oauth-2.0 webapp2 google-cloud-endpoints

6
推荐指数
1
解决办法
1533
查看次数

OData WebApi 2错误处理

在我的Web服务中,我重写了ExceptionHandler,但是我不清楚如何格式化异常以适应OData Error标准.也许我接近它错了,因为我在网上找不到任何例子.

根据我的理解,使用web api 2有一个全局异常处理的概念,您可以使用自定义ExceptionHandler来处理服务中引发的任何异常.仍然期望Exception使用新的IHttpActionResult()更新ExceptionContext.Result.如何格式化输入到IHttpActionResult的数据以格式化为OData错误.

下面是ExceptionHandler的一个片段,我坚持你将如何使用正确的OData HttpResponse消息覆盖context.Result.

public class CustomExceptionHandler: ExceptionHandler
{
    public override void Handle(ExceptionHandlerContext context)
    {
        HttpResponseMessage msg = context.Request.CreateErrorResponse(HttpStatusCode.NotFound, new ODataError
        {
            ErrorCode = context.Exception.Message,
            Message = context.Exception.InnerException.Message,
            InnerError = new ODataInnerError
            {
                Message = context.Exception.InnerException.Message
            }
        });
        context.Result = //How do you wrap the OData HttpResponseMessage into a IHttpActionResult

    }


}
Run Code Online (Sandbox Code Playgroud)

任何建议赞赏,谢谢,D

exception-handling odata webapp2 asp.net-web-api2 odata-v4

6
推荐指数
1
解决办法
713
查看次数