基本概念

什么是Flask?

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

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

维基百科 WSGI 的介绍:

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

什么是模板引擎?

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

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

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

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

"Hello World"应用

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

  • 安装 flask
$ sudo pip3 install flask
  • 创建项目结构
$ cd /home/shiyanlou
$ 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 python3

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!" 文本,如下图:

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 应用

访问 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 变量之后在页面中显示其自身。

额外工作

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

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

  • 创建模板文件 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,你还可以学习实验楼的Python Flask Web框架课程。

当然,在学习过程中有任何不懂的地方或者对Flsak非常感兴趣,推荐学习Flask官方文档

参考链接:https://www.shiyanlou.com/courses/596

最新文章

  1. 用队列模拟jquery的动画算法
  2. Single-page app(SPA)
  3. 简单横道图Demo
  4. Linux/CentOS 同步网络时间
  5. MVC2 Area实现网站多级目录
  6. LinkedHashMap 和 LRU算法实现
  7. mysql的相关操作
  8. 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录
  9. 开通GitHub以及使用笔记
  10. [HTML]img标签属性
  11. 虚拟机安装了ubuntu,忘记密码修复
  12. 用java流方式判断文件类型
  13. python应用之文件属性浏览
  14. Visual Studio Code中配置GO开发环境
  15. 【BZOJ1040】骑士(动态规划)
  16. 用eclipse怎样将本地的项目打成jar包上传到maven仓库
  17. MySQL8.0
  18. 2018上C语言程序设计(高级)- 第1次作业成绩
  19. Unity对象池的实现
  20. 记录下pytorch代码从0.3版本迁移到0.4版本要做的一些更改。

热门文章

  1. web项目中url-pattern改成'/'后,js、css、图片等静态资源(404)无法访问问题解决办法
  2. springboot读写分离--temp
  3. Python学习之旅—生成器对象的send方法详解
  4. Cocoapods fatal: Remote branch #{s.version} not found in upstream origin
  5. clipse maven 项目 出现红色叹号 解决方法
  6. Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学
  7. poj3185//BFS随便切...
  8. sql server编写一个语句脚本自动清空各表数据以初始化数据库
  9. 关于国债的一些计算: 理论TF价格1(缴款日前无付息)
  10. GoAhead4.1.0 开发总结三(GoAction+Ajax实现局部数据交互)