Flask 介绍

知识点

  • 微框架、WSGI、模板引擎概念
  • 使用 Flask 做 web 应用
  • 模板的使用
  • 根据 URL 返回特定网页

实验步骤

1. 什么是 Flask?

Flask 是一个 web 框架。也就是说 Flask 为你提供工具,库和技术来允许你构建一个 web 应用程序。这个 wdb 应用程序可以使一些 web 页面、博客、wiki、基于 web 的日历应用或商业网站。

Flask 属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖于外部库的框架。这既有优点也有缺点,优点是框架很轻量,更新时依赖少,并且专注安全方面的 bug,缺点是,你不得不自己做更多的工作,或通过添加插件增加自己的依赖列表。Flask 的依赖如下:

维基百科 WSGI 的介绍:

Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器Web应用程序框架之间的一种简单而通用的接口)。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。

2. 什么是模板引擎?

你搭建过一个网站吗?你面对过保持网站风格一致的问题吗,你不得不写多次相同的文本吗?你有没有试图改变这种网站的风格?

如果你的网站只包含几个网页,改变网站风格会花费你一些时间,这确实可行。尽管如此,如果你有许多页面(比如在你商店里的售卖物品列表),这个任务便很艰巨。

使用模板你可以设置你的页面的基本布局,并提及哪个元素将发生变化。这种方式可以定义您的网页头部并在您的网站的所有页面使它保持一致,如果你需要改变网页头部,你只需要更新一个地方。

使用模板引擎创建/更新/维护你的应用会节约你很多时间。

3. "Hello World" 应用

我们将使用 flask 完成一个非常基础的应用。

  • 安装 flask
$ sudo pip3 install flask
  • 创建项目结构
$ mkdir -p hello_flask/{templates,static}

这是你的 web 应用的基本结构:

$ tree hello_flask/
hello_flask
|-- static
`-- templates 2 directories, 0 files

templates 文件夹是存放模板的地方,static 文件夹存放 web 应用所需的静态文件(images, css, javascript)。

  • 创建应用文件
$ cd hello_flask
$ vim hello_flask.py

hello_flask.py 文件里编写如下代码:

#!/usr/bin/env python

import flask

# Create the application.
APP = flask.Flask(__name__) @APP.route('/')
def index():
""" 显示可在 '/' 访问的 index 页面
"""
return flask.render_template('index.html') if __name__ == '__main__':
APP.debug=True
APP.run()
  • 创建模板文件 index.html
$ vim templates/index.html

index.html 文件内容如下:

<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="utf-8" />
<title>Hello world!</title>
<link type="text/css" rel="stylesheet"
href="{{ url_for('static',
filename='hello.css')}}" />
</head>
<body> It works! </body>
</html>
  • 运行 flask 应用程序
$ python3 hello_flask.py

访问 http://127.0.0.1:5000/,这应该只是显示黑字白底的 "It works!" 文本,如下图:

4. Flask 中使用参数

在本节中我们将要看到如何根据用户使用的 URL 返回网页。

为此我们更新 hello_flask.py 文件。

  • 在 hello_flask.py 文件中添加以下条目
@APP.route('/hello/<name>/')
def hello(name):
""" Displays the page greats who ever comes to visit it.
"""
return flask.render_template('hello.html', name=name)
  • 创建下面这个模板 hello.html
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="utf-8" />
<title>Hello</title>
<link type="text/css" rel="stylesheet"
href="{{ url_for('static',
filename='hello.css')}}" />
</head>
<body> Hello {{name}} </body>
</html>
  • 运行 flask 应用
$ python3 hello_flask.py

访问 http://127.0.0.1:5000/ ,这应该只是显示黑字白底的 "It works!" 文本。

访问http://127.0.0.1:5000/hello/you,这应该返回文本 "Hello you",见下图:

无论你在 URL 中 /hello/ 后填写的什么,都会出现在返回的网页中。

这是你第一次使用模板,我们在 hello_flask.py 中建立了 name 变量(参见 hello 函数的 return 行)。通过语法 {{name}},name 变量之后在页面中显示其自身。

5. 额外工作

5.1. 使用模板

目前,对于每一个页面我们都创建了一个模板,其实这是不好的做法,我们应该做的是创建一个主模板并且在每个页面使用它。

  • 创建模板文件 master.html。
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="utf-8" />
<title>{% block title %}{% endblock %} - Hello Flask!</title>
<link type="text/css" rel="stylesheet"
href="{{ url_for('static',
filename='hello.css')}}" />
</head>
<body> {% block body %}{% endblock %} </body>
</html>
  • 调整模板 index.html。
{% extends "master.html" %}

{% block title %}Home{% endblock %}

{% block body %}
It works!
{% endblock %}

正如你所看到的,在 master.html 模板中我们定义了两部分,名为 title 和 body 的 blocks

在模板 index.html 中,我们声明这个模板扩展自 master.html 模板,然后我们定义了内容来放在这两个部分中(blocks)。在第一个 block title 中,我们放置了 Home 单词,在第二个 block body 中我们定义了我们想要在页面的 body 中有的东西。

  • 作为练习,更改其他模板 hello.html,同样要使用 master.html。
  • 在 hello 页面添加首页链接。

调整模板 hello.html,添加到首页的链接。

<a href="{{ url_for('index') }}"><button>Home</button></a>
  • 作为你的任务,在首页添加到 hello 页面的链接。

总结

本实验中我们了解了微框架、WSGI、模板引擎等概念,学习使用 Flask 做一个 web 应用,在这个 web 应用中,我们使用了模板。而用户以正确的不同 URL访问服务器时,服务器返回不同的网页。最后还给大家留了一个小任务,希望大家能完成。

这里只介绍了 Flask 很少的一部分,有兴趣的可以学习 Flask 的官方文档

python的Flask 介绍的更多相关文章

  1. python之Flask实现登录功能

    网站少不了要和数据库打交道,归根到底都是一些增删改查操作,这里做一个简单的用户登录功能来学习一下Flask如何操作MySQL. 用到的一些知识点:Flask-SQLAlchemy.Flask-Logi ...

  2. Flask学习【第1篇】:Flask介绍

    Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是So ...

  3. Python和Flask真强大:不能错过的15篇技术热文(转载)

    Python和Flask真强大:不能错过的15篇技术热文 本文精选了 Python开发者 11月份的15篇 Python 热文.其中有基础知识,机器学习,爬虫项目实战等. 注:以下文章,点击标题即可阅 ...

  4. Python的Flask框架入门-Ubuntu

    全文请见tuts code:An Introduction to Python's Flask Framework Flask是Python一个小而强大的web框架.学起来简单,用起来也容易,能够帮你 ...

  5. python使用Flask作为MockServer的方法

    日常开发/测试过程中,需要对相关服务添加挡板--Mock 简单介绍一下使用python的Flask插件,对相关的服务进行Mock # coding:utf-8 import os from flask ...

  6. Flask【第1篇】:Flask介绍

    Flask入门 一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Wer ...

  7. 使用python的Flask实现一个RESTful API服务器端[翻译]

    最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文将会使用python的Flask框架轻松实现一个RESTful的服务 ...

  8. python strip()函数 介绍

    python strip()函数 介绍,需要的朋友可以参考一下   函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除 ...

  9. 使用python的Flask实现一个RESTful API服务器端

    使用python的Flask实现一个RESTful API服务器端 最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了. 本文 ...

随机推荐

  1. 搞定导致CPU爆满的“罪魁祸首”

    昨天,正忙着,一个用户来电,说一个系统非常缓慢,导致整个系统无法正常使用,必须马上处理,先看系统资源,通过用户反馈的信息,内存,IO没问题,CPU资源严重紧张,idle持续为零,堆积任务达几百个,系统 ...

  2. 戏说java多线程之CyclicBarrier(循环栅栏)的CyclicBarrier(int parties)构造方法

    CyclicBarrier是JDK 1.5 concurrent包出现的一个用于解决多条线程阻塞,当达到一定条件时一起放行的一个类.我们先来看这样一个简单的需求. 现在我有一个写入数据的类,继承Run ...

  3. [BZOJ4372]烁烁的游戏

    题面戳我 题意: 给一颗n个节点的树,边权均为1,初始点权均为0,m次操作: Q x:询问x的点权. M x d w:将树上与节点x距离不超过d的节点的点权均加上w. \(1≤n≤10^5\) sol ...

  4. spring中aop的注解实现方式简单实例

    上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们主要分为如下几个步骤(自己整理的,有更好的方法的 ...

  5. 原来你是这样的Websocket--抓包分析

    之前自己一个人负责完成了公司的消息推送服务,和移动端配合完成了扫码登录.订单消息推送.活动消息广播等功能.为了加深自己对Websocket协议的理解,自己通过进行抓包的方式学习了一番.现在分享出来,希 ...

  6. JVM垃圾收集器&对象的引用回收

    1.介绍垃圾收集器 垃圾收集器(Garbage Collection,GC)就是用于回收方法区和堆区,其他程序计数器.虚拟机栈.本地方法栈这3个区域都是随线程而生,随线程而灭,栈中的栈帧会随着方法的进 ...

  7. Lintcode249 Count of Smaller Number before itself solution 题解

    [题目描述] Give you an integer array (index from 0 to n-1, where n is the size of this array, data value ...

  8. python web开发-flask读取txt文件内容

    某些情况下,需要读取flask网站要目录下的txt文件.但是直接在flask网站的目录下创建一个文件是无法访问的.从网站找了一些资料,最终发现通过写一个方法返回txt内容比较简单方便,不过此方法适用于 ...

  9. HTTP 0.9 HTTP 1.0 HTTP 1.1 HTTP 2.0区别

    HTTP协议 :Hyper Text Transfer Protocol(超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议.是互联网上应用 ...

  10. Java基本包装类型

    基本类型的对象包装,也就是将常用的基本数据类型包装成对象 byte Byte short Short int Integer long Long boolean Boolean float Float ...