栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Flask框架学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask框架学习笔记

文章目录
        • 标准的flask目录
        • Flask函数常用参数
        • 路由请求类型methods
        • 指定加载配置数据
        • 查看所有路由信息app.url_map
          • window
          • linux
        • Flask默认有三种请求
        • 蓝图blueprint
        • 转换器converters
        • 错误处理 errorhandle

pip list 查看安装了哪些库
pip freeze > 文件名.txt 将已经安装的第三方库导入到本地文件(项目路径中)
pip install -r 文件名 循环遍历导出的依赖库

标准的flask目录
  • static:下面存放静态资源
  • templates: 用于存放要选渲染的资源,一般为html (路径在flask程序的同级目录中) (render_template)

flask的helloworld快速上手

分析:

  1. 首先导入依赖
  2. 初始化flask返回给变量app
  3. 使用@app.route设置路由(编写函数,解析路由)
  4. 启动app
Flask函数常用参数

一般初始化函数时,使用Flask(name) => 这个__name__会解析到当前类,然后将当前类所在的包设为主项目(可以访问static templates)。
Flask(name,**)
Flask后还有三个常用的参数。

  • static_folder=“文件夹名” => 将static文件夹名字进行更改。默认是static
  • static_url_path = “/访问路径” => 将访问页面 localhost:5000/static/* 修改成 localhost:5000/修改后的访问路径/*
  • template_folder = “文件夹名” => 将template文件夹名字进行更改。默认是template
路由请求类型methods

设置可以使用post请求访问

@app.route('/',methods=["Get","Post"])

路由参数,指定参数类型为int

@app.route("/order/")
def getOrderId(orderId):
    return "orderId : %s"%orderId
指定加载配置数据
  1. 从配置对象加载 from_object
  2. 从本地配置类中加载 from_pyfile
  3. 从环境变量加载 from_envvar
  4. app.confg[‘配置’] = “”

配置大写如:SECRET_KEY

  • 设置配置 app.confg[‘配置’] = “”
    获取的话,就是字典。如
  • 查询配置
    print(app.confg.get("")) print(app.config[""])

from flask import Flask
from config import config

app = Flask(__name__)

# 第一种
# app.config["SECRET_KEY"] = "hujinmg"

# 第二种
# app.config.from_object(config)

# 第三种
# app.config.from_pyfile("config2.py")

# 第四种
app.config.from_envvar("PROJECT",silent=True)

@app.route("/")
def index():
    print(app.config.get("SECRET_KEY"))
    return f"SECRET_KEY = {app.config.get('SECRET_KEY')}"

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

新版方式,可以不用写app.run(),使用flask run进行启动,需要传入环境变量用于指定是启动那个文件。


flask run == python.exe -m flask run

查看所有路由信息app.url_map
  1. 第一种
window

set FLASK_APP=hello.py

linux

export FLASK_APP=hello.py

windows设置环境变量
set 变量名=变量值
linux设置环境变量
export 环境变量=变量值

2. 第二种
print(app.url_map)

Flask默认有三种请求

GET HEAD OPTIONS
405 方法不允许

@app.route("/1",methods=['post'])
def index():
    return "111"
print(app.url_map)

如果只有methods=[‘Post’]的话
使用app.url_map可以产看到,只支持Options和Post,没有Get了。

Map([ index>,
 ' (OPTIONS, HEAD, GET) -> static>])
蓝图blueprint

使用蓝图可以创建一个蓝图Blueprint里面可以编写 名字,name

  • 使用蓝图
  1. user = Blueprint(“user”,name) # 创建蓝图对象
  2. @user.route("/") # 使用创建好的对象进行添加路由
  3. 注册蓝图 app.register_blueprint(user,url_prefix="/路径") # 在app主启动类中,注册蓝图并添加访问url路径前缀
  • 蓝图导入
    一般将蓝图配置放到__init__中。需要注意的是要将文件导入进去。


解决办法是:在__init__初始化类中,导入views这个路由类。这样在from goods import goods_bp时会加载__init__类中的内容。__init__类中在去加载views类。

蓝图内部的静态文件,必须要显示指出。没有默认的。和Flask函数的参数一样

转换器converters

代码展示

from flask import Flask
# werkzeug => 工具
from werkzeug.routing import baseConverter

app = Flask(__name__)

# 使用系统自带的int转换器。
@app.route("/user/")
def converter(userid):
    print("userid type is {}".format(type(userid)))
    return "userid is {}".format(userid)

# 自定义类,继承自baseConver,重写regex属性。
class MyConverter(baseConverter):
    # regex正则。
    # 1[3-9]     =》   1开头 [3-9](3-9之间的数) d 数字   d{9}表示任意9个数
    regex = r"1[3-9]d{9}"

# url_map中的converters是个字典
app.url_map.converters["myPhoneNum"] = MyConverter


# 自定义converter,实现限制接口为/user/手机号(11位)
@app.route("/phone/")
def myConverter(phoneNum):
    print("type is {}".format(type(phoneNum)))
    return "phone num is => {} ".format(phoneNum)

# 查看自带的转换器
print(app.url_map.converters.get("int"))  # 
print(app.url_map.converters.get("string"))  # 

converter(转换器)文本描述。
flask作为轻型WEB框架,在web开发中,可能会出现限制用户访问的规则的场景,那么这个时候,就需要过滤指定用户,所以可以使用转换器实现。
转换器的本质是:通过正则表达式匹配路由地址
flask 系统自带的转换器有

DEFAULT_ConVERTERS = {
    'default':    =>      UnicodeConverter,
    'string':     =>      UnicodeConverter,
    'any':        =>      AnyConverter,
    'path':       =>      PathConverter,
    'int':        =>      IntegerConverter,
    'float':      =>      FloatConverter,
    'uuid':       =>      UUIDConverter,
}

转换器总结:

  • 使用系统自带的转换器。
    只用在动态的接口前加个 系统自带的转换器即可 如 int:url变量
  • 自定义转换器
    当系统自带的转换器不能满足需求时,我们就要自定义转换器。分为以下步骤
  1. 导入包 from werkzeug.routing import baseConverter
  2. 自定义类继承自baseConverter,重写regex属性
  3. 使用app.url_map.converters[key] = 自定义类
  4. 在动态url变量前 限制即可。 如@app.route("/phone/myPhoneNum:phoneNum")
错误处理 errorhandle

本来如果报错的话前端页面会显示出英文错误。可以设置请求报错时的显示。
app.errorhandle(404)

代码

from flask import Flask
# werkzeug => 工具
from werkzeug.routing import baseConverter

app = Flask(__name__)

@app.errorhandler(500)
def error500(e):
    print(e)
    return "500错误"

@app.errorhandler(404)
def error404(e):
    print(e)
    return "404页面走丢了"

@app.errorhandler(ZeroDivisionError)
def zeroDivisionError(e):
    print(e)
    return "除数不能为零"

@app.route("/zero")
def zero():
    1 / 0
    return "1/0"

@app.route("/user/")
def converter(userid):
    print("userid type is {}".format(type(userid)))
    return "userid is {}".format(userid)

class MyConverter(baseConverter):
    # regex正则。
    # 1[3-9]     =》   1开头 [3-9](3-9之间的数) d 数字   d{9}表示任意9个数
    regex = r"1[3-9]d{9}"

# url_map中的converters是个字典
app.url_map.converters["myPhoneNum"] = MyConverter


# 自定义converter,实现限制接口为/user/手机号(11位)
@app.route("/phone/")
def myConverter(phoneNum):
    print("type is {}".format(type(phoneNum)))
    return "phone num is => {} ".format(phoneNum)

# 查看自带的转换器
print(app.url_map.converters.get("int"))  # 
print(app.url_map.converters.get("string"))  # 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号