标签: webapp2

如何在Heroku中使用Python webapp2处理静态文件?

我现在将我的小型Google App Engine应用程序迁移到Heroku平台.我实际上并没有使用Bigtable,并且webapp2大大降低了我的迁移成本.

现在我一直坚持处理静态文件.

有没有好的做法?如果是的话,请带我到那里.

提前致谢.

编辑

好吧,我现在正在使用paste我的WSGI服务器.而且paste.StaticURLParser()应该是什么我需要实现静态文件处理程序.但是我不知道如何将它与它集成webapp2.WSGIApplication().谁能帮助我?

也许我需要覆盖webapp2.RequestHandler类才能paste.StaticURLParser()正确加载;

import os
import webapp2
from paste import httpserver

class StaticFileHandler(webapp2.RequestHandler):
    u"""Static file handler"""

    def __init__(self):
        # I guess I need to override something here to load
        # `paste.StaticURLParser()` properly.
        pass

app = webapp2.WSGIApplication([(r'/static', StaticFileHandler)], debug=True)


def main():
    port = int(os.environ.get('PORT', 5000))
    httpserver.serve(app, host='0.0.0.0', port=port)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

python heroku static-files webapp2

5
推荐指数
1
解决办法
3298
查看次数

在html模板中打印appengine模型实体id

以下是我拥有的简单数据库模型:

class Notes(db.Model):
  text = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

现在在url处理程序中,我将所有注释发送到模板,如下所示:

class MainPage(webapp2.RequestHandler):
  def get(self):
    notes = Notes.all()
    self.render_template("index.html", {'notes':notes})
Run Code Online (Sandbox Code Playgroud)

在我使用jinja2模板引擎的模板中,我希望id打印每个音符,以便我可以嵌入编辑链接,有点像这样:

{% for note in notes %}
<p>  
 {{ note.text }} <br>
 {{ note.date }} <br>
 (<a href ="edit/{{note.key.id}}">edit </a>)
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但麻烦的是,我没有看到任何打印,代替note.key.id 按照此处 的文档,key类代表数据库实体的唯一键id,它有一个方法,它是一个数值.对于我想要的音符集的单个id音符.

如果我使用django模板引擎我得到{{ notes.key.id }}打印的值,但jinja2我没有看到它.

我怎样才能做到这一点?

python google-app-engine jinja2 webapp2

5
推荐指数
1
解决办法
1143
查看次数

有没有办法压平继承的 jinja 模板?

我有继承自基本模板的 jinja 模板。只是简单的扩展。

例如,在setting.html中:

{% extends "templates/base.html" %}
Run Code Online (Sandbox Code Playgroud)

但这会绊倒聚合物的硫化机,它不理解继承性。那么,有没有办法首先“展平”我的setting.html,即将base.html 拉入setting.html,而不评估变量?

我查看了jinja 的模板 api,但不太清楚什么 api 可以做到这一点?唯一看起来很接近的可能是compile_templates()?但再次从文档中并不清楚这到底是做什么的。

compile_templates(target, extensions=None, filter_func=None, zip='deflated', log_function=None, ignore_errors=True, py_compile=False)
Run Code Online (Sandbox Code Playgroud)

inheritance jinja2 webapp2 vulcanize

5
推荐指数
0
解决办法
389
查看次数

try/ except 不捕获特定类型的异常

我试图捕获函数调用内引发的特定类型的异常。我将函数调用包含在 try/ except 块内,其中 except 块捕获抛出的特定异常。我仍然会获得该异常的系统失败堆栈跟踪,除非我还包含所有异常的常规捕获。在包含该块并检查所捕获的异常的类型时,我发现它正在捕获我想在第一个块中捕获的异常类型。不知道为什么会发生这种情况。

上下文:使用 webapp2 和 ndb 开发 Google 应用程序引擎应用程序。文件函数有一个init .py,它从 exceptions.py 导入所有异常

模拟代码和结构

utils/函数/Exceptions.py

"""
Custom exception types
"""

class InvalidParamsException(Exception):
def __init__(self, msg):
    self.msg = msg

def __str__(self):
    return repr(self.msg)
Run Code Online (Sandbox Code Playgroud)

模型/models.py

import os, sys
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
import utils.functions as func
<-->
class ModelClass(ndb.Model):

    @classmethod
    def new(cls):
         <-->
         raise func.InvalidParamsException("Invalid Params to function!")
         <-->
Run Code Online (Sandbox Code Playgroud)

路线.py

import utils.functions as func
from models import ModelClass

class ModelClassHandler(webapp2.RequestHandler):
    def post(self):
        try:
            new_model = ModelClass.new()
        except func.InvalidParamsException as e: …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine python-2.7 webapp2

5
推荐指数
1
解决办法
4554
查看次数

通过 http Post 请求将 XML 发送到 Web Api 的问题

我想将以下 XML 文档发送到我的 Web Api 2 控制器;但是,该[FromBody]参数始终为空。

这是请求 XML 正文:

<razorInbound server="PortfolioExposureServer" request="lookupRiskPointRecord">
  <caller>RazorClient</caller>
  <responseMode>xml</responseMode>
  <body>
    <conditions>
      <fromOffset>0</fromOffset>
      <top>100</top>
      <condition>
        <keyPath>
          <keyElement nodeOffset='1'>Currency</keyElement>
          <keyElement nodeOffset='2'>ID</keyElement>
        </keyPath>
        <lookupValue>USD</lookupValue>
      </condition>
    </conditions>
  </body>
</razorInbound>
Run Code Online (Sandbox Code Playgroud)

使用Postman发送请求,如下:

POST /api/razorXmlRequest HTTP/1.1
Host: localhost:5000
Content-Type: application/xml
Cache-Control: no-cache
Postman-Token: 6ca91ebf-31e0-77f2-6f81-cb9993b69b1a

<razorInbound server="PortfolioExposureServer" request="lookupRiskPointRecord">
  <caller>RazorClient</caller>
  <responseMode>xml</responseMode>
  <body>
    <conditions>
      <fromOffset>0</fromOffset>
      <top>100</top>
      <condition>
        <keyPath>
          <keyElement nodeOffset='1'>Currency</keyElement>
          <keyElement nodeOffset='2'>ID</keyElement>
        </keyPath>
        <lookupValue>USD</lookupValue>
      </condition>
    </conditions>
  </body>
</razorInbound>
Run Code Online (Sandbox Code Playgroud)

和 Web Api 2 控制器:

注意:该param参数始终为null

我相信我需要一个正确的类定义来正确映射 XML 请求,但我不确定如何构造它。

webapp2 asp.net-web-api2

5
推荐指数
2
解决办法
2万
查看次数

基于脚本进度的动态进度条?

我有一个使用 webapp2 框架的 Google App Engine 应用程序,它与 MySQL 数据库交互。应用程序的用户可以上传数据。在上传过程中,我想显示一个进度条,因为它可能需要几分钟。
根据我所看到的其他主题(主要是:这个题目这一次),我工作的一个JSON / JavaScript的解决方案,这都是新的我。

如果我传递一个随机数,进度条本身正在工作。但是,我无法弄清楚如何从 Python 脚本“加载”不断变化的值。

这是 HTML/CSS/Javascript:

HTML:
<div id="myProgress">
    <div id="myBar"</div>
</div>  

CSS:
#myProgress {width: 300px;
height: 30px;
background-color: #ddd;
}
#myBar {width: 1%;
height: 30px;
background-color: #4CAF50;
}   

Javascript:     
<script type="text/javascript">
function move() {
    var elem = document.getElementById("myBar");   
    var width = 1;
    var id = setInterval(frame, 1000);
    function frame() {
        if (width >= 100) {
            clearInterval(id);
        } 
        else {
            //var randomnumber = Math.floor(Math.random() * …
Run Code Online (Sandbox Code Playgroud)

html javascript python json webapp2

5
推荐指数
1
解决办法
2199
查看次数

webapp2.Route带有可选的前导部分

我正在学习webapp2框架及其强大的Route机制.

我的应用程序应该接受这样的URI:

/poll/abc-123
/poll/abc-123/
/poll/abc-123/vote/       # post new vote
/poll/abc-123/vote/456    # view/update a vote
Run Code Online (Sandbox Code Playgroud)

民意调查可以选择组织成类别,因此上述所有内容也应该如下:

/mycategory/poll/abc-123
/mycategory/poll/abc-123/
/mycategory/poll/abc-123/vote/
/mycategory/poll/abc-123/vote/456
Run Code Online (Sandbox Code Playgroud)

我的配置错误:

app = webapp2.WSGIApplication([
    webapp2.Route('/<category>/poll/<poll_id><:/?>', PollHandler),
    webapp2.Route('/<category>/poll/<poll_id>/vote/<vote_id>', VoteHandler),
], debug=True)
Run Code Online (Sandbox Code Playgroud)

问题:如何修复配置?

如果可能,应针对GAE CPU时间/托管费进行优化.例如,如果我为每个条目添加两行可能会更快:一行包含类别,另一行没有类别...

google-app-engine webapp2

4
推荐指数
1
解决办法
2490
查看次数

如何正确分配_?

我希望我的id为<999999999,但现在尝试编程它似乎有相反的效果,我只是让id更大,当我尝试分配id开始>结束?

start, end = User.allocate_ids(max=999999999)
logging.info('start %d' % start)
logging.info('end %d' % end)
lower = start if start < end else end
key = User(id=lower).put()
logging.info('key: '+str(key))
user = key.get()
user.add_auth_id(email)
Run Code Online (Sandbox Code Playgroud)

我的日志输出显示分配的ID错误:

2012-02-13 03:19:07.396 start 98765439124
I 2012-02-13 03:19:07.396 end 98765439123
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

更新

我最终使用的脏的解决方法是制作一种自己的ID系统,我不应该这样做,但它是这种情况下唯一的解决方案,我不认为这会产生冲突或重复,如果实体开始填充,它可能会很慢up,但是现在这似乎是一个对用户可接受的解决方案,虽然看起来可能看起来不那么好看代码:

    new_id = random.randint(1,999999999)
    logging.info('testing new id: %d' % new_id)
    while User.get_by_id(new_id) != None:
        new_id = random.randint(1,999999999)
    logging.info('creating new id: %d' % new_id)
    key = User(id=new_id).put()
Run Code Online (Sandbox Code Playgroud)

python google-app-engine python-2.7 webapp2 google-cloud-datastore

4
推荐指数
1
解决办法
1278
查看次数

为什么webapp2 auth模型使用唯一的表?

我正在将webapp2 auth实现到我的代码库中,并希望了解这个怪癖:

models.py中,我看到它表明:

为了在创建新属性时确保属性唯一性User,我们首先Unique为这些属性创建 记录,如果一切顺利,我们可以保存新User记录::

对我来说,这似乎是一种非常复杂的测试唯一性的方法,说实话,我并不完全理解"create_multi"函数正在做什么......这可能就是为什么我在这里有点困惑.我的思考过程是:

只需快速查询以查看数据存储区中是否存在用户名(auth.id).如果没有那么put().

我知道我错过了什么,有人可以向我解释一下吗?我有一种预感,也许代码是在那里输入的,这样,如果人们想要,有多个唯一身份就很容易?

谢谢!

ps显然,webapp2代码的灵感来自于这段编码.

google-app-engine webapp2

4
推荐指数
1
解决办法
514
查看次数

如何使用webapp2解析path-parameter

我从一个Java REST背景来PythonGoogle App Engine's.我需要一些使用webapp2路径参数的帮助.下面是Java如何读取请求的示例.有人请将代码翻译成python如何阅读它webapp2

// URL: my_dogs/user_id/{user_id}/dog_name/{a_name}/breed/{breed}/{weight}

@Path("my_dogs/user_id/{user_id}/dog_name/{a_name}/breed/{breed}/{weight}")
public Response getMyDog(
    @PathParam("user_id") Integer id,
    @PathParam("a_name") String name,
    @PathParam("breed") String breed,
    @PathParam("weight") String weight
){

//the variables are: id, name, breed, weight.
///use them somehow

}
Run Code Online (Sandbox Code Playgroud)

我已经走了过来例子在谷歌(https://developers.google.com/appengine/docs/python/gettingstartedpython27/usingwebapp).但我不知道如何扩展简单

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

google-app-engine python-2.7 webapp2 path-parameter

4
推荐指数
1
解决办法
4133
查看次数