或者相反,首先在Django,Flask,Rails中构建后端,然后附加一个Angular.js应用程序呢?有没有一个“正确”的方式做,或者它只是一个个人喜好到底?
我也不确定是否根据Flask或Angular.js来构造我的项目?社区实践。
例如,Flask的minitwit应用程序的结构如下:
minitwit |-- minitwit.py |-- static |-- css,js,images,etc... `-- templates |-- html files and base layout
Angular.js教程应用程序的结构如下:
angular-phonecat |-- app `-- css `-- img `-- js `-- lib `-- partials `-- index.html |-- scripts `-- node.js server and test server files
我可以自己画一个Flask应用程序,它很容易看到Angular.js应用程序像ToDo List本身,但是当涉及到使用这两种技术,我不明白他们如何在一起工作。当你已经有Angular.js时,看起来我不需要一个服务器端的web框架,一个简单的Python web服务器就足够了。在Angular to-do应用中,他们使用MongoLab使用Restful API与数据库通信。没有在后端有一个web框架。
也许我很困惑,Angular.js只是一个花哨的jQuery库,所以我应该使用,就像我会在我的Flask项目中使用jQuery(假设我改变Angular的模板语法为不与Jinja2冲突的东西) 。我希望我的问题有一些意义。我主要工作在后端,这个客户端框架对我来说是一个未知的领域。
app |-- app.py |-- static |-- css |-- img |-- js |-- templates
正如btford所说,如果你正在做一个Angular应用程序,你将需要专注于使用Angular客户端模板,并远离服务器端模板。使用render_template(‘index.html’)将导致Flask将你的角模板解释为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挂钩到你的角度应用程序。
编辑:我把一个应用程序模板,虽然有点复杂,我上面描述,说明了如何使用AngularJS Flask构建应用程序,完成AngularJS和一个简单的Flask API之间的通信。这里是如果你想检查出:https://github.com/rxl/angular-flask