Flask基础之程序理解

时间:2021-12-19 10:36:18

Flask程序运行过程

  • 所有Flask程序必须有一个程序实例
  • 获取资源时,一般通过浏览器发起HTTP请求
  • Web服务器使用WSGI(Web Server Gateway Interface)协议,把来自客户端的所有请求都交给Flask程序实例,程序实例使用Werkzeug来做路由分发
  • 根据每个URL请求,找到具体的视图函数并进行调用,在Flask程序中,路由一般是通过程序实例的装饰器来实现的
  • Flask调用视图函数后,返回两种内容
    • 字符串内容:将视图函数的返回值作为响应的内容,返回给浏览器
    • HTML模版内容:获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后返回响应数据给浏览器

Flask程序

  新建py文件

# 到入Flask类
from flask import Flask

# Flask函数接收一个参数name,指向程序所在的模块
app = Flask(__name__)

# 这里装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
    return 'index'

# Flask应用程序实例的run方法启动WEB服务器
if __name__ == '__main__':
    app.run()

  在程序运行过程中,程序实例可以使用url_map将装饰器路由和视图的对应关系打印出来


 

参数

初始化参数

  点击Flask查看源码

Flask基础之程序理解

  • import_name:模块名
  • static_url_path:静态文件访问前缀
  • static_folder:默认'static'
  • templatee_folder:默认'templates'

配置参数

  • app.config.from_pyfile()  # 从配置文件中加载
  • app.config.from_object()    # 从对象中加载
  • app.config.from_envvar()      # 从环境变量中加载

读取配置参数

  • app.config.get()
  • 在视图中 current_app.config.get()

  current_app是应用程序上下文,用于存储应用程序中的变量,可以通过current_app.name打印当前app的名称,也可以在current_app中存储一些变量

app.run()中的参数

  • app.run(host='0.0.0.0',port=5000,debug=True)

 

路由的各种定义方式

请求方式

  使用methods参数指定可接受的请求方式,请求方式可以是多种

@app.route('/',methods=['GET'])
def index():
    return 'index'

路由查找方式

  同一个路由指向两个不同的函数时,在其匹配过程中,从上到下依次匹配

@app.route('/')
def index1():
    return 'index-----1'

@app.route('/')
def index2():
    return 'index-----2'

  以上路由'/'输出的结果是index1函数的结果

给路由传参

  有时需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同订单的详细信息

@app.route('/order/<int:id>')
def order(id):
    return 'order %d' %id

正则路由(自定义转换器)

  在web开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,用来限制访问

# 导入转换器包
from werkzeug.routing import BaseConverter

# 自定义转换器
class Regex_url(BaseConverter):
    def __init__(self,url_map,*args):
        super(Regex_url,self).__init__(url_map)
        self.regex = args[0]

app = Flask(__name__)

# 将自定义转换器类添加到转换器字典中
app.url_map.converters['re'] = Regex_url

@app.route('/order/<re("[a-z]{3}"):id>')
def order(id):
    return 'order %d' %id

 


 

Flask框架:

  Flask框架的核心:WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2  

  Python有Django、Flask、Tornado等框架,虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是我个人偏爱Flask的原因。


 

共勉:

  来自高士其的一句话:对世界上的一切学问与知识的掌握也并非难事,只要持之以恒地学习,努力掌握规律,达到熟悉的境地,就能融会贯通,运用自如了。