Flask框架简介

Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其 WSGI 工具箱采用Werkzeug(路由模块),模板引擎则使用Jinja2。可以说Flask框架的核心就是Werkzeug和Jinja2。Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。
总结1:Flask也是一款MVC框架

总结2:核心为Werkzeug,这是由python语言编写的遵守WSGI协议的一个包


  • Flask是一款MVC框架,主要是从模型、视图、模板三个方面对Flask框架有一个全面的认识,通过完成作者-读书功能,先来熟悉Flask框架的完整使用步骤。
  • 操作步骤为:
    • 1.创建项目
    • 2.配置数据库
    • 3.定义模型类
    • 4.定义视图并配置URL
    • 5.定义模板


环境安装

  • 使用虚拟环境安装Flask,可以避免包的混乱和版本的冲突,虚拟环境是Python解释器的副本,在虚拟环境中你可以安装扩展包,为每个程序单独创建的虚拟环境,可以保证程序只能访问虚拟环境中的包。而不会影响系统中安装的全局Python解释器,从而保证全局解释器的整洁。
  • 注意:Werkzeug对python3的支持并不好,所以如果使用Flask框架推荐使用python2
  • 虚拟环境使用virtualenv创建,可以查看系统是否安装了virtualenv:

    virtualenv --version
    
  • 运行如下命令安装虚拟环境的应用

sudo pip install virtualenv
sudo pip install virtualenvwrapper
  • 如果提示找不到mkvirtualenv命令,须配置环境变量:
# 1、创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs# 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh# 3、运行
source ~/.bashrc
  • 创建虚拟环境(ubuntu里须在联网状态下)
mkvirtualenv Flask_py
  • 进入虚拟环境
workon Flask_py
  • 退出虚拟环境
deactivate Flask_py
  • 在虚拟环境中使用pip命令安装Flask包
$ pip install flask==0.10.1

1、创建项目

  • 在pycharm点击菜单File->New Project..
  • .

  • 在弹出的New Project窗口中,选择项目类型为Flask,在Location中填写项目路径,在Interpreter中选择上一节创建的虚拟环境,然后点击create按钮

  • 在弹出的Open Project窗口中选择打开的方式,可以在新窗口,也可以在当前窗口,选择后点击ok按钮

  • 项目创建完成,在pycharm的project面板显示目录结构如下图

  • 文件名称与项目名称一致,当前为test1.py
  • 目录static用于存放静态文件
  • 目录templates用于存放模板文件
  • 点击pycharm右上角的绿色三角可以启动项目,如下图

  • 运行效果如下图

  • 修改启动代码如下,设置debug=True,再改动代码时服务器会自动重启
if __name__ == '__main__':app.run(debug=True)
  • 关闭服务器后再重新启动就会生效

设计模型

  • 此例中设计作者、图书两个模型类,作者-图书为一对多关系
  • 在mysql中创建数据库test1
create database test1 charset=utf8;

2、配置mysql数据库

  • 安装包flask-mysqldb,用于Flask与mysql交互
pip install MySQL-python==1.2.5
  • 安装包Flask-SQLAlchemy,用于ORM转换
pip install flask-sqlalchemy==2.3.2
  • 打开test1.py文件
  • 引入类SQLAlchemy
from flask_sqlalchemy import SQLAlchemy
  • 在app下面编写数据库配置
#设置连接数据库的URL
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test1'
#创建数据库对象
db = SQLAlchemy(app)

3、定义模型类

  • 定义类如下

class Author(db.Model):__tablename__ = 'author'id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(32), unique=True)def __init__(self, name):self.name = nameclass Book(db.Model):id = db.Column(db.Integer, primary_key=True)title = db.Column(db.String(32), unique=True)author = db.Column(db.Integer, db.ForeignKey('author.id'))def __init__(self, title, author):self.title = titleself.author = author

数据操作

  • 在启动程序中创建表
if __name__ == '__main__':db.create_all()app.run()
  • 继续编写代码,添加示例数据
    db.create_all()author1 = Author('金庸')author2 = Author('琼瑶')db.session.add_all([author1, author2])db.session.commit()book11 = Book('射雕英雄传', author1.id)book12 = Book('天龙八部', author1.id)book13 = Book('雪山飞狐', author1.id)book21 = Book('还珠格格', author2.id)book22 = Book('情深深雨濛濛', author2.id)book23 = Book('梅花三弄', author2.id)db.session.add_all([book11, book12, book13, book21, book22, book23])db.session.commit()app.run()
  • 点击运行启动服务器,此时可以到mysql中查询表和数据,表已经被创建,并且数据也加入成功

编写视图

  • 视图的本质就是函数
  • 打开test1.py
  • 定义函数authorlist,查询所有作者信息
def authorlist():alist = Author.query.all()return '作者列表'
  • 定义函数booklist,接收作者编号,查询指定作者的所有图书
def booklist(aid):blist = Book.query.filter(Book.author == aid)return '指定作者的图书列表'

4、URL配置

  • flask的运行过程与django的过程是一样的,如下图

  • 定义完成视图函数后,需要为函数配置url,才可以通过浏览器请求到这个函数
  • 为authorlist配置url
@app.route('/alist/')
def authorlist():alist = Author.query.all()return '作者列表'
  • 运行服务器,在浏览器中可以查看访问效果,访问作者列表的地址如下
http://127.0.0.1:5000/alist/
  • 为booklist配置url,注意从地址中获取参数
@app.route('/blist/<aid>/')
def booklist(aid):blist = Book.query.filter(Book.author == aid)return '指定作者的图书列表'
  • 访问图书列表的地址如下,其中1表示作者的编号
http://127.0.0.1:5000/blist/1/

5、定义模板

  • 与django一样,html可以当作模板使用,可以编写html、css、js代码,也可以编写模板语言的代码
  • 不同的是flask使用的模板语言名称为jiaja2,这种语言与django模板语言十分相似
  • 在test1.py文件上部引入模板函数
from flask import render_template
  • 修改hello_world函数如下,调用模板
@app.route('/')
def hello_world():return render_template('hello.html')
  • 在templates目录下创建hello.html文件,内容如下
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>hello flask</h1>
</body>
</html>
  • 在浏览器中请求效果如下图

  • 可以通过函数向模板中传递数据,修改代码如下
@app.route('/')
def hello_world():return render_template('hello.html',title='flask',list1=range(5))
  • 修改模板代码如下
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>hello {{ title }}</h1>
<ul>{% for i in list1 %}<li>{{ i }}</li>{% endfor %}
</ul>
</body>
</html>
  • 刷新浏览器,运行效果如下图

作者列表

  • 修改authorlist函数,调用模板
@app.route('/alist/')
def authorlist():alist = Author.query.all()return render_template('alist.html',alist=alist)
  • 编写模板alist.html,代码如下
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<ul>{% for author in alist %}<li><a href="/blist/{{ author.id }}/">{{ author.name }}</a></li>{% endfor %}
</ul>
</body>
</html>

图书列表

  • 修改authorlist函数,调用模板
@app.route('/blist/<aid>/')
def booklist(aid):blist = Book.query.filter(Book.author == aid)return render_template('blist.html',blist=blist)
  • 编写模板blist.html,代码如下
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<ul>{% for book in blist %}<li>{{ book.title }}--{{ book.author }}</li>{% endfor %}
</ul>
</body>
</html>
  • 本示例完成后效果如下图,在首页中显示所有的作者信息

  • 通过作者链接,可以显示所有的图书信息

Flask简介与简单项目操作流程相关推荐

  1. 前后端分离简单项目--蚂蚁博客--简介

    原文网址:前后端分离简单项目--蚂蚁博客--简介_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍我从0开发的前后端分离的简单项目--蚂蚁博客. 本项目是一个全栈项目,使用主流.前沿的技术栈开发 ...

  2. Spring AOP 简介以及简单用法

    Spring AOP 简介以及简单用法 如果你去面试java开发, 那么Spring的AOP和DI几乎是必问的问题. 那么AOP是什么呢? 一. AOP 所谓Aop就是 Aspect-Oriented ...

  3. 前后端分离简单项目--蚂蚁博客--后端部分

    原文网址:前后端分离简单项目--蚂蚁博客--后端部分_IT利刃出鞘的博客-CSDN博客 简介 说明         本文介绍我从0开发的前后端分离的简单项目--蚂蚁博客.本博文介绍后端部分. 本项目是 ...

  4. Python Flask框架-开发简单博客-认证蓝图

    作者:Eason_LYC 悲观者预言失败,十言九中. 乐观者创造奇迹,一次即可. 一个人的价值,在于他所拥有的.可以不学无术,但不能一无所有! 技术领域:WEB安全.网络攻防 关注WEB安全.网络攻防 ...

  5. Python Flask Web教程001:Flask 简介

    Flask Web教程001:Flask 简介 0. 前言 1. flask简介 2. flask的优势 3. 总结 0. 前言 本系列教程从Flask框架的基础知识开始,逐渐深入到使用flask进行 ...

  6. Python Flask实现最简单的 Web

    Python Flask实现最简单的 Web 现在使用 Flask 实现一个最简单的 Web . 一.进入开发虚拟环境 在开始开发之前,需要先进入对应的虚拟环境. 现在,创建了一个名字叫 FlaskP ...

  7. python有什么简单项目_python有什么简单项目适合初学者?

    python有什么简单项目适合初学者?下面我将介绍几个简单的Python小项目,便于大家学习提升自己的Python开发水平.感兴趣的朋友一起来了解一下吧. 适合初学者学习的项目: 实例一:满分推荐,非 ...

  8. 重要性采样(Importance Sampling)简介和简单样例实现

    重要性采样(Importance Sampling)简介和简单样例实现 在渲染领域,重要性采样这个术语是很常见的,但它究竟是什么呢?我们首先考虑这样的一种情况: 如果场景里有一点P,我们想计算P点的最 ...

  9. ONENET平台简介及简单的接入方法

    ONENET平台简介及简单的接入方法 OneNET是中国移动物联网有限公司响应"大众创新.万众创业"以及基于开放共赢的理念,面向公共服务自主研发的开放云平台,为各种跨平台物联网应用 ...

最新文章

  1. python核心-类-1
  2. 【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )
  3. C++基础--简单Socket通信实例
  4. Linux下常用日志分析工具
  5. bzoj 5302: [Haoi2018]奇怪的背包
  6. MATLAB模拟声压分布,基于Matlab仿真软件构建圆形压电晶体三维模型
  7. i5功耗最低的cpu_近年最大飞跃 Intel第11代低功耗酷睿处理器官宣:集显2倍、AI乘4...
  8. .net core WebAPI 初探及连接MySQL
  9. React Native填坑之旅--class(番外篇)
  10. vba把json转数组中_网抓处理Json数据 | VBA实例教程
  11. 安装使用FLTK图形库
  12. 把计算机怎么连接手机的网络助手在哪里,怎么将手机网络通过USB共享给电脑
  13. MATLAB矩阵基础知识(二)
  14. Java 8 effectively final
  15. FSA确定性识别算法
  16. 2022-2028年版全球及中国涂料市场销售运营模式及发展前景预测报告
  17. P4839 P哥的桶C++题解
  18. flex布局练习,仿手机淘宝首页
  19. 友元函数,友元类,类模板
  20. 使用vue报错Cannot use ‘in‘ operator to search for

热门文章

  1. 富士 FinePix F401
  2. Flink中的Time与Window
  3. Linux基础提高_系统性能相关命令
  4. git clone 指定分支的内容
  5. java学习笔记IO之字节输入输出流
  6. node.js初入手
  7. C++ _countf
  8. 在C#中运用 SQLite
  9. ffmpeg编解码详细过程
  10. 导师带学生卡Bug,这波操作~