flask框架

中文文档(http://docs.jinkan.org/docs/flask/)
英文文档(http://flask.pocoo.org/docs/0.11/)
postman
回顾HTTP通信
在这里插入图片描述


历史

Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。

Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。

可以说Flask框架的核心就是Werkzeug和Jinja2

Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。


01-flask安装配置

虚拟环境是一个互相隔离的目录

mkvirtualenv flask_py2
pip install flask==0.10.1

pip freeze>requirements.txt
pip install -r requirements.txt

flask第一个 Hello World

# coding:utf-8

# 导入 Flask 类
from flask import Flask

# 创建一个flask的应用对象
# __name__ 表示当前的模块名字
#            模块名,flask以这个模块所在的目录为总目录,默认这个目录中的static为静态目录,templates为模版目录
app = Flask(__name__)
# app = Flask("__main_") # 直接当成启动文件的模式

@app.route("/") #装饰器
def index():
    """定义视图函数"""
    return "Hello Flask"

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

02-app对象的初始化和配置

目录

|-flask_project
|—static
|—templates
|—app.py
|—demo.py

flask应用对象初始化参数说明

"""
import name; #导入路径(寻找静态目录与模版目录位置的参数)
static_url_path # 访问静态资源的url前缀,默认static
static_folder # 静态文件的目录,默认 static
template_folder # 模版文件目录,默认是templates
"""

Flask(__name__, # __name__ 就是当前模块的名字
    static_url_path="/static", # 默认值是static
    static_folder="static",
    template_folder="templates"
)

静态文件目录与路由说明

/static/ index.html
将 static 目录摘取出来,默认访问静态资源了就;
约定成熟的!

url.py

flask 设置 - 配置参数

  • 3 直接操作 config app.config['DEBUG'] = TRUE
    flask中的配置参数不是在一个单独的文件中设置的,而是在app.config中保存的
    app.config的操作与对字典的操作相同,可以通过[]运算符直接设置其中的内容,还可以通过get取出其中的内容

    之前在启动程序的时候,如果设置debug=True的参数,就可以打开调试模式,如果不在启动的时候给出debug参数,也可以在app.config中设置DEBUG,同样可以打开调试模式。本次就以这个参数为例,演示一下flask的配置参数的方法

    from flask import Flask
    
    app = Flask(__name__)
    
    # 通过直接操作app.config字典,来完成配置参数
    # 这并不是一个好的配置参数的方法,仅供参考
    app.config["DEBUG"] = True
    
    @app.route("/")
    def index():
        return "<h1>hello world</h1>"
    
    
    if __name__ == "__main__":
        app.run()
    
  • 1 使用配置文件读取配置文件app.config.from_pyfile()
    通过app.config.from_pyfile(),指定配置文件,可以完成参数配置
    首先,创建一个settings.py文件,settings.py中的代码如下
    DEBUG = True

    from flask import Flask
    app = Flask(__name__) 
    app.config.from_pyfile("./settings.py")
    
  • 2 通过对象配置参数(项目中的方式) app.config.from_object()
    定义一个配置参数的类对象,然后从中读取配置信息
    从对象中读取文件的方法:app.config.from_object()
    具体的使用代码如下

    from flask import Flask
    
    app = Flask(__name__)
    
    class FlaskConfig:
        DEBUG = True
    
    app.config.from_object(FlaskConfig)
    
  • 4 使用环境变量读取配置文件
    同上一个方法一样,仍然是通过配置文件完成配置信息,但是不同的地方在于配置文件的名字没有被直接写在代码中,而是通过系统的环境变量读取的
    环境变量名设置为:任意,例如FLASK_SETTING
    读取环境变量使用:app.config.from_envvar(环境变量名的字符串)
    例如,在linux的系统中,通过如下的方式设置环境变量名

    # 环境变量的设置,用于linux系统,windows系统可通过相似的方法完成设置
    export FLASK_SETTING="./settings.py"
    

    然后在代码中,按照如下方式使用

    from flask import Flask
    
    app = Flask(__name__)
    app.config.from_envvar("FLASK_SETTING")
    

    补充:从环境变量中读取配置文件的分析
    在python中,通过内置的os模块,可以读取到环境变量,因此从环境变量中读取配置文件,和直接读取配置文件其实是一样的,以上代码相当于

    from flask import Flask
    import os
    
    app = Flask(__name__)
    
    # 通过os模块,从os.environ中读取到FLASK_SETTING的配置文件路径
    flask_setting = os.environ.get("FLASK_SETTING")
    
    # 通过刚刚读取到的配置文件的路径,通过from_pyfile配置文件
    app.config.from_pyfile(flask_setting)
    

读取 - 配置参数

视图中使用配置参数?

  • 1.直接从全局对象app的config字典中取值
    app.config.get()
  • 2.current_app
    from flask import Flask,current_app
    current_app.config.get()

app的run使用说明

Flask app.run的执行流程
在使用app.run执行的时候我们不是再本地跑或者说我们不想使用127.0.0.1的方式来执行。那我们应该怎么执行呢?
‘’’
1.host:要监听的主机名。 默认为127.0.0.1(localhost)。设置为“0.0.0.0”以使服务器在外部可用
2.port:默认值为5000
3.debug:默认为false。 如果设置为true,则提供调试信息
4.options:要转发到底层的Werkzeug服务器
‘’’
app.run(host=‘0.0.0.0’,port=5000,debug=True)

03-视图函数的路由

使用route() 装饰器来告诉 Flask 触发函数的 URL
路由转换器

视图函数的路由规则设置说明

  • 查看全部路由信息

    app.url_map 查看所有路由

  • 给路由指定访问方式

    通过 methods 限定访问方式, 接受参数形式为列表

    # 通过method限定访问方式
    @app.route('/post_only', methods=['POST', 'GET'])
    def post_only():
        return 'post'
    
  • 反解析 url_for()和redirect()

    使用 url_for() 的函数,可以通过 视图函数的名字 找到视图对应的 url 路径
    而 redirect() 函数则是 url 重定向,会再次发送一个新的请求。
    从 flask 库中导入这两个函数,一般这两个函数会一起使用。
    切记: url_for() 接收的是 视图函数的名称,返回的是对应的 url 路径,切勿把 url 路径传进去。


案例:

from flask import Flask,current_app,redirect,url_for

# 创建flask应用对象
# __name__表示当前的模块名字
# 模块名,flask以整个模块所在的目录为总目录,默认整个目录中的static为静态目录
# templates为模板目录
app = Flask(__name__)

@app.route("/")
def index():
    """
    定义的视图函数
    :return:
    """
    print(app.url_map)
    return "hello flask"

@app.route("/post_only",methods=["POST"])
def post_only():
    return "post only page"

@app.route("/hello",methods=["POST"])
def hello():
    return "hello 1"

@app.route("/hello",methods=["GET"])
def hello2():
    return "hello 2"

# 多个路由绑定同一视图函数
@app.route("/hi1")
@app.route("/hi2")
def hi():
    return "hi page"


@app.route("/login")
def login():
    # 使用url_for函数,通过视图函数的名字,找到视图对应的url路径
    url = url_for("index")
    return redirect(url)

@app.route("/register")
def register():
    url = "/"
    return redirect(url)

if __name__ == '__main__':
    # 通过url_map可以查看整个flask中路由信息
    print(app.url_map)
    app.run(debug=True)

路由提取参数与自定义路由转换器

路由转换器: 有时我们需要将同一类URL映射到同一个视图函数处理
比如:使用同一个视图函数 来显示不同用户的个人信息。

注意 转换器的使用格式为:<转换器类型:参数名称>

Flask内置转换器
转换器 描述
int 接受整数
float 同int,但是接受浮点数
path 和默认的相似,但也接受斜线
  • [ X ] 字符串转换器
    注意:视图函数里接受的参数必须和route捕获尖括号<>里的参数一致
# str转换器 不加转换器类型, 默认是普通字符串规则(除了/的字符)
@app.route('/user/<username>')
def user_str(username):
    response = 'hello {}'.format(username)
    return response
  • [ X ] 整型转换器
# int转换器
@app.route('/user/<int:user_id>')
def user_int(user_id):
    response = 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值