把想法变为现实的能力是空想家与实干家的区别。无论你是在一家跨国公司工做,仍是正在为本身的创业公司而努力,那些有能力将创意转化为真正产品的人,都具备宝贵的技能并拥有明显的实力。若是你能在不到一个小时的时间里建立一个全栈的Web应用,那么你就有能力为本身下一个伟大的想法迅速的的建立一个简单的MVP,或者在工做中快速构建一个新的应用程序。javascript
本文介绍了建立一个简单的全栈Web应用所需的步骤,其中包括一个Python服务器和一个React前端。你能够轻松的在其基础上进行构建,根据你的实际需求进行修改,或是添加一些其余技术特性,例如Redux。css
世界在互联网的驱动下,计算机的基本技术和简单工具已经成为现代商业人士的必备技能。本文适合想要学习怎样制做一个简单的基于web的应用程序,而且具有基本编程技能的人。html
尽管你能够在个人GitHub上找到本文全部的源代码,可是若是你可以从头开始建立这个程序,将会获得最好的学习成果。前端
1
2
3
4
5
6
7
8
9
|
.
├──
README.md
└──
fullstack_template/
├── server/
└── static/
├── css/
├── dist/
├── images/
└── js/
|
咱们将使用npm包管理器来处理Javascript依赖项。Npm是很是棒的,由于它易于使用,有良好的文档支持,有将近50万个包可供使用,以及合理的默认项目设置方案。java
使用包管理器可使您的项目依赖项保持最新状态,并可以获取和安装最新的包。node
让咱们初始化项目:python
1
2
|
$ cd fullstack_template/static
$ npm init
|
在初始化的过程当中能够接受默认设置,可是你最好填写本身的程序名称和Git库等参数,结束后会自动在你的static目录下生成一个名为package.json 的文件。react
package.json文件有以下几个做用:webpack
Webpack是一个模块打包器。它能够处理你全部的模块依赖,并生成静态资源。 使用模块打包器能够减小浏览器须要加载的模块数量,从而大大缩短了网页的加载时间。git
安装Webpack:
1
|
$ npm i webpack --save-dev
|
要使用Webpack,咱们须要添加一个 Webpack 配置文件。这个配置告诉 Webpack 在哪里能够找到 JavaScript 和 React 文件,以及在哪里放置生成的JavaScript包。
在static目录中添加一个名为webpack.config.js的文件,下面的内容以下:
1
2
3
4
5
6
7
8
9
10
11
12
|
const webpack = require('webpack');
const config = {
entry: __dirname + '/js/index.jsx',
output: {
path: __dirname + '/dist',
filename: 'bundle.js',
},
resolve: {
extensions: ['.js', '.jsx', '.css']
},
};
module.exports = config;
|
向package.json文件中添加一些运行命令会是你的开发过程更加顺畅。我老是在本身的package.json 文件中添加一些build, dev-build 和 watch 命令。
build用于构建生产环境版本, dev-build用于开发时的构建版本,watch的做用和dev-build相似,只不过能够自动监视项目文件是否修改,而且自动从新构建被修改的部分,你只须要刷新浏览器就能够看到改动后的结果。叉车租赁
自动化构建你的项目还有一个好处,那就是你不会耗费时间去思考为何修改了代码却看不到效果,通常遇到这种状况纯粹是由于你忘记了构建它们!
如下是个人 package.json 文件内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
{
"name": "FullStackTemplate",
"version": "1.0.0",
"description": "A Template for creating a Full Stack Web Application using Python, NPM, Webpack and React",
"main": "index.js",
"scripts": {
"build": "webpack -p --progress --config webpack.config.js",
"dev-build": "webpack --progress -d --config webpack.config.js",
"test": "echo \"Error: no test specified\" && exit 1",
"watch": "webpack --progress -d --config webpack.config.js --watch"
},
"keywords": [
"fullstack",
"template",
"python",
"react",
"npm",
"webpack"
],
"author": "Angela Branaes",
"license": "MIT",
"devDependencies": {
"webpack": "^3.0.0"
}
}
|
Babel可以容许咱们使用最新的JavaScript特性编码,即使是浏览器尚未支持它们。经过安装ES2015和react presets,Babel可以把使用 Javascript 新特性和 React jsx 的代码转换为与当前浏览器兼容的 JavaScript 语法。
安装Babel:
1
|
$ npm i babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev
|
添加Babel presets到package.json文件中:
1
2
3
4
5
6
|
"babel": {
"presets": [
"es2015",
"react"
]
},
|
在 Webpack 的配置中添加一条 babel-loader 规则。注意,咱们在规则中排除了node_modules。这能够保证 Babel 不会尝不会对 node 模块进行转换,从而不会影响到node程序的加载速度。
1
2
3
4
5
6
7
8
9
|
module: {
rules: [
{
test: /\.jsx?/,
exclude: /node_modules/,
use: 'babel-loader'
}
]
}
|
建立 index.jsx 和 index.html
为了能在浏览器中看到一些东西,咱们将建立一个简单的index.html页面,这个页面只显示一个由JavaScript弹出的“Hello World!”对话框,以此来证实设置是正确的。
在static目录中建立一个index.html文件,并填写下面的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!— index.html —>
<html>
<head>
<meta charset="utf-8">
<!-- Latest compiled and minified bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css">
<title>Creating a Full-Stack Python Application with NPM, React.js and Webpack</title>
</head>
<body>
<div id="content" />
<script src="dist/bundle.js" type="text/javascript"></script>
</body>
</html>
|
在static/js目录下建立一个index.jsx文件,并添加下面的代码:
1
|
alert(“Hello World!”);
|
启动一个独立的终端窗口来运行前面建立的 Webpack watch 命令,这样当咱们在工做时,它能够在后台一直运行。它会在没有编码错误的前提下自动构建你的包。
1
|
$ npm run watch
|
打开浏览器并访问index.html,应该可以看到弹出一个写着“Hello World!”的提示窗口。
首先须要安装React:
1
|
$ npm i react react-dom --save-dev
|
下一步让咱们用一个简单的 React 应用替换掉前面的index.jsx,并让它加载一个建立在单独的 App.js 文件中的 React 类。
1
2
3
4
5
|
// index.jsx
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App />, document.getElementById("content"));
|
React 类须要在不一样的React源码文件中作导出,以方便后面的使用。一般每一个文件中只写一个类,而且导出。
1
2
3
4
5
6
7
|
// App.jsx
import React from “react”;
export default class App extends React.Component {
render () {
return <p> Hello React!</p>;
}
}
|
若是咱们如今刷新浏览器,页面上将会显示“Hello React!”,而再也不是“Hello World!”提示框。
关于Python服务器咱们将会使用Flask。Flask是小型Python应用的最佳选择之一。“微框架(microframework)”可使你在短短几分钟内轻松快速的使一个服务跑起来。对于大型应用和某些专业领域,企业一般会使用 Pyramid 或 Django。若是你想在本身的环境中拥有很大的灵活性和可以自定义配置的特性,Pyramid是一个不错的选择。Django则提供了一个全功能的Web框架,同时使你没必要为应用的配置花费太多的时间,好比在数据库配置等方面。
建立一个新的virtualenv并安装Flask
在server目录中建立Flask服务源码文件,添加一个用来返回返回“Hello World!”的端点路由“/hello”,再添加一个主页面端点路由 “/“ 用来渲染index.html 模版。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# server.py
from flask import Flask, render_template
app = Flask(__name__, static_folder="../static/dist", template_folder="../static")
@app.route("/")
def index():
return render_template("index.html")
@app.route("/hello")
def hello():
return "Hello World!”
if __name__ == "__main__":
app.run()
|
运行python服务:
1
|
$ python server.py
|
接下来访问http://localhost:5000/就能够看到 react 应用提供的的“Hello React!”提示。访问http://localhost:5000/hello 将会看到由Python端点路由返回的“Hello World!”
恭喜,如今你已经有了一个基本的全栈应用
若是你想要学习如何与服务器进行通讯,以及怎样使本身的程序更加美观,请等待本文的下半部分:《一个小时搭建一个全栈Web应用框架——界面美化与功能实现》