vlambda博客
学习文章列表

flask配置参数、路由、转换器

点击上方“蓝字”关注我叭


Flask框架

Flask是python的web框架,最大的特征是轻便

就属于轻量级框架了,它只提供最核心的功能,如果业务变化快,可以选用Flask,自己来搭建符合自己公司业务后端架构。

开始一点一点做笔记。

flask配置参数、路由、转换器

想学Java的可以关注他,扫码即可。

flask配置参数、路由、转换器


flask配置参数、路由、转换器

开始我们的笔记。

新建一个文件夹,然后选择虚拟环境,没有的可以去百度(过几天我再写创建虚拟环境的笔记),哈哈哈,就皮。

有的话,选择一个虚拟环境,先通过pip install flask安装配置环境


开始第一个项目,先跑一个项目

from flask import Flask

#导入包


app = Flask(__name__)

#__name__表示当前的模块名字,确定程序的根目录。里面传什么,flask有一个函数就会把里面传的这个文件确定为根目录,找图片之类的静态文件能够找到,如果写成别的,可能找不到,会报错

#app是Flask的实例,它接收包或者模块的名字作为参数,可以变,但一般都是传递__name__,后面也会详细说一下这个

@app.route("/")#这个是路由,后面会有解释,看了就明白了,先跑项目
def index():#这个就是定义了一个函数,相当于视图
   
return "index"#这个是访问这个路由返回给页面的东西


if __name__ == "__main__":

       app.run()

#跑项目

#在控制台就输入python 当前文件的名字   回车就可以,下面是运行的结果

运行结果:

flask配置参数、路由、转换器



flask配置参数、路由、转换器
配置flask参数


通过代码开启调试模式。这样当我们程序出错的时候,就能知道错误在多少行,方便我们快速定位错误。如果DEBUG=false,运行代码之后,页面会显示报错,但是没有具体的错误。


不开启debug模式

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
print(1 / 0)#这个肯定是错误的
return "index"

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

运行结果:

flask配置参数、路由、转换器


方法一:类方法配置

from flask import Flask

app = Flask(__name__)

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

class Config():
DEBUG = True
app.config.from_object(Config)

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

运行结果:

flask配置参数、路由、转换器

并且可以定位错误

flask配置参数、路由、转换器


方法二:通过文件配置

先新建一个文件config.cfg,写DEBUG = True

from flask import Flask

app = Flask(__name__)

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

# class Config():
#     DEBUG = True
# app.config.from_object(Config)

app.config.from_pyfile("config.cfg")

#直接写上文件的名字

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

运行结果:和第一种方法运行下来的是一样的


方法三:直接操作

app.config['DEBUG'] = True

config本质上就是一个字典,你可以按住ctrl,用鼠标点进去看一下。字典的话可以根据键来赋值。

方法四:对象上操作

app.debug = True

方法五:直接传入参数操作(只限制于DEBUG参数)

if __name__ == "__main__":
app.run(DEBUG=True)

重点:如果DEBUG是关闭的状态,每一次运行都需要自己手动重启。

flask配置参数、路由、转换器
在视图中获取配置参数

在刚刚创建的config文件中输入AGE =10,在视图中取出来。

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
print(app.config.get('AGE'))
#config是字典,所以取值就根据键取值就好
   
return "index"

@app.route("/center")
def center():
print(app.config.get('AGE'))
return 'center'

app.config.from_pyfile("config.cfg")


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

运行结果:

flask配置参数、路由、转换器

flask配置参数、路由、转换器


还有一种方法,要导入一下

from flask import Flask,current_app

@app.route("/center")
def center():
print(app.config.get('AGE'))
print(current_app.config.get('AGE'))
#如果当前的视图比较多,我们不会写在一个文件下,这个时候取参数的话,就得通过current_app取值,表示当前的app

       return 'center'

flask配置参数、路由、转换器
支持本机上的任何一个Ip都可以访问
if __name__ == "__main__":
app.run(host='0.0.0.0',port='5000')

host表示本机上的任意一个ip,port表示任意一个端口,可以通过ifconfig命令查看自己的本机IP(linux),Windows下通过ipconfig查找。

然后直接在浏览器输入你查到的ip:5000就可以访问

flask配置参数、路由、转换器
路由
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
return "index"

@app.route("/center")
def center():
return 'center'

app.config.from_pyfile("config.cfg")


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

访问路由运行结果

flask配置参数、路由、转换器

flask配置参数、路由、转换器

路由重定向

比如我们访问index首页的时候,页面自动跳转到center页面。(有时候在网页上我们登录成功之后,页面就会自动跳转到首页,这个就是重定向)

from flask import Flask,url_for,redirect
#url_for里面的参数是函数的名字
#rediect是表示重定向
app = Flask(__name__)

@app.route("/")
def index():
return redirect(url_for('center'))

@app.route("/center")
def center():
return 'center'

app.config.from_pyfile("config.cfg")

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

这个表示访问首页的时候,重定向到center页面,然后页面上显示的是center。

flask配置参数、路由、转换器

设置请求方式

常见的浏览器的请求方式有:

get:获取资源

post:新增资源

put:更新资源(修改资源)

delete:删除资源

options:询问支持的方法

在登录界面一般用post方法,但是如果在postman中用get方法去访问的话,是不允许的,这个时候我们可以设置,把他改成允许。

from flask import Flask,url_for,redirect
#url_for里面的参数是函数的名字
#rediect是表示重定向
app = Flask(__name__)

@app.route("/login",methods=['POST','GET',])
def index():
return redirect(url_for('center'))

@app.route("/center")
def center():
return 'center'

app.config.from_pyfile("config.cfg")

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

运行结果:

flask配置参数、路由、转换器


flask配置参数、路由、转换器


flask配置参数、路由、转换器

flask配置参数、路由、转换器

转换器

转换器的作用可以取到url后面的参数

flask支持的转换器有:default、string、int、floa、uuid、path(和default、string不同的是,它可以匹配斜线)

举一个例子:

from flask import Flask,url_for,redirect
#url_for里面的参数是函数的名字
#rediect是表示重定向
app = Flask(__name__)


@app.route("/center/<int:id>")

#规定参数必须是整数

def center(id):
   
return "你的id%s" % id#取参数

app.config.from_pyfile(
"config.cfg")

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

flask配置参数、路由、转换器

如果传的是整数的话

flask配置参数、路由、转换器

但是如果传-1的话就会报错,要想不报错,得加:

@app.route("/center/<int(signed=True):id>")

这样的话,也可以取到负数

flask配置参数、路由、转换器


uuid是不重复的通用的唯一标识,可以在后端输入python,import uuid导入uuid模块,然后,uuid.uuid4()回车一下,就可以生成一个,可以写一个转换器,验证一下。


转换器的原理就是一个正则


自定义转换器

转换器的源码:

from werkzeug.routing import BaseConverter

可以ctrl,鼠标点进去看看

自定义一个手机号的转换器,注意一定要导入模块


from flask import Flask,url_for,redirect
#url_for里面的参数是函数的名字
#rediect是表示重定向
from werkzeug.routing import BaseConverter
app = Flask(__name__)

class MyConverter(BaseConverter):#一定要继承基类
regex = '1[23456789]\d{9}'

app.url_map.converters['re'] = MyConverter

#把自定义的转换器加到这个里面

@app.route("/center/<re:id>")
def center(id):
return "你的id%s" % id

app.config.from_pyfile("config.cfg")

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

随机在网址上输入11位数就可以,运行结果:

flask配置参数、路由、转换器


实现自定义转换器的重复利用
from flask import Flask,url_for,redirect
#url_for里面的参数是函数的名字
#rediect是表示重定向
from werkzeug.routing import BaseConverter
app = Flask(__name__)

class MyConverter(BaseConverter):
def __init__(self,map,re):
#map是默认的参数,re就是你传进来的参数,你传进来什么,就是什么
       super().__init__(map)
self.regex = re

app.url_map.converters['re'] = MyConverter
@app.route("/center/<re('1[2345678]\d{9}'):id>")
def center(id):
return "你的电话号是%s" % id

@app.route("/center1/<re('\d{5}'):id>")
def center1(id):
return "你的id%s" % id

app.config.from_pyfile("config.cfg")

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

运行结果看一下:

flask配置参数、路由、转换器

flask配置参数、路由、转换器


0 1
探讨一下自定转换器的to_python的作用



class MyConverter(BaseConverter):
def __init__(self,map,re):
#map是默认的参数,re就是你传进来的参数,你传进来什么,就是什么
       super().__init__(map)
self.regex = re

def to_python(self, value):
return '微微摘录'

在上面的基础上添加重写to_python的方法

运行结果:

flask配置参数、路由、转换器


0 2
了解一下to_url的作用 (会影响重定向)
from flask import Flask,url_for,redirect
#url_for里面的参数是函数的名字
#rediect是表示重定向
from werkzeug.routing import BaseConverter
app = Flask(__name__)

class MyConverter(BaseConverter):
def __init__(self,map,re):
#map是默认的参数,re就是你传进来的参数,你传进来什么,就是什么
       super().__init__(map)
self.regex = re

def to_python(self, value):
return value
def to_url(self, value):
return value

app.url_map.converters['re'] = MyConverter
@app.route("/center/<re('1[2345678]\d{9}'):id>")
def center(id):
return redirect(url_for('center1',id='13567'))
#重定向到center1,但是center1有参数,所以需要传值

@app.route("/center1/<re('\d{5}'):id>")
def center1(id):
return "你的id%s" % id

app.config.from_pyfile("config.cfg")

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

正常情况下的运行结果:

flask配置参数、路由、转换器

其中的逻辑:

flask配置参数、路由、转换器


如果改了

def to_url(self, value):
return "67890"

再次去访问:


里面的逻辑大概是这个样子的,


这期笔记就到这里了,可以的话可以点点在看~~~

果发现了有什么错误的地方,欢迎你到留言区纠正哦