Flask一步步搭建web应用

简介:

1.flask介绍

flask是一款十分轻量级的python Web应用框架,也被认为是一种微框架,我最初喜欢使用是因为flask中提供的那一套使用的注解跟我当时在公司中使用java开发的系统,里面使用的restful的框架jersey的用法比较像,都十分方便,简洁,等到我熟悉使用flask框架之后,就挺喜欢这种微框架了,使用方便,配置简单,也可以进行克重扩展,满足各自的需求,其中在这些里面还有一个flask restplus,将swagger工具整合到python里面,在进行相应测试的时候十分方便,这个放到下一期再讲。

2.所需工具和环境

这一次运行flask需要使用的flask环境就不在物理机上安装运行了,直接使用上一篇讲述的virtualenv来安装flask,写出来的app demo都是依赖在虚拟环境运行的,以下是我们这次演示所需要的python工具和相应包。

8481c8f592b7f349aa84a1de5c171db681516edfpycharm 2016
8481c8f592b7f349aa84a1de5c171db681516edf virtualenv
8481c8f592b7f349aa84a1de5c171db681516edf pytohn 2.7
8481c8f592b7f349aa84a1de5c171db681516edf flask

以pycharm作为python ide, virtualenv以python 2.7创建我们的python运行环境,并用 pip install flask,环境搭建基本就完成了,下面是具体流程。

3.搭建flaskApp

3.1 设置虚拟化环境

打开pycharm,新建工程命名为flaskApp,完成后如下:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

现在基本是一个空工程,现在打开控制台,输入以下命令,创建虚拟化环境:

virtualenv venv

控制台输出完成后,将会在当前目录中创建一个venv文件夹,里面是我们运行python的虚拟化环境,在这里我并没有指明使用哪种版本的python环境是因为当前系统默认的环境是python2.7,如果想使用python3.0以上可以参考前一篇文章virtualenv介绍及基本使用来完成。

现在要做的第二步就是启动当前的虚拟化环境,输入命令source venv/bin/active,完成后控制台将会如下所示:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

(venv) localhost:flaskApp xiaxuan$ 表示我们的虚拟化环境启动成功,但是现在并不是表示当前pycharm中当前工程的工作环境就是venv中的虚拟化环境,这里要设置pycharm中的python interpreter改为当前项目的运行环境才行。

安装flask的命令如下:

pip install flask

由于虚拟化环境,所以不需要root权限,十分方便。

在安装完相应依赖,设置好python运行环境后,在项目根目录下新建requirements.txt文件,这个文件主要就是记载当前项目安装了那些依赖,文件内容如下:

flask==0.12
Jinja2==2.9.5

这是目前安装的依赖,前面是包名,后面是版本号,由于这个的存在我们可以直接在项目没有安装这些package之前,将所需的package写进来,然后在控制台使用pip install -r requirements.txt,就可以将这些依赖全部安装进来。

3.2 搭建flask工作目录

一个完整的flask项目的完整目录以及基本的如下所示:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

8481c8f592b7f349aa84a1de5c171db681516edf test: 测试文件的位置
8481c8f592b7f349aa84a1de5c171db681516edf templates: html文件存放位置
8481c8f592b7f349aa84a1de5c171db681516edf static: 静态文件css和js存放位置
8481c8f592b7f349aa84a1de5c171db681516edf views.py: 主要接口编写文件,目前是所有的接口都写在这里,但是实质上要进行一定的分模块写接口,这个涉及到的技术是blueprint,这个在后期进行讲解。
8481c8f592b7f349aa84a1de5c171db681516edf models.py: 对象的定义
8481c8f592b7f349aa84a1de5c171db681516edf run.py: 启动运行文件
8481c8f592b7f349aa84a1de5c171db681516edf config.py: 配置文件
8481c8f592b7f349aa84a1de5c171db681516edf manager.py: 用于启动程序以及其他的程序任务

以上就是简单的flask项目基本目录。

4. 具体程序编写

4.1源码

views.py:

# cong:utf-8



from flask import jsonify

from flask import render_template



from app import app





@app.route("/")

def index():

    return render_template("index.html")





@app.route("/hello", methods=['GET', ])

def hello():

    return jsonify(msg="hello world!")

上图提供两个接口,一个是渲染视图index.html,一个是返回json结果,较为简单,而在flask中接口的路由就是一个简简单单的注解app.route完成的,指定是哪一种http请求访问也是非常简单的,指定methods即可,methods是一个数组,即GET,POST可以同时在一个请求之中,但是我们在写接口的时候,一般都会区分清楚。

在上面有一个

from app import app,这个需要提一下,这个在app包中的init.py文件之中声明的,如下:

<div class="md-section-divider"></div>

# coding:utf-8

from flask import Flask

app = Flask(__name__)

from app import views


<div class="md-section-divider"></div>

在这里声明了app对象,在views中我们引用了app,同时在下面一个文件run.py中,app起着启动整个项目的作用,run.py源码如下:

<div class="md-section-divider"></div>

# coding:utf-8

from app import app


if __name__ == '__main__':

    app.run()

十分简单明了,app.run()整个项目便运行起来了,在这里运行的时候,项目是默认的端口为5000,如果需要指定端口,app.run()方法中指定port即可。

4.2 运行

启动run.py后,控制台如下:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

控制台输出已经在5000端口上运行起来,现在我们请求http://localhost:5000,转向界面为:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

这是先前views.py中的第一个接口,渲染index.html,index.html中的内容就是hello world

访问第二个接口,url为http://localhost:5000/hello,结果如下:

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

返回json数据。

5. 综上

8481c8f592b7f349aa84a1de5c171db681516edf flask这种微框架搭建和运行都是一种比较简单的事情,但是在面对一些并发量比较高的场景的时候,基本就支撑不住了,后续讲述如何应对这一种场景。
8481c8f592b7f349aa84a1de5c171db681516edf 在多模块项目编写的时候,接口就不能放在一个views.py文件之中,需要分模块存放,这个涉及到了blueprint技术,在下一期中将讲述这个。



原文发布时间为:2017-03-14
本文作者:夏轩
本文来自云栖社区合作伙伴“ Python中文社区”,了解相关信息可以关注“ Python中文社区”微信公众号
相关文章
|
4天前
|
Python
使用Python和Flask构建简单的Web应用
使用Python和Flask构建简单的Web应用
18 6
|
4天前
|
存储 JSON 数据库
使用Flask构建简单的Web应用
使用Flask构建简单的Web应用
17 3
|
4天前
|
人工智能 关系型数据库 数据安全/隐私保护
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,通过分析其在数据处理、业务逻辑实现和安全性保障方面的应用,揭示后端技术的核心价值。同时,本文还将讨论当前后端开发面临的主要挑战,如高并发处理、数据安全、微服务架构的复杂性等,并给出相应的解决方案。无论是后端开发者还是对后端技术感兴趣的读者,都可以通过这篇文章获得启发和指导。
|
12天前
|
前端开发 安全 JavaScript
构建高效Web应用:前后端分离架构的实践
【9月更文挑战第4天】在数字时代,Web应用已成为企业与用户互动的主要平台。本文将介绍如何通过前后端分离的架构设计来构建高效的Web应用,探讨该架构的优势,并分享实现过程中的关键步骤和注意事项。文章旨在为开发者提供一种清晰、高效的开发模式,帮助其在快速变化的市场环境中保持竞争力。
|
16天前
|
中间件 编译器 数据处理
在web开发中应用管道过滤器
【9月更文挑战第1天】本文介绍管道-过滤器架构将数据处理流程分解为一系列独立组件,通过管道连接,适用于数据流处理如图像处理、编译器设计等。通过具体实例说明了Gin如何有效支持管道-过滤器风格的设计,构建高性能Web服务。
32 9
|
17天前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
28 0
|
17天前
|
数据库 关系型数据库 MySQL
惊!Hibernate与MySQL的绝密优化技巧大揭秘,让你的数据库飞起来!
【8月更文挑战第31天】在企业应用开发中,结合使用持久层框架Hibernate与数据库管理系统MySQL可显著提升数据库交互效率。本文探讨了多项优化策略,包括配置二级缓存、采用单向关联减少JOIN操作、优化HQL查询语句以及合理使用MySQL索引。通过具体示例,文章详细讲解了如何实施这些优化措施,以期为企业应用提供更高效稳定的数据支持。
25 0
|
17天前
|
开发者 Java 前端开发
Struts 2验证框架:如何让数据校验成为Web开发的隐形守护者?揭秘前后端一致性的秘诀
【8月更文挑战第31天】在现代Web开发中,数据验证对确保应用健壮性和良好用户体验至关重要。随着前后端分离架构的普及,保证数据校验一致性尤为关键。Struts 2 验证框架基于 JavaBean 验证 API(JSR 303/JSR 380),允许开发者通过注解或 XML 配置轻松定义验证规则,确保输入数据在执行业务逻辑前已通过验证。此外,Struts 2 支持与前端 JavaScript 验证相结合,确保前后端数据校验一致,提升用户体验。通过注解、XML 配置和资源文件,开发者可以轻松定义和调整验证规则,实现前后端一致的数据校验,提高应用健壮性。
25 0
|
17天前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
41 0
|
17天前
|
Java 数据库连接 Spring
Struts 2 插件开发竟如魔法盛宴,为框架注入超能力,开启奇幻编程之旅!
【8月更文挑战第31天】在Web开发中,Struts 2插件开发允许我们在不改动框架核心代码的前提下,通过创建实现特定接口的Java类来扩展框架功能、调整其行为或促进与其他框架(如Spring、Hibernate)的集成,从而更好地满足特定业务需求。遵循良好的设计原则与实践,能够确保插件的高效稳定运行并提升整体项目的可维护性。具体步骤包括创建项目、定义插件类、实现初始化与销毁逻辑,并将插件部署至应用中。
37 0