第22章 Flask Web框架的使用

1. Web框架简介

1.1 什么是Web框架

Web框架是用来简化Web开发的软件框架。框架的存在是为了避免重复劳动,典型的框架存在如下常用功能:

(1)管理路由

(2)访问数据库

(3)管理会话和Cookies

(4)创建模板来显示HTML

(5)促进代码的重用

1.2  常用的Web框架

Python的主流Web框架
框架特点
Flask轻量级Web应用框架,将werkzeug和Jinja粘合在一起,容易扩展,适用于小项目。
Django使用最多的Web框架,有通用后台,一站式服务,但Django耦合度高,替换掉内置功能比较复杂。
Bottle微框架,只依赖Python标准库,有独特的模板语言。
Tornado为解决实时服务而诞生,使用了异步非阻塞IO技术,运行速度快。

2. Flask框架的使用

2.1 安装虚拟环境

(1)安装virtualenv

pip install virtualenv  # 命令安装

virtualenv --version  # 检测安装版本

(2)创建虚拟环境

CMD命令行下,进入项目路径 D:  # 进入D盘

创建项目文件夹:midir Flask

进入项目文件夹,执行创建环境命令:virtualenv venv   #venv是虚拟环境的名称

通过命令激活虚拟环境:venv\Scripts\activate

检查:pip list

2.2 安装Flask

# 命令安装
pip install flask  
# 使用命令查看所有的安装包
pip list --format columns  

可以看到安装了Flask以及两个外部依赖库:Werkzeug和Jinja2.

2.3 第一个Flask程序

例:输出“Hello World!”

在venv同级目录下,创建一个hello.py文件

from flask import Flask  # 导入Flask
app = Flask(__name__)    # 实例化Flask,并将其赋值给app,参数为应用模块或包的名称

@app.route('/')   # 使用装饰器,定义路由,告诉Flask什么样的URL可以触发函数
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()     # run()函数让应用运行在本地服务器上

运行后,在浏览器中输入网址“http://127.0.0.1:5000/”,即可看到输出了Hello World!

2.5 路由

保存URL到Python函数的映射关系,处理URL和函数之间关系的程序成为路由。

在Flask程序中,最简单的定义路由的方法就是使用实例提供的app.route修饰器,把修饰的函数注册为路由,下面的例子说明了如何使用修饰器声明路由:

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

如何构造含有动态部分的URL,以及在一个函数上附着多个规则

(1)变量规则

URL中变量的部分,使用尖括号标记<variable_name>,这个部分将会作为命名参数传递到你的函数,规则可以用<converter:variable_name>指定一个可选的转换器,其中converter为参数类型

(2)构造URL

使用url_for()来给指定的函数构造URL。它将会接受函数名作为第一个参数,也接受对应URL规则的变量部分的命名参数。

示例:使用url_for()函数获取URL信息

from flask import Flask,url_for    # 引入Flsk,url_for模块 
app = Flask(__name__)  # 实例化Flask

...

@app.route('/url')
def get_url():
    # 根据ID显示文章,ID是整型参数
    return url_for('show_post',post_id=2)

if __name__ == '__main__':
    app.run(debug=True)     # 以调试状态运行应用

(3)HTTP方法

HTTP有许多不同的访问URL方法,默认情况下,路由只回应GET请求,使用route()装饰器传递methods参数可以改变这个行为。

@app.route('/login', methods == ['GET', 'POST']) 

2.6 静态文件

动态Web应用也会需要静态文件,通常是CSS和JavaScript文件,存放在static文件夹下,在应用中使用‘/static’即可访问。

给静态文件生成URL,使用特殊的“static”端点名:

url_for('static', filename='style.css')

2.7 模板

模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,其具体值只在请求的上下文中才能知道。

使用真实值替换变量,在范围最终得到的响应字符串,这一过程称为渲染,使用Jinja2模板引擎

(1)渲染模板

(2)变量

{{name}}结构表示一个变量,它是一种特殊的占位符,jinja2将从渲染模板中获取值,jinja2能识别所有类型的变量。

{{ mudict['key' ]}}:从字典中获取值

{{ mylist[3] }}:从列表中获取值

{{ mylist[myintvar]  }}从列表中取一个带索引的值

{{  myobj.somemethod() }} 从对象的方法中获取一个值

使用过滤器,只用竖线|隔开

{{ name| capitalize}}  # 该模板以首字母大写形式显示变量name的值

常用的过滤器说明
名称说明
safe渲染值时不转义(默认情况下,出于安全考虑,jinja2会转义所有变量)
capitalize首字母大写,其余小写
lower把值转换为小写
upper

把值转化为大写

title把值中的每个单子的首字母转换为大写
trim把值的首尾空格去掉
striptags渲染之前把值中所有的HTML标签都删掉

(3)控制结构

在模板中使用条件控制语句

{% if user %}
Hello,{{ user }}!
{% else %}
Hello, Stranger!
{%  endif %}

通过for循环,实现在模板中渲染一组元素

<url>
{% for comment in comments  %}
<li>{{ comment }}</li>
{% endfor %}
</url>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值