Flask笔记:URL传参,请求,重定向

URL传参:

  • 良好的URL:视图函数对应的url以/结尾是一种良好url,因为用户在访问的时候无论他有没有加上最后这个斜杠,都是能访问到的,相反,视图函数的url没有以/结尾,用户访问的时候却加上了这个/,那么用户是访问不到这个网页的。
  • 使用path形式传参:使用尖括号,如“<value>”将参数“value”通过URL传入视图函数,在视图函数中也需要有同名的参数。如果URL中有多个参数,则视图函数中也需要按顺序定义相同的参数。这样可以使用相同URL,但是因为参数不同而加载的数据却不同。如图:

  • path传参中指定URL参数类型:在“<>”中使用形如“/args/<int:value>”来指定参数类型(此处指定的是int类型),注意冒号后面不能有空格,必须紧跟参数名。参数的常用数据类型有:
    • string:默认的类型,可以是任何不包含“/”和“\”的文本。
    • int:整型。
    • float:浮点类型。
    • path:和string类似,区别在于path类型可以包含“/”,即path类型为一个路径表示文本。
    • uuid:uuid字符串。
    • any:url的同一个位置可以是多个值。例如下图中“/user/111”和“/author/222”两个不同URL都将使用同一个视图函数:

  • 自定义url参数类型:自定义的类型需要继承类BaseConverter,即from werkzeug.routing import BaseConverter,并且需要把这个类注册到app.url_map.converters中才会生效。有两种方式:
    • 第一种:在子类中重新定义变量regex,根据自身需要写正则表达式,这个正则表达式就是参数需要满足的条件和格式。
    • 第二种:在子类中重写to_pythonto_url方法,这两个方法的参数都只有一个,即value。to_python的value是url中传入的字符串,它的返回值会作为对应视图函数的参数值传入;而to_url是用作函数url_for的返回值的,它的参数value是url_for函数传入的参数值,参数的格式和类型则是to_python方法的返回值,to_url的返回值则会在填充到url字符串中对应参数的位置。
    •  1 from flask import Flask,url_for
       2 from werkzeug.routing  BaseConverter
       3 
       4 app = Flask(__name__)
       5 
       6 
       7 class TelConverter(BaseConverter):
       8     """
       9     第一种方式:只重新定义变量regex的正则表达式
      10     例如:该参数必须为11位的数字
      11     12     regex = r'\d{11}'
      13 
      14 
      15  PlusConverter(BaseConverter):
      16     17     第二种方式:重写方法to_python和to_url,前者用于视图函数的参数获取,后者用于url_for的url字符串获取
      18     例如:参数需要以+号来进行分割进行获取
      19     20 
      21     def to_python(self,value):
      22         """例如传入的value为:python+2723         return value.split(+'24 
      25      to_url(self,1)">26         例如传入的value为:['python','27']27         return .join(value)
      28 
      29 
      30 # 将自定义的参数类型进行注册,注册后才能生效
      31 app.url_map.converters[tel'] = TelConverter
      32 app.url_map.converters[plus PlusConverter
      33 
      34 
      35 @app.route(/36  hello_world():
      37     38     这里的url_for函数返回的则是:/python+27/
      39     就是说返回的url字符串中的参数值是经过to_url方法处理后返回的
      40     41     return url_for(get_plus',plus_args=[python27])
      42 
      43 
      44 @app.route(/<tel:telephone>/45  get_telephone(telephone):
      46     此处的参数则被要求必须是11位的数字47     你的手机号是:{}.format(telephone)
      48 
      49 
      50 @app.route(/<plus:plus_args>/51  get_plus(plus_args):
      52     53     如果访问:http://127.0.0.1:5000/python+27/
      54     则plus_args的值为['python','27']
      55     也就是说传入的参数值是经过了to_python方法的处理返回的
      56     57     return str(plus_args)
      58 
      59 
      60 if __name__ == __main__:
      61     app.run(debug=True)

       

  • 使用查询字符串的方式传参:即在浏览器的URL中使用“?key=value”的形式传递参数(多个参数之间使用“&”连接即可),在后台则使用“from flask import request”,然后使用“request.args.get(key)”来获取参数key的值value。

 

URL请求:需要导入request对象“from flask import request”,提交的请求的相关信息都在这个对象中了。

  • 在route中指定视图函数的请求接收方式:指定参数如“methods=['GET','POST']”,methods参数的值是一个列表,在其中指定需要的请求方式即可,若没有指定则默认是GET,如果接收到的是POST请求,但却没有指定,则会报错。
  • get请求获取参数值:使用查询字符串的方式传递参数时,使用“request.args.get('param_name)')”即可。
  • post请求获取参数值:使用form表单传递参数时,使用“request.form.get('param_name')”即可,这个“param_name”是HTML中form表单元素的name属性的值,当然也需要在form中指定提交请求的方式为post“method="POST"”(特别注意在视图函数的route中也要指明post请求方式)。
  • 获取request请求方式:使用“request.method”即可,它的值为请求方式的全大写,比如“POST”。

 

URL重定向:需要“from flask import redirect”,它的第一个参数是一个URL字符串,这个URL字符串推荐使用“url_for”来获取,第二个参数可以指定HTTP状态码,默认是302(302表示暂时性重定向,301表示永久性重定向)。如图:

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Jinja2:是Python的Web项目中被广泛应用的模板引擎,是由Python实现的模板语言,Jinja2 的作者也是 Flask 的作者。他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
Fullcalendar日历使用,包括视图选择、事件插入、编辑事件、事件状态更改、事件添加和删除、事件拖动调整,自定义头部,加入el-popover显示图片、图片预览、添加附件链接等,支持手机显示。
监听QQ消息并不需要我们写代码,因为市面上已经有很多开源QQ机器人框架,在这里我们使用go-cqhttp官方文档:go-cqhttp如果您感兴趣的话,可以阅读一下官方文档,如果不想看,直接看我的文章即可。
【Flask框架】—— 视图和URL总结
python+web+flask轻量级框架的实战小项目。登录功能,后续功能可自行丰富。
有了这个就可以配置可信IP,关键是不需要企业认证,个人信息就可以做。
本专栏是对Flask官方文档中个人博客搭建进行的归纳总结,与官方文档结合事半功倍。 本人经验,学习一门语言或框架时,请首先阅读官方文档。学习完毕后,再看其他相关文章(如本系列文章),才是正确的学习道路。
本专栏是对Flask官方文档中个人博客搭建进行的归纳总结,与官方文档结合事半功倍。基础薄弱的同学请戳Flask官方文档教程 本人经验,学习一门语言或框架时,请首先阅读官方文档。学习完毕后,再看其他相关文章(如本系列文章),才是正确的学习道路。 如果python都完全不熟悉,一定不要着急学习框架,请首先学习python官方文档,一步一个脚印。要不然从入门到放弃是大概率事件。 Python 官方文档教程
快到年末了 相信大家都在忙着处理年末数据 刚好有一个是对超市的商品库存进行分析的学员案例 真的非常简单~
一个简易的问答系统就这样完成了,当然,这个项目还可以进一步完善,比如 将数据存入Elasticsearch,通过它先进行初步的检索,然后再通过这个系统,当然我们也可以用其他的架构实现。如果你对这系统还有其他的疑问,也可以再下面进行留言!!!
#模版继承和页面之间的调用@app.route(&quot;/bl&quot;)def bl(): return render_template(&quot;file_2.html&quot;)主ht
#form表达提交@app.route(&quot;/data&quot;,methods=[&#39;GET&#39;,&#39;POST&#39;]) #methods 让当前路由支持GET 和
#form表达提交@app.route(&quot;/data&quot;,methods=[&#39;GET&#39;,&#39;POST&#39;]) #methods 让当前路由支持GET 和
#session 使用app.secret_key = &quot;dsada12212132dsad1232113&quot;app.config[&#39;PERMANENT_SESSION_LI
#文件上传@app.route(&quot;/file&quot;,methods=[&#39;GET&#39;,&#39;POST&#39;])def file(): if request.meth
#跳转操作:redirect@app.route(&quot;/red&quot;)def red(): return redirect(&quot;/login&quot;)
#session 使用app.secret_key = &quot;dsada12212132dsad1232113&quot;app.config[&#39;PERMANENT_SESSION_LI
@app.route(&quot;/req&quot;,methods=[&#39;GET&#39;,&#39;POST&#39;])def req(): print(request.headers)
#模版继承和页面之间的调用@app.route(&quot;/bl&quot;)def bl(): return render_template(&quot;file_2.html&quot;)主ht
#文件操作:send_file,支持图片 视频 mp3 文本等@app.route(&quot;/img&quot;)def img(): return send_file(&quot;1.jpg&q