热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

技术分享:使用Flask、AngularJS和Jinja2构建高效前后端交互系统

本文由编程笔记#小编为大家整理,主要介绍了Flask + AngularJS + Jinja2 实现前后端交互相关的知识,希望对你有一定的参考价值。 更多精
本文由编程笔记#小编为大家整理,主要介绍了Flask + AngularJS + Jinja2 实现前后端交互相关的知识,希望对你有一定的参考价值。









更多精彩,请点击上方蓝字关注我们!












This browser does not support music or audio playback. Please play it in Weixin or another browser.
Flask + AngularJS + Jinja2 实现前后端交互






#  1.需求


- 做一个网页,需要一个由后端控制内容的菜单。一开始的时候是所有内容都在jinja2模板中进行渲染。后面发现这样每个视图都需要传菜单的数据。就想着能不能写一个接口,前端只要请求这个接口进行渲染就可以了,这样就可以只在base模板中写菜单,后面的直接继承即可。





# 2.框架选择


- 由上面的需要,一开始还不知道这么写前端,只知道用ajax请求菜单的接口,能是能拿到数据。但是对于基板小白的笔者来说,怎样将拿到的数据放在该放的位置就是问题了。  




- 好在前几天在看Spring Could 框架的时候看到了一篇教程,讲的是如何用AngularJS 消费RESTful web服务。看到里面用的AngularJS 很简单就实现了与Spring Could的交互。只要引入angularjs.js就能用了,其请求后端的`$http`也跟ajax的`get`方法差不多,最方便的是拿到数据后传给`$scope`就可以嵌入到html的任何地方,就像jinja2。




- 当然也有不足的地方。一是,AngularJS 的变量获取字符和jinja2的冲突了,都是用的`{{   }}`。二是,在手机上好像不能用,目前还不知道是什么原因。




# 3.设计开发






`/BookStore/static/js/fronts/get_book_type.js`















```Javascriptangular.module('demo', []).controller('Hello', function($scope, $http) { $http.get('http://127.0.0.1:5000/get_book_type'). then(function(response) { $scope.types = response.data; console.log($scope.types) });});```


- js文件这里就跟ajax差不多,用`$http.get`请求数据,然后保存到`$scope`。























<html ng-app="demo"><head> <title>Hello AngularJStitle> <script type="text/Javascript" src="{{ url_for('static', filename='js/angular.min.js') }}">script> <script type="text/Javascript" src="{{ url_for('static', filename='js/fronts/get_book_type.js') }}">script>head>

<body><div ng-controller="Hello"> <ul> <li ng-repeat="type in types"><a href="/get_nav_data?book_type={{'{{type}}'}}">{{ '{{type}}' }}a>li> ul>div>body>html>```


- html首先需要导入angular.min.js文件,这里是在官网下载好了的,也可以用国内的cdn加速。还要导入上面用来获取后端数据的get_book_type.js文件。




- 然后就是设置angularjs的html标签属性。`ng-app="demo"`是作用域,`ng-cOntroller="Hello"`直译控制器(还没看过教程),`ng-repeat="type in types"`这个是循环语句,我从后端传来的是数组,可以用循环取出来。




# 4.自测


- 在前端打印后端传来的数据,ok没问题   


Flask + AngularJS + Jinja2 实现前后端交互


       


- 在项目外测试的结果ok


Flask + AngularJS + Jinja2 实现前后端交互


- 加入到项目中,将菜单放到base.html模板中,结果也ok


Flask + AngularJS + Jinja2 实现前后端交互


Flask + AngularJS + Jinja2 实现前后端交互




# 5.后端Flask实现















```python@bp.route('/get_book_type')def get_book_type(): book_type_list = choice_book_type() # 解决跨域问题:https://blog.csdn.net/weixin_42902669/article/details/90728697 resp = jsonify(book_type_list) resp.headers['Access-Control-Allow-Origin'] = '*' # resp.headers['"Access-Control-Allow-Methods"'] = '"PUT,POST,GET,DELETE,OPTIONS"' return resp ```


Flask + AngularJS + Jinja2 实现前后端交互




- 看了几篇解决方案,都不太行,要么场景不符,要么实现起来太复杂。这里我就只有一个接口而已,没必要搞的这么复杂。




- 好在后面找到了简单又好用的方法。就是上面用的,在接口的response响应头中添加`Access-Control-Allow-Origin`允许的的跨域请求就ok了。




# 6.总结


1. 经过这个例子才发现Flask 的jsonify()返回的是一个reponse类对象`


`,之前一直都只知道直接`return jsonify()`其功能是可以将python的数据类型转为json并返回。现在想想,感觉傻了。视图函数返回的是response响应体,那jsonify返回的不就是response了嘛!


2. 是前后端分离开发会遇到请求跨域的问题。


3. AngularJS用起来真香,不过在手机浏览器上AngularJS没有成功渲染数据,有空的时候可以好好的深入了解一下。










完整的项目代码库:https://github.com/caisi35/BookStore









从CSDN的Markdown编辑器复制过来的:https://blog.csdn.net/qq_43920024/article/details/112252803

















公众号ID和密码一样












Flask + AngularJS + Jinja2 实现前后端交互










































Flask + AngularJS + Jinja2 实现前后端交互




扫码关注


有趣的灵魂在等你















我就知道你“在看”














推荐阅读
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文探讨了为何采用RESTful架构及其优势,特别是在现代Web应用开发中的重要性。通过前后端分离和统一接口设计,RESTful API能够提高开发效率,支持多种客户端,并简化维护。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 前言叨逼叨iOS上传文件,可能有很多第三方的框架之类的,比如AFN或者Alamofire之类的框架,但是今天要谈论的是原生的API是如何进行文件上传。兵 ... [详细]
  • 构建Filebeat-Kafka-Logstash-ElasticSearch-Kibana日志收集体系
    本文介绍了如何使用Filebeat、Kafka、Logstash、ElasticSearch和Kibana构建一个高效、可扩展的日志收集与分析系统。各组件分别承担不同的职责,确保日志数据能够被有效收集、处理、存储及可视化。 ... [详细]
  • 本文介绍了Elasticsearch (ES),这是一个基于Java开发的开源全文搜索引擎。ES通过JSON接口提供服务,支持分布式集群管理和索引功能,特别适合大规模数据的快速搜索与分析。 ... [详细]
author-avatar
嗳灬到此为止_769_836
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有