把想法变为现实的能力是空想家与实干家的区别。不管你是在一家跨国公司工作,还是正在为自己的创业公司而努力,那些有能力将创意转化为真正产品的人,都具有宝贵的技能并拥有明显的实力。如果你能在不到一个小时的时间里创建一个全栈的Web应用,那么你就有能力为自己下一个伟大的想法迅速的的创建一个简单的MVP,或者在工作中快速构建一个新的应用程序。

本文介绍了创建一个简单的全栈Web应用所需的步骤,其中包括一个Python服务器和一个React前端。你可以轻松的在其基础上进行构建,根据你的实际需求进行修改,或是添加一些其他技术特性,例如Redux。

世界在互联网的驱动下,计算机的基本技术和简单工具已经成为现代商业人士的必备技能。本文适合想要学习怎样制作一个简单的基于web的应用程序,并且具备基本编程技能的人。

尽管你可以在我的GitHub上找到本文所有的源代码,但是如果你能够从头开始创建这个程序,将会得到最好的学习成果。

初始项目设置

 
 
 
 
 

Python

 
1
2
3
4
5
6
7
8
9
.
├── README.md
└── fullstack_template/
    ├── server/
    └── static/
        ├── css/
        ├── dist/
        ├── images/
        └── js/

我们将使用npm包管理器来处理Javascript依赖项。Npm是非常棒的,因为它易于使用,有良好的文档支持,有将近50万个包可供使用,以及合理的默认项目设置方案。

使用包管理器可以使您的项目依赖项保持最新状态,并能够获取和安装最新的包。

让我们初始化项目:

 
 
 
 
 

Python

 
1
2
$ cd fullstack_template/static
$ npm init

在初始化的过程中可以接受默认设置,但是你最好填写自己的程序名称和Git库等参数,结束后会自动在你的static目录下生成一个名为package.json 的文件。

package.json文件有如下几个作用:

  1. 跟踪所有的依赖项及其版本。
  2. 它可是使其他开发人员了解你的项目,比如应用的名称、说明、所有者和所在存储库的位置。
  3. 可以非常容易的通过npm进行自动化安装、运行和更新。

安装和配置Webpack

Webpack是一个模块打包器。它可以处理你所有的模块依赖,并生成静态资源。 使用模块打包器可以减少浏览器需要加载的模块数量,从而大大缩短了网页的加载时间。


演示了Webpack是怎样工作的

安装Webpack:

 
 
 
 
 

Python

 
1
$ npm i webpack --save-dev

要使用Webpack,我们需要添加一个 Webpack 配置文件。这个配置告诉 Webpack 在哪里可以找到 JavaScript 和 React 文件,以及在哪里放置生成的JavaScript包。

在static目录中添加一个名为webpack.config.js的文件,下面的内容如下:

 
 
 
 
 

Python

 
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 文件中添加一些builddev-build 和 watch 命令。

build用于构建生产环境版本, dev-build用于开发时的构建版本,watch的作用和dev-build类似,只不过可以自动监视项目文件是否修改,并且自动重新构建被修改的部分,你只需要刷新浏览器就可以看到改动后的结果。叉车租赁

自动化构建你的项目还有一个好处,那就是你不会耗费时间去思考为什么修改了代码却看不到效果,一般遇到这种情况纯粹是因为你忘记了构建它们!

以下是我的 package.json 文件内容:

 
 
 
 
 
 

Python

 
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支持

Babel能够允许我们使用最新的JavaScript特性编码,即便是浏览器还没有支持它们。通过安装ES2015和react presets,Babel能够把使用 Javascript 新特性和 React jsx 的代码转换为与当前浏览器兼容的 JavaScript 语法。


Babel转换JavaScript代码的示例

安装Babel:

 
 
 
 
 
 

Python

 
1
$ npm i babel-core babel-loader babel-preset-es2015 babel-preset-react --save-dev

添加Babel presets到package.json文件中:

 
 
 
 
 

Python

 
1
2
3
4
5
6
"babel": {
  "presets": [
    "es2015",
    "react"
  ]
},

在 Webpack 的配置中添加一条 babel-loader 规则。注意,我们在规则中排除了node_modules。这可以保证 Babel 不会尝不会对 node 模块进行转换,从而不会影响到node程序的加载速度。

 
 
 
 
 

Python

 
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文件,并填写下面的代码:

 
 
 
 
 
 

Python

 
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文件,并添加下面的代码:

 
 
 
 
 

Python

 
1
alert(“Hello World!”);

启动一个独立的终端窗口来运行前面创建的 Webpack watch 命令,这样当我们在工作时,它可以在后台一直运行。它会在没有编码错误的前提下自动构建你的包。

 
 
 
 
 

Python

 
1
$ npm run watch

打开浏览器并访问index.html,应该能够看到弹出一个写着“Hello World!”的提示窗口。

创建一个简单的 React 应用

首先需要安装React:

 
 
 
 
 

Python

 
1
$ npm i react react-dom --save-dev

下一步让我们用一个简单的 React 应用替换掉前面的index.jsx,并让它加载一个创建在单独的 App.js 文件中的 React 类。

 
 
 
 
 

Python

 
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源码文件中做导出,以方便后面的使用。通常每个文件中只写一个类,并且导出。

 
 
 
 
 

Python

 
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服务

关于Python服务器我们将会使用Flask。Flask是小型Python应用的最佳选择之一。“微框架(microframework)”可以使你在短短几分钟内轻松快速的使一个服务跑起来。对于大型应用和某些专业领域,企业通常会使用 Pyramid 或 Django。如果你想在自己的环境中拥有很大的灵活性和能够自定义配置的特性,Pyramid是一个不错的选择。Django则提供了一个全功能的Web框架,同时使你不必为应用的配置花费太多的时间,比如在数据库配置等方面。

创建一个新的virtualenv并安装Flask

在server目录中创建Flask服务源码文件,添加一个用来返回返回“Hello World!”的端点路由“/hello”,再添加一个主页面端点路由 “/“ 用来渲染index.html 模版。

 
 
 
 
 
 

Python

 
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服务:

 
 
 
 
 

Python

 
1
$ python server.py

接下来访问http://localhost:5000/就可以看到 react 应用提供的的“Hello React!”提示。访问http://localhost:5000/hello 将会看到由Python端点路由返回的“Hello World!”

恭喜,现在你已经有了一个基本的全栈应用

如果你想要学习如何与服务器进行通信,以及怎样使自己的程序更加美观,请等待本文的下半部分:《一个小时搭建一个全栈Web应用框架——界面美化与功能实现》

一个小时搭建一个全栈 Web 应用框架的更多相关文章

  1. Ninja:Java全栈Web开发框架-Ninja中文网

    相信不少业界人士都还停留在SSh的时代 其实我想给大家推荐的一个轻量级框架那就是Ninja; Ninja是一个Java全栈Web开发框架,稳定.快速.非常高效. 商业价值 在你的下一个项目中,Ninj ...

  2. 一个全栈Web/移动App开发学习路径

    HTML.CSS 和 JavaScript 网页开发的基本元素,包括HTML.CSS个JavaScript.本课程完全适合零基础的同学,当然如果你有相关开发经验更好.在课程开始呢,我们先探索与讨论HT ...

  3. 一个 Vue & Node 的全栈小项目

    约学 - 可以寻找一起自习的小伙伴的Web APP 一个基于 Vue & Node 的移动端全栈小项目 在线演示(请使用移动端查看效果) 源码地址: https://github.com/G- ...

  4. 如何用 4 个小时搭建一个新 “Clubhouse” ,引爆声音社交新风口

    Clubhouse,基于实时音频技术的声音社交现象级火爆 最近,让硅谷两位顶级 VC 大打出手争相投资的 Clubhouse 火到了国内,甚至在社交圈里 "一码难求",此种火爆程度 ...

  5. React与Koa一起打造一个仿稀土掘金全栈个人博客(技术篇)

    本篇文章将分为前台角度与后台角度来分析我是怎么开发的.前台角度主要资源 react.js ant Design for-editor axios craco-less immutable react- ...

  6. React与Koa一起打造一个功能丰富的全栈个人博客(业务篇)

    前言 豆哥的个人博客又改版了,本版主要技术栈是前台用的React,后台用的Koa.博客改版的初衷是自己可以练练React(公司的项目部分要用React,我也没法啊,再说早晚得学).本文主要介绍博客的业 ...

  7. date 增加一个小时 减少一个小时

    # date -s `date -d -1hour +%T`

  8. Python全栈 Web(边框、盒模型、背景)

    原文地址 https://yq.aliyun.com/articles/634926 ......................................................... ...

  9. Python全栈 Web(HTML基础语法)

    原文地址:           https://yq.aliyun.com/articles/632672 .............................................. ...

随机推荐

  1. ABP 开发(一)

    rh 最近搞Angular ,使用Abp+Angular建项目,遇到部分问题,记录一下,以备查: 一.Abp官网: https://aspnetboilerplate.com/ 点Get starte ...

  2. 基于Python在MacOS上安装robotframework-ride

    基于Python在MacOS上安装robotframework-ride https://www.jb51.net/article/153665.htm https://www.jianshu.com ...

  3. 解决Vue中"This dependency was not found"的方法

    今天在初始化项目中,出现了一个奇怪的情况:明明路径是对的,但是编译的时候,一直报"This dependency was not found"的错. 代码如下: import Vu ...

  4. 关于Spring配置文件提示的插件下载

    1.springsource-tool-suite-update 最新各个版本下载地址 第一种方式: springsource-tool-suite-3.7.3.RELEASE-e4.5.2-upda ...

  5. 100-Days-Of-ML-Code 评注版(Day 3)

    Day3_Multiple_Linear_Regression(多元线性回归) 本文引用自 Multiple_Linear_Regression, 对其中内容进行了评注与补充说明. 回归分析是一种预测 ...

  6. SylixOS 系统初探

    国产嵌入式硬实时操作系统 SylixOS 初体验 关于 SylixOS 详细了解请见:http://wiki.sylixos.com/index.php/%E7%B3%BB%E7%BB%9F%E7%A ...

  7. Java学习笔记三十一:Java 包(package)

    Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...

  8. 截图:【炼数成金】深度学习框架Tensorflow学习与应用

    创建图.启动图 Shift+Tab Tab 变量介绍: F etch Feed 简单的模型构造 :线性回归 MNIST数据集 Softmax函数 非线性回归神经网络   MINIST数据集分类器简单版 ...

  9. mysql secure_file_priv 文件读写问题

    secure_file_priv特性 使用 show global variables like '%secure%'; 查询显示 secure_file_priv的值为null,那么secure_f ...

  10. dtree的自定义select动作

    项目中用到了dtree,别问我为什么用这么古老的插件,因为简单啊orz,文件树的条目不多,detree加载卡顿的问题也不用解决,开森. 在使用过程中在选择节点后需要自定义一些onclick的动作,本来 ...