带你读《Python Flask Web开发入门与项目实战》之二:Flask快速上手

简介: 本书从Flask框架的基础知识讲起,逐步深入到使用Flask进行Web应用开发实战。内容通俗易懂,案例丰富,实用性强,特别适合Python Web开发的入门读者和进阶读者学习,也适合PHP程序员和Java程序员等其他Web开发爱好者阅读。另外,本书可以作为相关培训机构的教材用书。

点击查看第一章
点击查看第三章

第2章 Flask快速上手

  Flask是一个使用Python编写的轻量级Web应用框架。何谓Web应用框架?Web应用框架(Web application framework)是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发。使用Web应用框架可以节约项目开发的时间和成本。Web开发中有一些共同的功能已经实现了,共同的功能指的是数据库驱动、网页模板引擎、Session和Cookie等基础功能,开发设计人员只要使用框架提供的方法,就可以快速高效地进行Web应用开发。Flask框架诞生于2010年,其作者为Armin Ronacher。本来这个项目只是作者在愚人节的一个恶作剧,后来该框架受到了广大开发者的喜爱,进而成为一个正式的项目。本章主要介绍Flask的基础知识、URL传递参数和URL反转等内容。
  本章主要涉及的知识点有:

  • Web初步知识;
  • Flask程序的基本结构;
  • URL传递参数;
  • URL反转。

2.1 Web基础知识

  Web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP协议的、全球性的、动态交互的、跨平台的分布式图形信息系统,是建立在互联网上的一种网页浏览交互服务,为访问者在互联网上查找和浏览信息提供了图形化的直观人机交互接口界面,其中的文档和超链接的组合更是将互联网上的信息流节点组织成一个互为联系的网络格子状结构。
  万维网的工作原理是:当你请求一个网络资源的时候,应该在浏览器上输入所要访问网页的统一资源定位符(Uniform Resource Locator,URL),当然,也可以通过超链接方式链接定位到要请求的那个网页或静/动态资源。之后是对URL根据分布于全球的因特网域名解析系统的数据库进行查询解析,并根据解析结果决定访问哪一个IP地址对应的服务器。接下来是向对应的Web服务器发出一个HTTP请求,相应的Web服务器接收HTTP请求后,调用相应的Web应用处理请求,然后Web服务器再将响应结果(响应结果指的是图片、超文本标记语言,即HTML、JavaScript和视频等资源)返回给客户端浏览器。Web工作原理如图2.1所示。

image.png

  通常的URL一般由传输协议名、资源所在的主机名或IP地址、网络服务程序的端口号和(目录)文件名等几个部分组成,即:
  URL=传输协议+主机名+端口号+(目录)文件名。
  传输协议一般是http(HyperText Transfer Protocol,超文本传输协议)或https(HyperText Transfer Protocol over Secure Socket Layer,安全套接字层超文本传输协议)。主机名这里主要指服务(www)+域名(如:google.com)。端口号是可选的,没有给出的话,默认端口一般是指80号端口(http协议使用的80端口,https协议使用的443端口)。目录的出现是在网站结构复杂时,某些资源会放到某个目录下或若干个目录下,这样就构成了文件的路径。文件名精确地指定了要访问的Web页面。未指定文件名时,处理请求的Web服务器会根据服务器本身的设置查找出默认的文件,如index.html、default.jsp等。

2.2 第一个Flask Web程序

  Flask是一个基于Python语言的微型Web框架。之所以被称为微型,是因为其核心非常小,但是该Web框架简约而不简单,具有很强的扩展能力。本节介绍如何编写和运行第一个Flask Web应用程序。

2.2.1 安装Flask框架

  要使用Flask框架,必须先安装Flask。安装主要方式有两种。
  1.在PyCharm中安装Flask
  (1)执行File | Settings命令,如图2.2所示。

image.png

  (2)在上一步操作基础上,继续执行Project:untitled(untitled为工程名,要根据实际的工程名来选择)|Project Interpreter,如图2.3所示。

image.png

  (3)单击图2.3中的“+”号按钮后,弹出如图2.4所示对话框,在输入框中输入Flask,然后回车。

image.png

  (4)安装成功以后,如图2.5所示。

image.png

  2.用pip方式安装Flask
  笔者的虚拟环境地址为J:flask-venvvenv,在cmd下按以下步骤操作:

(1)  cd j:
  (2)  cd J:\flask-venv\venv\Scripts
  (3)  activate

  
  上面3个命令的每个命令输入完后都需要回车。执行完这3个命令后,表示成功激活当前虚拟环境。在(venv)J:flask-venvvenvScripts>下输入pip install Flask,即:

(venv)J:\flask-venv\venv\Scripts> pip install Flask

然后回车,即可安装Flask了。

image.png

2.2.2 在Flask中输出Hello World

  所有的Flask程序都必须创建一个程序实例。Web服务器使用一种名为Web服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所有请求都转给这个对象进行处理。程序实例是Flask类的对象,经常使用下述代码创建:

from flask import Flask
  app = Flask(__name__)

  from flask import Flask这行代码表示从Flask框架中引入Flask对象。app = Flask(__name__)这行代码表示传入__name__这个变量值来初始化Flask对象,Flask用这个参数确定程序的根目录,__name__代表的是这个模块本身的名称。
  使用route()装饰器注明通过什么样的URL可以访问函数,同时在函数中返回要显示在浏览器中的信息。代码如下:

@app.route('/')
  def index():
  return 'Hello World!'

  @app.route('/')这行代码指定了URL与Python函数的映射关系,我们把处理URL和函数之间关系的程序定义为路由,把被装饰的函数index()注册为路由,此处注册给index()函数的路由为根目录。
  这里的index()函数叫做视图函数,视图函数必须要有返回值,返回价值为字符串或简单的HTML页面等内容。
  系统初始化了,路由和视图函数有了,Flask程序如何运行呢?Flask程序的运行需要服务器环境,我们可以通过run方法来启动Flask自身集成的服务器。代码如下:

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

  如果__name__=='__main__',就要启用Web服务来运行上面的程序,服务器一旦开启,就会进入轮询状态,等待并处理请求。在app.run()中可以传入一些参数,比如debug,app.run(debug=Ture),表示设置当前项目为debug模式,也就是调试模式。如果设置了调试模式,遇到程序有错误,会在控制台输出具体的错误信息,否则只会笼统地报告“应用服务器错误”的信息。另一方面,如果设置为调试模式,期间又修改了程序代码,系统会自动重新将修改的代码提交给Web服务器,你只需要确保浏览器没有缓存,便可以得到最新修改的代码结果。
  app.run()还可以传入端口等信息,比如app.run(host='0.0.0.0',port=8080),host='0.0.0.0'参数设置启用本机的IP地址可以访问,端口地址指定为8080,如果不指定,则为5000。
  接下来,在PyCharm中实现上述项目。
  在PyCharm中新建一个名称为2-1的工程(新建工程注意使用已经存在的“虚拟环境”),如图2.6所示。

image.png

  app.py的内容见例2-1。

image.png

  运行程序,结果如图2.7所示。

image.png

  如果启用的端口不是5000端口,这里port=8888在笔者的PyCharm 2018.2.1版本中是不会生效的,访问地址仍然为http://127.0.0.1:5000/ ,为使新端口地址生效,还需要做进一步设置。
  (1)执行Run | Edit Configurations命令,如图2.8所示。

image.png

  (2)弹出如图2.9所示对话框。

image.png

  (3)在Additional options输入框中输入“--host=192.168.31.118 --port=8888”(192.168.31.118为笔者计算机的IPv4地址),当然这里你也可以输入“--host=127.0.0.1 --port=8888”。接下来,在浏览器地址栏可以输入http://192.168.31.118:8888/ 访问网页,192.168.31.118一个网段内的局域网计算机也可以通过http://192.168.31.118:8888/ 访问到此网页的内容。

image.png

2.3 URL传递参数

  Flask中如果要传递一个变量或者一个参数,可以通过表单和地址栏两种方式来传递。其中,通过浏览器地址栏URL方式传递/获取某个变量或参数使用得比较多。这样,我们可以使用相同的URL指定不同的参数,来访问不同的内容。
  Flask通过URL传递参数,传递参数的语法是:'/<参数名>/'。需要注意两点:参数需要放在一对< >(尖括号)内;视图函数中需要设置同URL中相同的参数名。
  下面在PyCharm中新建一名称为2-2的工程。

image.png


  
  02行表示导入Flask模块;03行表示Flask实例化;04行定义路由;05行定义视图函数;06行是返回值;07行定义路由;08行表示返回值;09、10行表示如果某模块被直接运行,则其__name__为'__main__',条件为真,就开启调试模式。
?注意:在Python中,所有没有缩进的代码都会被执行,__name__是Python的内建函数,指的是当前模块的名称,每个模块都有自己的__name__属性,但__name__的值是会变化的,如果某模块被直接运行,则其__name__为'__main__',条件为真,就可以执行app.run()方法,使得整个程序得以运行。当模块被导入时,代码不被运行。
  如果07行代码中name没有指定数据类型,那么默认就是string数据类型。在浏览器的地址栏中输入 http://127.0.0.1:5000/user/zhangsan ,回车后便可以得到如图2.10所示的访问结果。
  如果此时在浏览器地址栏输入的内容为 http://127.0.0.1:5000/USER/zhangsan,回车后还可以得到如图2.8所示结果吗?结果显然是否定的。因为这里的user是区分大小写的。
  在if name == '__main__':这行代码之上继续增加如下代码:
@app.route('/news/<int:id>')
  def list_news(id):

  return "接收到的id为%s" % id
  在浏览器地址栏输入http://127.0.0.1:5000/news/1 ,回车后便可以得到如图2.11所示结果。

image.png

  如果在浏览器的地址栏输入http://127.0.0.1:5000/news/1.1 ,回车后还可以得到正确的结果吗?结果显然也是否定的。定义成int数据类型的URL只能传递int类型,定义成float数据类型时,URL只能传递float类型,即定义的是什么数据类型,URL传递的参数就必须为对应的数据类型。

2.4 URL反转

  在2.3节中,我们设定了一些函数访问URL。有时候,在作网页重定向或是模板文件时需要使用在视图函数中定义的URL,我们必须根据视图函数名称得到当前所指向的URL,这就是URL反转。下面通过一个实例来看URL反转的使用。
  下面在PyCharm中新建一名称为2-3的工程。

image.png
image.png


  
  使用URL反转,用到了url_for()函数,需要使用from flask import url_for导入,url_for() 函数最简单的用法是以视图函数名作为参数,返回对应的URL。例如,在上面的程序中如果用url_for('index'),得到的结果是/,运行上述代码,结果如图2.12所示。

image.png

2.5 页面跳转和重定向

  用户在访问某个页面的时候,我们希望他登录后才能访问该页面,如果此时他没有登录,系统就让浏览器由当前页面跳转到登录页面,这里就涉及页面重定向问题。所谓页面重定向,就是用户在打开某个页面的时候,我们期望页面跳转到另一个指定的页面,让用户完成某种操作或执行某个动作。
  Flask中提供了重定向函数redirect(),该函数的功能就是跳转到指定的URL。下面在PyCharm中新建一名称为2-4的工程。

image.png


  
  02行表示当模块被直接运行时,代码将被运行,当模块被导入时,代码不被执行;03行表示Flask初始化;04行定义路由;05行表示定义视图函数;06行表示打印输出;07行表示URL反转;08行表示网页重定位;09行表示定义路由;10行表示定位视图函数;11行表示返回值;12行表示当模块被直接运行时,代码将被运行,当模块被导入时,代码不被执行。
  重定向是将原本的URL重新定向成为一个新的URL,可以实现页面的跳转。Flask中使用到了redirect()函数,需要使用from flask import redirect将其导入才能使用。这里输入地址访问的首先应该是index()这个视图函数,但是index()这个视图函数直接跳转到了user_login视图上,运行结果如图2.13所示。

image.png

2.6 温 故 知 新

  1.学完本章内容后,读者需要回答:
  (1)什么是Flask?
  (2)URL如何传递参数?
  (3)网页如何重定向?

  2.在下一章中将会学习:
  (1)模板及Flask模板渲染。
  (2)模板中传参的方法。
  (3)模板中的条件语句和循环语句的使用。

2.7 习 题

  通过下面的习题来检验本章的学习情况,习题答案请参考本书配套资源。
  【本章习题答案见配套资源源代码C2习题】
  有如下代码,对其进行URL反转(从视图函数到URL的转换),在index()视图函数中,请打印输出my_list()函数的反转地址。

# encoding utf-8
  from flask import Flask,url_for
  app = Flask(__name__)
  @app.route('/')
  def index():
      return 'Hello World!'
  @app.route('/list/')
  def my_list():
      return 'list'
  if __name__ == '__main__':
      app.run()
相关文章
|
1天前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1天前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
知识图谱 Python
Python入门:4.Python中的运算符
Python是一间强大而且便捷的编程语言,支持多种类型的运算符。在Python中,运算符被分为算术运算符、赋值运算符、复合赋值运算符、比较运算符和逻辑运算符等。本文将从基础到进阶进行分析,并通过一个综合案例展示其实际应用。
|
1天前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
Python入门:1.Python介绍
Python是一种功能强大、易于学习和运行的解释型高级语言。由**Guido van Rossum**于1991年创建,Python以其简洁、易读和十分工程化的设计而带来了庞大的用户群体和丰富的应用场景。这个语言在全球范围内都被认为是**创新和效率的重要工具**。
Python入门:1.Python介绍
|
1天前
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
打造高效的Web Scraper:Python与Selenium的完美结合
|
4天前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
23 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡

热门文章

最新文章

推荐镜像

更多