flask 接口 让别人能访问_flask搭建一个前后端分离的系统

我们通常说三端,pc端,android端和ios端。如果前后端不分离,相当是要做三套系统。如果前后端分离的话,可以共用一个后端,前端各自做自己的,不用管后端。

前后端不分离
在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。

这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。

61539e0b6fa8ad5b49e3f036714aa2d9.png

前后端分离
在前后端分离的应用模式中,后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。

在前后端分离的应用模式中 ,前端与后端的耦合度相对较低。

41da746363de9d971e97d0b2402d7ac4.png

在前后端分离的应用模式中,我们通常将后端开发的每个视图都称为一个接口,或者API,前端通过访问接口来对数据进行增删改查。

OK, 我们来尝试用vue做前端,flask做后端,来做一个前后端分离的系统。

首先用CLI来装vue.
Vue- CLI是vue官方提供的脚手架工具,默认已经帮我们搭建好了一套利用webpack管理vue的项目结构。

我们网上看到的很多文档,都是CLI2的,都会有各种配置文件。我们现在用CLI3,就不需要怎么配置。省心很多。

在Vue- CLI3以后生成的项目结构中已经没有了build文件夹和config文件夹。
首先,我们要配置源:

npm config set registry https://registry.npm.taobao.org

或者:

npm install --registry=https://registry.npm.taobao.org

ab88e3a6c8a76446c0d572881ebe24e0.png


全局安装:

npm install -g @vue/cli

检查是否安装成功:

vue -V

创建项目:

vue create my-project

0ee205c1b9a94f8943aa8766d9fbadc5.png

项目就创建好了,打开看一下

4c246144390d0ca918f7a621f0a06563.png

src文件夹:代码文件夹
|----assets文件夹: 存储项目中自己的一些静态文件(图片/字体等)
|----components文件夹: 存储项目中的自定义组件(小组件,公共组件)
|----views文件夹:存储项目中的自定义组件(大组件,页面级组件,路由级别组件)
|----router文件夹:存储VueRouter相关文件
|----store文件夹:存储Vuex相关文件
|----App.vue:根组件
|----main.js:入口js文件

运行:

npm run serve

c4e0c01bcd3035f55d3cfd48f8058fc1.png

浏览器里面输入地址,就可以看到页面了。

CLI3里面还有一个可以用UI界面来控制的。
敲入:

vue ui

就可以通过ui来创建项目,配置插件和打包了,很方便的。

好了,看完前端,来配置后端:
Python 不像 Node.js,通过 NPM 安装包时,只需要一个参数就能区分全局和当前项目环境,安装在当前项目环境的包永远不会影响其它的项目环境。但是 Python 不行,所以为了各个项目之间的环境独立,我们需要安装 virtualenv,把每个项目都放在一个封闭的虚拟环境中,这样项目彼此间就不会影响了。
安装 virtualenv:

pip install virtualenv

创建虚拟环境:

virtualenv venv

venv 是虚拟环境的名字,所以只要你喜欢,换成什么都可以。
进入虚拟环境:

venvScriptsactivate

退出虚拟环境:
venvScriptsdeactivate
安装 Flask:

pip install Flask

安装 flask-cors,用来解决开发时的跨域问题:

pip install flask-cors

安装 pylint,用来检查代码:

pip install pylint

安装 yapf,用来格式化代码:

pip install yapf

先将前端的代码写好,现在对vue还不是太熟,就简单写一个index:

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="icon" href="<%= BASE_URL %>favicon.ico"><script src="https://unpkg.com/axios/dist/axios.min.js"></script><title><%= htmlWebpackPlugin.options.title %></title></head><body><noscript><strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><!-- built files will be auto injected --><input v-model="message"><button type="button"  @click="get_password">submit</button><p>account is: {{ message }}</p><p>password is: {{ password }}</p><script>var v1 = new Vue({el: '#app1',data: {message: 'stest',password: '',},watch : {my(v) {this.password = this.get_password();}},methods: {get_password() {axios.get('/accounts', {headers: {'Access-Control-Allow-Origin': '*',},crossDomain: true,contentType: "application/json",params: {account: this.message,//接口配置参数(相当于url?id=xxxx)},}).then((res) => {console.log(res.data['password']);//处理成功的函数 相当于successthis.password = res.data['password']}).catch(error => console.log(error))}}})</script></body>
</html>

然后在项目里面建一个文件夹,叫backend,建一个app.py

from flask import Flask,render_template,request,jsonifyapp = Flask(__name__)# 通过 static_folder 指定静态资源路径,以便 index.html 能正确访问 CSS 等静态资源
# template_folder 指定模板路径,以便 render_template 能正确渲染 index.html
app = Flask(__name__, static_folder="../dist/static", template_folder="../dist")@app.route('/')
def index():'''当在浏览器访问网址时,通过 render_template 方法渲染 dist 文件夹中的 index.html。页面之间的跳转交给前端路由负责,后端不用再写大量的路由'''return render_template("index.html")@app.route('/accounts', methods=['GET'])
def get_accounts():if request.method == "GET":username = request.args.get("account")password = "aaa" #query_account(username)if password == "":return "no result"else:#return render_template("home.html",message=username,password=password)return jsonify({"password": password})if __name__ == '__main__':app.run()

接着将前端build一下,生成一个dist目录

0f147dba04047e4e6956dcab8db48b44.png

然后运行:

flask run

浏览器中输入:127.0.0.1:5000

f1bc581b7800d88ab97d669d9c5c1087.png

看起来通了。
这个关键点是:

# 通过 static_folder 指定静态资源路径,以便 index.html 能正确访问 CSS 等静态资源
# template_folder 指定模板路径,以便 render_template 能正确渲染 index.html
app = Flask(__name__, static_folder="../dist/static", template_folder="../dist")

美中不足是,vue还不熟练,还有些小问题要处理。

好了,前后端能通了,也能融合到一起了。

更多精彩,请关注微信公众号:python粉丝团

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC下5中参数类型传递

1、普通参数 //普通参数:请求参数名与形参名不同RequestMapping("/commonParamDifferentName")ResponseBodypublic String commonParamDifferentName(RequestParam("name") String username, int age){System.out.println("普通参数传递:username:&qu…

centos 没有nmtui命令_Linux free 命令

在Linux/Unix 系统上&#xff0c;free是一个很受系统管理员欢迎的命令&#xff0c;它是一个功能强大的工具&#xff0c;他能以一种易读的方式把内存使用情况展示出来free 展示了系统中空闲和已经使用了的物理内存、交换内存以及内核的缓冲区和页面缓存&#xff0c;所有展示的信…

laravel 队列学习

s d f大撒发转载于:https://www.cnblogs.com/toyanglei/p/5911707.html

spring中注解来创建bean

一、 核心配置文件中的组件来扫描对应包下面的所有类来匹配。 当我们使用ApplicationContext实例化的对象调用getBean函数获取bean的时候&#xff0c;内部时根据Component内的值来确定创建哪个对象&#xff1a; Component中的值就类似之前bean配置中id的作用一样。 二、纯注解…

django设置超级管理员_Django的简介与安装

Django的简介与安装Django 是用 Python 开发的一个免费开源的 Web 框架&#xff0c;可以用来快速搭建优雅的高性能网站。它采用的是“MVC”的框架模式&#xff0c;即模型 M、视图 V 和控制器 C。 Django 最大的特色&#xff0c;在于将网页和数据库中复杂的关系&#xff0c;转化…

操作目录下的文件或目录

1、显示/var目录下所有以l开头&#xff0c;以一个小字母结尾&#xff0c;且中间出现一位数字的文件或目录&#xff1b; # ls /var/l*[[:digit:]]*[[:lower:]] 2、显示/etc目录下&#xff0c;以任意一位数字开头&#xff0c;且以非数字结尾的文件或目录&#xff1b; …

SpringMVC的准备工作

一、 先通过Maven创建一个webapp项目 创建完成之后在pom文件中设置一些基本的信息&#xff1a; 1、打包方式 <packaging>war</packaging> 以war包的形式打包 2、相关依赖 现阶段只有3个&#xff1a;SpringMVC、thymeleaf与Spring整合、ServletAPI <dependencie…

postman安装报错 无法定位_接口测试工具postman安装及使用

目前的postman插件如果想正常使用&#xff0c;必须安装Postman Interceptor插件&#xff0c;这样才能直接使用chrome浏览器的cookie等信息&#xff0c;否则postman是无法完成老版本的功能的。直接使用chrome appstore安装是没有问题的&#xff0c;但是如果是离线安装&#xff0…

SpringMVC之注解RequestMapping

一、RequestMaapping的基本介绍 RequestMaapping的功能就是将请求和处理请求和处理请求的控制器关联起来&#xff0c;建立映射关系&#xff0c;当DispathcerServlet接收到请求&#xff0c;会从Controller中找对应的方法来处理该请求。 eg: Controller RequestMapping("/…

UVa11988 Broken Keyboard(练习链表使用)

向量和数组的优势是可以随机的存取元素和在末尾添加删除元素&#xff0c;而当插入元素时&#xff0c;需要移动大量的数据&#xff0c;消耗大量的时间。而链表的优势是可以在O(1)删除和插入数据。所以在频繁移动元素时&#xff0c;可以使用链表。 分析&#xff1a;如果用一个数组…

virtualbox配置apache_virtualbox 网络配置 (转)

http://www.vmbest.com/school/2-virtualbox-school/13-virtualbox-net-config-four-plan“网络”配置页面有4个方案&#xff1a;1&#xff1a;NAT 网络地址转换(Network Address Translation)2&#xff1a;Birdged Network 桥接3&#xff1a;Internal Network 内部网络(可以…

请领导批阅文件怎么说_领导说“谢谢”,该怎么回?低情商才说不客气,高情商的都这样说!...

职场中&#xff0c;当我们顺手帮了领导个小忙或者领导跟我们要工作资料&#xff0c;我们发给领导的时候&#xff0c;领导可能会顺口说“收到&#xff0c;谢谢”&#xff0c;这样的时候&#xff0c;其实领导就是表示收到了。我们如何回复&#xff0c;才不至于失了礼貌&#xff0…

387. First Unique Character in a String

Given a string, find the first non-repeating character in it and return its index. If it doesnt exist, return -1. Examples: s "leetcode" return 0.s "loveleetcode", return 2. 思路&#xff1a;扫一遍&#xff0c;用array记录char的重复次数。…

vue的简单学习

vue和thymeleaf &#xff1a; 若先显示框架后加载数据则用vue 若后端处理好之后发送给前端页面显示用thymeleaf (弹幕) 对于前后端分离的认识&#xff1a; 使用vue 将前端页面、框架等建立好&#xff0c;只需要后端发送数据即可 但thymeleaf就需要在服务器启动之前将数据保存到…

easyui下拉框option写死_JavaScript_jQuery+easyui中的combobox实现下拉框特效,1.第一种写法:Input框中显示: - phpStudy...

jQueryeasyui中的combobox实现下拉框特效1.第一种写法&#xff1a;Input框中显示&#xff1a;2. 第二种用法&#xff0c;在list列表中显示&#xff1a;类别3. 第二种的另一种写法&#xff1a;类别以上3种方法均可实现jQuery.easyui的下拉框特效&#xff0c;大家自由选择&#x…

Selleck --- 01Cookie

1. //1.设置Cookie function setCookie(name,value,days) {var date new Date();date.setDate(date.getDate() days);document.cookie name "" value ";expires" date; } console.log(setCookie("pwd","5566778899",1)); //获取c…

audino python_用 Python 实现 PowerDesigner 数据模型文件的处理

简述目前在银行研发中心做项目管理工作。我们单位的项目经理从需求、设计、编码到测试以及上线&#xff0c;都要有很大程度的参与。没有工具支持&#xff0c;很多事根本忙不过来、或者没法在有限的时间里保证项目质量。大概半年前开始接触PYTHON&#xff0c;多多少少写了一些能…