我正在开始新的Google App Engine应用程序,目前正在考虑两个框架:Flask和webapp2.我对我以前的App Engine应用程序使用的内置webapp框架非常满意,所以我认为webapp2会更好,我也不会有任何问题.
然而,Flask有很多好的评论,我真的很喜欢它的方法以及我在文档中到目前为止所读到的所有内容,我想尝试一下.但我有点担心我可以面对Flask的限制.
所以,问题是 - 你知道Flask可以带入Google App Engine应用程序的任何问题,性能问题,限制(例如路由系统,内置授权机制等)吗?"问题"是指我无法在几行代码(或任何合理数量的代码和工作)或完全不可能的事情中解决的问题.
作为一个后续问题:你认为Flask中是否有任何杀手级功能可以让我大吃一惊并让我使用它,尽管我可以面对任何问题?
现在我正在做这个:
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write('{"success": "some var", "payload": "some var"}')
有没有更好的方法来使用一些库?
我想为我的python Google App Engine应用程序推出自己的登录系统(而不是使用Google的用户api).
我正在使用webapp2,我注意到有一个webapp2_extras.auth模块和一个不完整的auth教程.
有谁知道如何使用此API创建:
一旦我有电子邮件和密码,我在哪里存储它?在AuthStore?我如何对AuthStore进行身份验证?
如果我使用网址访问我的webapp
/vi/5907399890173952.html
然后它工作,但当我查看日志文件,然后googlebot尝试访问生成异常的类似网址:
/vi/5907399890173952.html%7D%7D
这是什么意思,怎么能作为例外处理?来自python的消息是:
/vi/5251302833520640.html%7D%7D 404 20ms 0kb Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) module=default version=release140319
66.249.67.109 - - [19/Mar/2014:07:53:32 -0700] "GET /vi/5251302833520640.html%7D%7D HTTP/1.1" 404 84 - "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" ms=21 cpu_ms=0 cpm_usd=0.000009 app_engine_release=1.9.1 instance=00c61b117c0bc0f980f2a37a6ac534786055d3ab
E 2014-03-19 15:53:32.678
get() takes exactly 3 arguments (2 given)
Run Code Online (Sandbox Code Playgroud)
我用于网址的正则表达式是
('/vi/(\d+)(\.html?)?', NewHandler)
我想我已经从jinja2模板中发现了泄漏:
{{scored_document.fields.0.value|safe}
我现在用另一个补丁}.
我正在使用新的webapp2(现在是1.6中的默认webapp),我无法弄清楚如何在这样的代码中使尾部斜杠可选:
webapp.Route('/feed', handler = feed)
Run Code Online (Sandbox Code Playgroud)
我试过/feed/?,/feed/*,/feed\/*和/feed\/?,都无济于事.
如何向模板添加传递模型特定的URL.比方说,我想构建一个编辑链接.我猜,使用uri_for()函数将是一个简单的方法.
但以下给出了"UndefinedError:'webapp2'未定义"
{% webapp2.uri_for("editGreeting", greeting.key().id()) %}
Run Code Online (Sandbox Code Playgroud)
或者我应该在MainPage-Request-Handler中准备这些?如果是这样,我不知道如何将它们添加到每个问候语中.
以下代码示例取自:http: //webapp-improved.appspot.com/tutorials/gettingstarted/templates.html
控制器/处理器
class MainPage(webapp2.RequestHandler):
def get(self):
guestbook_name=self.request.get('guestbook_name')
greetings_query = Greeting.all().ancestor(
guestbook_key(guestbook_name)).order('-date')
greetings = greetings_query.fetch(10)
if users.get_current_user():
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
else:
url = users.create_login_url(self.request.uri)
url_linktext = 'Login'
template_values = {
'greetings': greetings,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
Run Code Online (Sandbox Code Playgroud)
模板/视图:
<html>
<body>
{% for greeting in greetings %}
{% if greeting.author %}
<b>{{ greeting.author.nickname }}</b> wrote:
{% else %}
An anonymous person wrote:
{% …Run Code Online (Sandbox Code Playgroud) 现在,跨网站请求伪造在网上很常见.我在部署在Google App引擎上的我自己的网站上面对此问题.我通过检查访问日志来了解这一点.是否有可用于App引擎的XSRF/CSRF库或其他解决方案.并且,它将为我的网站添加多少负载?
我想进行重定向并保留查询字符串.像self.redirect加上发送的查询参数之类的东西.那可能吗?
MongoDb和Python(webapp2)新手.所以,我从mongodb数据库中获取了一些数据.但我无法使用json.dumps返回的数据.这是我的代码:
exchangedata = db.Stock_Master.find({"Country": "PHILIPPINES"}, {"_id" : 0})
self.response.write(json.dumps(exchangedata))
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
TypeError: pymongo.cursor.Cursor object at 0x7fcd51230290 is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
类型exchangedata是pymongo.cursor.Cursor.如何将其转换为json对象?
我试图实现GAE的webapp2会话,但似乎很少有关于它的文档.根据http://webapp-improved.appspot.com/api/webapp2_extras/sessions.html,我的步骤如下:
1.配置并添加配置到主应用程序:
config = {}
config['webapp2_extras.sessions'] = {
'secret_key': 'my_secret_key',
}
app = webapp2.WSGIApplication([...], config=config)
Run Code Online (Sandbox Code Playgroud)
2.在登录处理程序中创建会话
# Delete existent session
--> not mention in the tutorial
# member is found
self.session_store = sessions.get_store(request=handler.request)
self.session['account'] = member.account
Run Code Online (Sandbox Code Playgroud)
3.检查我的程序中的各个位置是否存在会话
if self.session['account']:
# Session exists
Run Code Online (Sandbox Code Playgroud)
4.用户注销时删除会话
--> not mentioned in the tutorial
Run Code Online (Sandbox Code Playgroud)
我的问题:
在会话创建过程中我收到错误消息"...对象没有属性'session'"(步骤2)
如何在步骤2和4中删除会话?
整个会话管理过程是否正确?
谢谢.