如何从 Python Pyramid 为 AngularJS 应用程序提供 index.html 文件?

Posted

技术标签:

【中文标题】如何从 Python Pyramid 为 AngularJS 应用程序提供 index.html 文件?【英文标题】:How should an index.html file be served from Python Pyramid for an AngularJS app? 【发布时间】:2013-06-22 02:18:36 【问题描述】:

我正在使用 AngularJS 进入单页应用程序,但不是使用 Node 或类似的,我最喜欢服务器上的 Python。因此,鉴于我对 Pyramid 有点熟悉,我计划使用 pyramid_rpc 模块将 JSON 对象返回给客户端应用程序。这一切都很简单,但是,提供包含 AngularJS 初始 AngularJS 应用程序的起始索引文件的最佳方式是什么?通常,静态文件是从static 目录提供的,但是从根目录提供index.html 文件有什么问题吗?或者我应该使用带有渲染器的视图可调用和 '/' 路由到 html 模板?话虽如此,Pyramid 对于这种应用程序是否矫枉过正?任何建议都会很棒。

【问题讨论】:

【参考方案1】:

如果您打算返回一些 JSON 响应,那么 Pyramid 是一个不错的选择。但我不建议使用pyramid_rpc。 JSON-RPC 是一种用于服务器之间的 RPC 通信的协议。直接的 json 响应更适合大多数客户端(如浏览器),例如只是一组返回 JSON 响应以响应 GET/POST 请求的路由。这也是提供index.html 的好地方,可能有一个很好的http_cache 参数来防止客户端过于频繁地请求该页面(当然你可以进一步优化这条路线,但你应该把它留到以后)。

config.add_route('index', '/')
config.add_route('api.users', '/api/users')
config.add_route('api.user_by_id', '/api/users/userid')

@view_config(route_name='index', renderer='myapp:templates/index.html', http_cache=3600*24*365)
def index_view(request):
    return 

@view_config(route_name='api.users', request_method='POST', renderer='json')
def create_user_view(request):
    # create a user via the request.POST parameters
    return 
        'userid': user.id,
    

@view_config(route_name='api', request_method='GET', renderer='json')
def user_info_view(request):
    userid = request.matchdict['userid']
    # lookup user
    return 
        'name': user.name,
    

【讨论】:

Pyramid 不喜欢索引视图中的渲染器。 KeyError('renderer factories', '.html')。我找不到任何关于在没有模板引擎的情况下呈现纯 HTML 的信息。线索? 你不能渲染“纯 HTML”。您呈现一个模板,其中纯 html 将是一个子集。我建议只制作一个名为 index.html.mako 的模板来呈现您想要的 html。

以上是关于如何从 Python Pyramid 为 AngularJS 应用程序提供 index.html 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Python Web框架:Django vs Flask vs Pyramid

使用 React 和 Pyramid(微服务架构)进行身份验证,如何存储“会话数据”?

选择一个 Python Web 框架:Django vs Flask vs Pyramid

使用 Python3 在 Pyramid 中使用 Websocket

在 Elastic Beanstalk 上部署 Pyramid 应用程序

python 一个简单的Pyramid插件的例子