我对这个疯狂的MV*客户端框架还是个新手。它不一定是AngularJS,但我选择它是因为它对我来说比Knockout, Ember或Backbone更自然。工作流是怎样的?人们是先用AngularJS开发一个客户端应用程序,然后再把后端连接到它上面吗?
或者反过来,先在Django、Flask、Rails中构建后端,然后再将AngularJS应用程序附加到它上面?是否存在一种“正确”的做法,或者最终只是个人喜好?
我也不确定是否根据Flask或AngularJS结构我的项目?社会实践。
例如,Flask的minitwit应用的结构是这样的:
minitwit
|-- minitwit.py
|-- static
|-- css, js, images, etc...
`-- templates
|-- html files and base layout
AngularJS教程应用的结构是这样的:
angular-phonecat
|-- app
`-- css
`-- img
`-- js
`-- lib
`-- partials
`-- index.html
|-- scripts
`-- node.js server and test server files
我可以单独描绘一个Flask应用程序,也很容易看到像ToDo List这样的AngularJS应用程序,但当涉及到使用这两种技术时,我不明白它们是如何协同工作的。当你已经有了AngularJS时,我似乎不需要服务器端web框架,一个简单的Python web服务器就足够了。例如,在AngularJS的待办事项应用中,他们使用MongoLab通过Restful API与数据库对话。没有必要在后端有一个web框架。
也许我只是非常困惑,AngularJS只不过是一个花哨的jQuery库,所以我应该像在我的Flask项目中使用jQuery一样使用(假设我改变了AngularJS模板语法,使其与jinj2不冲突)。我希望我的问题能让你明白。我主要在后端工作,这个客户端框架对我来说是一个未知的领域。
我将开始组织Flask应用程序的标准结构如下:
app
|-- app.py
|-- static
|-- css
|-- img
|-- js
|-- templates
正如btford提到的,如果你正在开发一个Angular应用,你会想要专注于使用Angular客户端模板,而远离服务器端模板。使用render_template('index.html')会导致Flask将你的angular模板解释为jinja模板,所以它们不会正确呈现。相反,你会想要做以下事情:
@app.route("/")
def index():
return send_file('templates/index.html')
注意,使用send_file()意味着文件将被缓存,所以你可能想要使用make_response()来代替,至少在开发中:
return make_response(open('templates/index.html').read())
然后,构建应用程序的AngularJS部分,修改应用程序的结构,使其看起来像这样:
app
|-- app.py
|-- static
|-- css
|-- img
|-- js
|-- app.js, controllers.js, etc.
|-- lib
|-- angular
|-- angular.js, etc.
|-- partials
|-- templates
|-- index.html
确保index.html包含AngularJS,以及其他文件:
<script src="static/lib/angular/angular.js"></script>
此时,您还没有构造RESTful API,因此可以让js控制器返回预定义的示例数据(只是临时设置)。当你准备好了,实现RESTful API,并使用angular-resource.js将它连接到你的angular应用。
编辑:我把一个应用模板放在一起,虽然比我上面描述的要复杂一些,但它说明了如何用AngularJS + Flask构建应用,完成AngularJS和一个简单的Flask API之间的通信。如果你想看的话,这里是:https://github.com/rxl/angular-flask
我将开始组织Flask应用程序的标准结构如下:
app
|-- app.py
|-- static
|-- css
|-- img
|-- js
|-- templates
正如btford提到的,如果你正在开发一个Angular应用,你会想要专注于使用Angular客户端模板,而远离服务器端模板。使用render_template('index.html')会导致Flask将你的angular模板解释为jinja模板,所以它们不会正确呈现。相反,你会想要做以下事情:
@app.route("/")
def index():
return send_file('templates/index.html')
注意,使用send_file()意味着文件将被缓存,所以你可能想要使用make_response()来代替,至少在开发中:
return make_response(open('templates/index.html').read())
然后,构建应用程序的AngularJS部分,修改应用程序的结构,使其看起来像这样:
app
|-- app.py
|-- static
|-- css
|-- img
|-- js
|-- app.js, controllers.js, etc.
|-- lib
|-- angular
|-- angular.js, etc.
|-- partials
|-- templates
|-- index.html
确保index.html包含AngularJS,以及其他文件:
<script src="static/lib/angular/angular.js"></script>
此时,您还没有构造RESTful API,因此可以让js控制器返回预定义的示例数据(只是临时设置)。当你准备好了,实现RESTful API,并使用angular-resource.js将它连接到你的angular应用。
编辑:我把一个应用模板放在一起,虽然比我上面描述的要复杂一些,但它说明了如何用AngularJS + Flask构建应用,完成AngularJS和一个简单的Flask API之间的通信。如果你想看的话,这里是:https://github.com/rxl/angular-flask