我已经完成了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文件?我应该在哪里存储它?
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)
我可以使用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) 我正在GAE上编写一个应用程序,我有一个URL,它将始终返回XML并将Content-Type设置为"text/xml; charset=utf-8".
我正在使用内置的webapp框架并使用以下代码来设置内容类型并在Web处理程序中返回XML:
self.response.headers.add_header('Content-Type',"text/xml; charset=utf-8")
self.response.out.write(template.render("my_xml",{"key1":"val1"}))
Run Code Online (Sandbox Code Playgroud)
这在本地开发环境中运行良好,但是一旦部署到Google服务器,内容类型始终设置为"text/html; charset=utf-8".
如何Content-Type在Google服务器上运行后确保设置正确?
我刚刚完成了我的应用程序并希望部署它.但是如何运行我的应用程序作为服务/ deamon?
谷歌搜索显示使用一些python库的一些不同的approches,扭曲和我可以运行Python脚本作为服务吗?.但无法弄清楚该怎么做.
有人这样做过吗?有最佳实践方法吗?
..fredrik
我使用webapp2中的auth模块,我想知道如何添加像'facebook:fbuserid12121212'这样的auth_id,并将其添加到用户的auth_id:s列表中.但我发现API中没有允许我这样做的功能.你能告诉我怎么做吗?
谢谢
我从webapp2开始.我的英语不是很好,所以我将用一个例子来解释我的问题:假设我正在构建一个处理汽车信息的应用程序.
我有这些处理程序:
问题是我无法建立到单一视图的链接.
我可以在模板中执行此操作:
<ul>
<li><a href='/cars/view/{{car.id}}'>{{car.model}}</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
但是不喜欢(毕竟DRY原则在哪里?)我想知道是否有一些方法可以做到类似于django,解析模板中的URL,如下所示:
<ul>
<li><a href='{% url cars.view car.id}'>{{car.model}}</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
也许它不在模板中.我尝试过webapp2.url_for()但没有帮助.
非常感谢!
是否有任何与GAE + Python2.7 + webapp2的AJAX实现相关的教程或代码示例.
我试图按照以下说明操作:
http://code.google.com/appengine/articles/rpc.html
但是我收到以下错误:
Traceback (most recent call last):
File "E:\dev\workspace\test\webapp2.py", line 1536, in __call__
rv = self.handle_exception(request, response, e)
File "E:\dev\workspace\test\webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "E:\dev\workspace\test\webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "E:\dev\workspace\test\webapp2.py", line 1101, in __call__
handler = self.handler(request, response)
TypeError: __init__() takes exactly 1 argument (3 given)
Run Code Online (Sandbox Code Playgroud)
这里还有另一个类似的讨论:
Google App Engine Python Protorpc错误:__ call __()只取1个参数(给定3个)
继承人是我在Specialscope的例子中的代码:
main.py
from BaseHandler import BaseHandler
from google.appengine.ext import blobstore
from …Run Code Online (Sandbox Code Playgroud) 如果我有一个POST参数
d={"data": "<span>hello</span>"}
Run Code Online (Sandbox Code Playgroud)
这是一个JSON字符串,它工作正常,request.POST.get('d')包含完整的字符串.但如果我把它改成
d = {"data": "<span>hel;lo</span>"}
print (request.POST.get('d')) #prints '{"data": "<span>hel'
Run Code Online (Sandbox Code Playgroud)
出于某种原因,分号后的任何内容都被切断了.我可以确认这不是Javascript这样做,因为我曾经使用完全相同的javascript代码发布到能够检索数据的PHP API.自从迁移到Python和webapp2以来,我遇到了这个问题.
我有一个python脚本,从命令行获取输入.我只是想修改这个脚本,以便我可以在网上运行它.我希望命令行界面被网页中的简单框替换,一旦执行了脚本,我希望结果显示在网页上,就像在命令行中一样.
任何有关从哪里开始的帮助,使用哪些python包以及采取哪些步骤都将非常感激.
到目前为止,我读了一些关于Google App Engine和web.py的webapp2.我不想使用Django.
谢谢!