Flask是一个基于Python的web框架,它的设计目的是提供Web开发所需的最小功能子集。


Flask与别的框架(尤其是采用其他编程语言的框架)的不同之处在于:它没有绑定诸如数据库查询或者表单处理等功能库,以及它们所组成的整个生态系统。它倾向于对这些功能的实现方式不做任何限定。


这种系统带来的主要好处是:开发者能够使用他们想用的任何方式和工具,去设计他们的应用架构。另外,对于一些常见的通用功能,Flask没有以某种特定方式去实现,这意味着在Flask中,对标准库的使用会比其他框架里多,这保证了通用功能的稳定性及针对其他Python程序员的可读性。由于Flask社区十分庞大,所以该社区提供的添加通用功能的方式非常多。所以通过本系列教程,了解它们如何帮助我们避免重复造轮子。这些扩展的妙处在于,如果不需要那些额外的功能,就不用引入它们,这样我们的应用才会保持简洁、轻量。


这种系统的最大弊端是,大部分新的Flask用户不知道如何正确地规划大型应用的结构,最后弄出一大堆让人难以理解和维护的代码。所以本教程另一个重点是如何为Flask应用创建模型/视图/控制器(MVC)架构。




MVC体系在最初被发明时,主要用来设计桌面应用的用户界面。它将数据处理(model),交互逻辑(controller)和用户界面(view)隔离成三层不同的组件。

这三层组件的隔离,使得程序员不用为每个网页重新实现一遍相同的功能,而是只要重用那些代码。比如,若是没有把处理数据的代码拆分到单独的函数中,那么我们不得不在每个页面的渲染函数里,把同样的数据库连接代码和SQL查询代码都写一遍。


我们将使用git做为版本控制软件,开发环境为ubuntu.python版本为3.4.3


安装flask

使用pip安装,由于是在python3环境中,所以使用pip3.

pip3 install flask

使用git做版本管理

创建工程目录

mkdir flask_tutorials


切换到工程目录

cd flash_tutorilas


初始化版本库

git init

创建版本库过滤文件

touch .gitignore


向.gitignore文件中写入以下内容,过滤env目录,python的编译文件:

cat .gitignore
env/
*.pyc

开始我们的项目

config.py:

class Config(object):pass

class ProdConfig(Config):pass

class DevConfig(Config):DEBUG = True

main.py:

from flask import Flask
from config import DevConfigapp = Flask(__name__)
app.config.from_object(DevConfig)@app.route('/')
def home():return '<h1>Hello World!</h1>'

if __name__ == '__main__':app.run()

对于一些了解Flask API的读者来说,这个程序非常基础,它只是在我们访问http://127.0.0.1:5000的时候,在浏览器中显示一行"Hello World!"。另外,Flask用户可能很不熟悉的一个地方是,这里使用了config.from_object,而不是app.confing['DEBUG']。使用from_object是因为未来我们会加入很多配置项,如果要在不同的配置之间切换,那么手动去改每个变量是一件烦琐乏味的事。

提交我们的代码

git add --all

git commit -m "your comment"

启动web服务

zhangxa@ubuntu:~/python/flask_tutorials$ python3 main.py
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: 267-148-615

使用flask-script

Flask有众多扩展,我们将首先使用Flask Script扩展。使用它可以创建命令,并在Flask的应用上下文中执行,因为这样才能对Flask对象进行修改。

Flask Script自带了一些默认的命令,可以运行服务器或者开启带应用上下文的Python命令行。

安装

pip3 install flask-script

使用

先创建一个简单的manage.py脚本。

manage.py:

首先,导入Flask Script对象,代码如下:

from flask_script import Manager, Server
from main import app

然后把你的app传给Manager对象,以初始化Flask Script:
manager = Manager(app)现在我们来添加一些命令。这里运行的服务器跟通过main.py运行的普通开发服务器是一样的。make_shell_context函
数会创建一个Python命令行,并且在应用上下文中执行。返回的字典告诉Flask Script在打开命令行时进行一些默认
的导入工作。
manager.add_command("server", Server())@manager.shell
def make_shell_context():return dict(app=app)通过manage.py运行命令行在将来会十分必要,因为一些Flask扩展只有在Flask应用对象被创建之后才会被初始化。直接
运行默认的Python命令行会令这些扩展返回错误。然后,在文件结尾添加如下代码,这是Python的标准方式,用来限制仅在用户直接运行文件的时候,才执行上面的
代码:
if __name__ == "__main__":manager.run()
现在你可以这样来运行开发环境服务器:Z:\python\flask_tutorials>python manage.py server * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger pin code: 273-062-909

以及使用命令行Z:\python\flask_tutorials>python manage.py shell#我们来看下app有没有被正确导入>>> app<Flask 'main'>>>>

总结

现在我们已经搭建了开发环境,可以继续在Flask里面实现更高级的特性了。

Flask系列教程(一)-----------入门相关推荐

  1. Python框架Flask系列教程(1)——基础-黄勇-专题视频课程

    Python框架Flask系列教程(1)--基础-4431人已学习 课程介绍         从初级讲解Flask开发网站.涉及到的知识点包括:URL和视图.Jinja2模版.SQLAlchemy数据 ...

  2. 【全栈接口测试进阶系列教程】入门到入职的jmeter接口测试工具实战,接口测试步骤,正则表达式jsonpath,断言,接口加密,beanshell,jdbc,jmeter+ant+jenkins

    目录 [本文简介看之前请详细的看完介绍] 本文是全网首发的[全栈接口测试进阶系列教程]jmeter接口测试工具从入门到入职, 接口系列包含 接口测试系列包含所有的接口测试工具入门到入职,如果你喜欢的话 ...

  3. Web阅读器开发系列教程(入门篇)

    作者:Sam 前言 最近我在慕课网发布了两门关于Web阅读应用开发的课程,采用Vue全家桶开发.免费课是入门级课程,初步实现了一个阅读器.实战课是进阶课程,实现了一个高性能的互联网阅读应用.两个项目都 ...

  4. 报表 labview_【LabVIEW懒人系列教程小白入门】1.3LabVIEW数据类型

    上期作业解答: 如何对齐控件(动图) 第一种方法: 第二种方法: 第三种方法: 第四种方法: 大家尝试至少用第一种方法编写出该题. 作业讲解结束 labview中需要熟悉的控件类型有: 基本数据类型: ...

  5. 【LabVIEW懒人系列教程-小白入门】1.13LabVIEW程序结构之事件结构

    上期1.2作业讲解: 下面是效果演示: 今日讲解程序框图中的事件结构运用方式, 事件结构必须要存在超时事件分支,否则程序会报错且无法执行 顾名思义,事件结构就是满足某个事件执行对应事件的功能分支,事件 ...

  6. 【LabVIEW懒人系列教程-小白入门】1.15LabVIEW程序结构之跑马灯

    上期1.14作业讲解: 本期教大家如何利用程序结构编写小程序<跑马灯> 程序要求,多数布尔灯依次排序,按照从左往右的顺序进行亮灭操作. 如图: 方法①/利用While循环组合顺序结构实现 ...

  7. 【LabVIEW懒人系列教程-小白入门】1.16LabVIEW程序结构之小试身手

    上期1.15作业讲解: <分数序列求和> For循环组合移位寄存器实现计算: 本期带来两个习题,主要目的:运用前期所学知识点进行反复练习,提高对于函数运用的熟练度,了解Labview程序组 ...

  8. 【LabVIEW懒人系列教程-小白入门】1.2LabVIEW前面板控件讲解

    上次课程作业编写:d=a+b+c 前面板创建4个控件:数值型输入控件:a,b,c:数值型显示控件d ctrl+e 切换到程序框图界面,添加2个 "+"算法,然后连线,a,b,c,d ...

  9. 【建议收藏】Flask系列教程(三)SQLAlchemy数据库

    数据库是一个网站的基础,在Flask中可以自由的使用MySQL.PostgreSQL.SQLite.Redis.MongoDB来写原生的语句实现功能,也可以使用更高级别的数据库抽象方式,如SQLAlc ...

最新文章

  1. 青龙羊毛——更新日志(2022-04-07更新)
  2. 并发之AQS原理(一) 原理介绍简单使用
  3. 剑指offer之数组中的逆序对
  4. Leetcode周赛复盘——第 276 场力扣周赛
  5. 项目七samba服务器,Centos 7 配置Samba服务器
  6. php mysql自动反转义_ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法...
  7. 【FIRST USE】第一次用git把代码上传到github
  8. Delphi Web前端开发教程(1):基于TMS WEB Core框架
  9. [状压dp] 玉米田(状压dp)
  10. FMS视频在线采集系统
  11. 建网站应该买什么云服务器,建网站应该买什么云服务器
  12. linux系统sip1 login,1.1.1.1 SIP终端节点配置
  13. 从C++11到C++23(一) C++20圆周率、常数e和常见对数
  14. Android常用设置
  15. C++ 多态性 (polymorphism)
  16. 有一张厚度为0.1mm的纸,假设它足够大,重复将其对折,问对折多少次之后,其厚度可达(再对折一次就超过)珠穆朗玛峰的高度?(C语言)
  17. SPSS是什么?SPSS软件的功能有哪些?
  18. Vue + Element-ui 实现table表格 数据相同项合并
  19. Redis用来干嘛的?
  20. 如何运用SCQA发现问题?

热门文章

  1. 新一代iPhoneSE支持5G,有望搭载A15仿生芯片
  2. 2021年前装首破5万辆 AR HUD“棋逢对手”,竞逐量产桂冠
  3. 知行之桥堆内存及清理
  4. c语言中的sfr16,Keil C51对C语言的关键词扩展之十六:sfr16
  5. 双十一买什么比较划算?四款实用性超强不吃灰的数码好物推荐
  6. 图片无限放大,不模糊,图片移动,仿微信图片放大
  7. P44CustomerDAO及CustomerDAOImpl的实现与测试
  8. 西瓜书重温(四): 决策树手推版
  9. Linux基础 Day02
  10. 路由器如何设置上网(TP-LINK)