flask路由机制,flask 动态路由
指尖生活
修改访问地址。默认烧瓶启动是127.0.0.1:5000地址。我想通过本地ip地址:5000端口访问。我该怎么修改?
当程序启动时,只需添加参数。
App.run (host= 192.168.1.103 ,port= 5000 )此时127.0.0.1的地址无法访问。
您可以通过将host修改为0.0.0.0来设置来自该主机ip的所有访问,即可以使用访问127和访问192。
app.run(主机=0.0.0.0 ,端口=5000 )
在启动功能参数中手动设置debug,其他配置文件参数在别处设置。
app.run(主机=0.0.0.0 ,端口=5000 ,调试=真)
设置请求访问路由功能(通过方法限制访问方法)。一般在设置绑定视图函数时,默认是在进入视图函数之前通过GET访问路由路径。
Map ([rule/(GET,head,OPTIONS)-index,这里是一个路由对象,表示路由路径“/”可以用GET,HEAD,OPTIONS访问视图函数。
现在如果想改成岗位准入,可以进入,其他方式不能。
绑定路由时设置方法参数即可。该参数采用列表格式。
@app.route(/post_url ,methods=[POST])
定义post_url():
返回“这是POST输入的视图函数”
此时,前台直接访问路径,即GET模式。
不允许提示,不允许以这种方式访问。
发布模式
如果您想指定允许多种访问方式,只需加入列表即可。
@app.route(/post_url ,methods=[GET , POST])
如果多个路由路径相同,应该访问哪个视图功能?其实很好理解。例如,定义了几个hello路由路径和视图函数。访问时,将从路由列表中选择与出现的第一条路由相对应的查看功能来执行。
@app.route(/hello )
def hello():
回复“你好1”
@app.route(/hello )
def hello2():
return hello 2 print(app . URL _ map)可以在启动时列出路由表,访问时输入第一个,输出hello 1。
即进入hello view方法。
如果要访问hello2视图方法,要区分访问方法和hello,也就是一个get和一个post。
查看功能绑定多个路由路径。布线路径可以共享视图功能,您可以根据需要添加任意数量的路径。
@app.route(/hi1 )
@app.route(/hi2 )
def hi():
返回“你好页面”
反解析路径和302跳转重定向(url)与跳转到的路径相同,需要导入方法。
Url_for(def)解析视图函数对应的路径名,方法需要导入。
示例:
从flask导入Flask,url_for,重定向
@app.route(/login )
def邓璐():
及格
Url=url_for(邓璐)#获取邓璐视图函数绑定的路由路径登录。
Return redirect(url) #表示跳转到/login路径,进入登录路由路径对应的view方法。
您也可以使用路由路径直接重定向,但是不建议使用这种方法,因为如果在项目中更改了路由路径,则重定向所遵循的所有路径都必须更改。
从flask导入Flask,url_for,重定向
app=Flask(__name__)
@app.route(/)
定义索引():
由定义的视图函数
返回“hello flask”
@app.route(/login )
定义登录():
url=url_for(索引)
返回重定向(url)
if __name__==__main__ :
App.run(debug=True) access将跳转到主页。
在提取路由参数以获取产品id时,需要正确地从web页面获取id,并将其传递给视图函数。我们做什么呢
从烧瓶进口烧瓶
app=Flask(__name__)
@ app . route(/goods/int:goods _ id )
定义商品详细信息(商品标识):
Return 商品详情页id:% s% goods_id当用户输入http://127.0.0.1:5000/goods/123时,程序会检测正则格式为int,并匹配是否为int整数。如果为真,则将123赋给goods _ id并带入视图函数。
Int在这里相当于一个整数转换器。
如果没有输入或者输入不是整数,则404
@app.route(/goods/goods_id )
如果没有转换器,默认是字符串类型,所以要严格匹配用户的输入。
有时,定义的转换器需要接受匹配值。如果flask内置的匹配规则无法正确匹配,就需要自己编写一个转换器。
转换器被定义为类。
1.定义您自己的转换器。
导入werkzeug.routing模块的基类方法BaseConverter。
.
从werkzeug.routing导入BaseConverter
.
RegexConverter类(BaseConverter):
定义您自己的转换器
2.pass2,将定义的转换器添加到flask应用程序。
# 2.使用app.url_map.converter将定义的转换器添加到flask应用程序中。
app . URL _ map . converter[ re ]=regexeconverter 3,使用类转换器
@app.route(/goods/re:mobile )
默认情况下,通用转换器self.regex #和flask内置的常规属性将调用该属性规则进行匹配。
超级(子类,自身)。__init__()调用这个子类的父类的初始化方法。
app . URL _ map . converters[ re ]=RegexConverter #在flask应用中添加一个名为Re的转换器,对应的类是regex converter。
代码:
从烧瓶导入烧瓶,重定向,url_for
从werkzeug.routing导入BaseConverter
app=Flask(__name__)
@app.route(/)
定义索引():
返回“hello flask”
# http://127 . 0 . 0 . 1:5000/发送/15020266666
# Integer等类型满足不了这里的需求,写个转换器来匹配。
# 1.定义您自己的转换器
RegexConverter类(BaseConverter):
def __init__(self,url_map,regex):
#调用父类的初始化方法来接收完整的映射路由路径。
超级(RegexConverter,self)。__init__(url_map)
#将正则表达式规则保存到self.regex的内置正则属性中,flask在匹配时会调用这个属性。
self.regex=regex
# 2.将转换器添加到flask应用程序中。此时,转换器的名称为re。
app . URL _ map . converters[ re ]=regex converter
# 3.使用类转换器re来匹配传入的数据,并将成功的结果分配给mobile。
@ app . route(/sends/re(r 1[3458]\ d { 9 } ):mobile )
def send_sms(手机):
return 向%s % mobile发送短信
if __name__==__main__ :
App.run(debug=True)进程:1。当用户访问http://127 . 0 . 0 . 1:5000/Sends/15020263188时,传输的数据将与定义的转换器规则匹配。这时定义的转换器是re,括号里有规则。
2.从flask应用程序中找到re转换器,在RegexConverter类中找到它,创建这个对象并执行代码。
3.在对象中创建初始化方法,以从转换器接收数据,这些方法是
第一个参数,整个路由列表(url_map)和
第二个参数正则表达式(regex)
这是一个固定参数。
(1)然后用基类方法接收整个路由表,这个url_map是父类使用的。
使用当前类self.regex接收正则表达式并保存在属性中。flask将使用这个内置属性进行路由的常规匹配。self.regex是固定成员,从基类继承而来。
正则性可以添加到转换器参数中,也可以直接写入类转换器中。
在大多数情况下,使用参数。
@ app . route(/sends/re(r 1[3589]\ d { 9 } ))
控制方便,多通话。
前面提到的To_python和to_url,在常规匹配时,进入类对象,如果匹配成功,则返回一个变量。
这个句号不是直接返回,而是通过BaseConverter的基类中的to_python内置方法。
MobileConverter类(BaseConverter):
def __init__(self,url_map):
超级(MobileConverter,self)。__init__(url_map)
self.regex=r1[3589]\d{9}
#没有其他操作时,匹配成功后直接通过to_python返回类转换器。
def to_python(self,value):
当返回值没有执行其他操作时,匹配成功后直接通过to_python返回类转换器。
如果想对匹配的数据进行一些其他操作或过滤,可以直接在to_python方法中修改。
RegexConverter类(BaseConverter):
# 3
def __init__(self,url_map):
超级(RegexConverter,self)。__init__(url_map)
self.regex=r1[3589]\d{9}
def to_python(self,value):
Print(“调用了to_python方法”)
返回“abc”
To_url接收url_for传入的第二个参数。注意,这里的移动url_for(xxx,mobile= )应该与上面绑定地址返回的变量名相同。
从flask导入Flask,请求,重定向,url_for
从werkzeug.routing导入BaseConverter
app=Flask(__name__)
#自定义转换器用于匹配手机号码
MobileConverter类(BaseConverter):
def __init__(self,url_map,regex):
超级(MobileConverter,self)。__init__(url_map)
self.regex=regex
def to_python(self,value):
返回值
def to_url(自身,值):
返回值
#将转换器添加到烧瓶应用程序
app . URL _ map . converter[ re ]=mobile converter
@ app . route(/send/re(r 1[3578]\ d { 9 } ):mobile )
def send_sms(手机):
return 向%s % mobile发送短信
@app.route(/send302 )
定义发送302():
url=url_for(send_sms ,mobile=13561223020 )
返回重定向(url)
if __name__==__main__ :
App.run(debug=True)此时访问http://127.0.0.1:5000/send302页面,返回404流程:访问/send302时,url_for解析sends_sms视图函数的路由路径,并将url参数带回re转换器。将转换器输入MobileConverter类,如果成功,则输入to_url。此时to_url返回的值和/send/splice路径,然后重定向跳转到这个路由路径的view函数中。然后输入to_python方法返回最终值。
To_python和to_url是根据传播方式的不同,匹配成功后的进入方式。
如需转载,请联系作者,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。