flask路由机制,flask 动态路由

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: