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字符串中对应参数的位置。
    •  from flask import Flask, url_for
      from werkzeug.routing import BaseConverter app = Flask(__name__) class TelConverter(BaseConverter):
      """
      第一种方式:只重新定义变量regex的正则表达式
      例如:该参数必须为11位的数字
      """
      regex = r'\d{11}' class PlusConverter(BaseConverter):
      """
      第二种方式:重写方法to_python和to_url,前者用于视图函数的参数获取,后者用于url_for的url字符串获取
      例如:参数需要以+号来进行分割进行获取
      """ def to_python(self, value):
      """例如传入的value为:python+27"""
      return value.split('+') def to_url(self, value):
      """例如传入的value为:['python', '27']"""
      return '+'.join(value) # 将自定义的参数类型进行注册,注册后才能生效
      app.url_map.converters['tel'] = TelConverter
      app.url_map.converters['plus'] = PlusConverter @app.route('/')
      def hello_world():
      """
      这里的url_for函数返回的则是:/python+27/
      就是说返回的url字符串中的参数值是经过to_url方法处理后返回的
      """
      return url_for('get_plus', plus_args=['python', '']) @app.route('/<tel:telephone>/')
      def get_telephone(telephone):
      """此处的参数则被要求必须是11位的数字"""
      return '你的手机号是:{}'.format(telephone) @app.route('/<plus:plus_args>/')
      def get_plus(plus_args):
      """
      如果访问:http://127.0.0.1:5000/python+27/
      则plus_args的值为['python', '27']
      也就是说传入的参数值是经过了to_python方法的处理返回的
      """
      return str(plus_args) if __name__ == '__main__':
      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表示永久性重定向)。如图:

Flask初学者:URL(传参,请求,重定向)的更多相关文章

  1. url传参及重定向

    成功跳转$this -> success('提示语',跳转路径,返回的数据,时间,发送的 Header 信息)跳转失败$this -> error('提示语',跳转路径,返回的数据,时间, ...

  2. 2、Flask实战第2天:URL传参

    当我们访问网站/的时候,会执行hell_world函数,并把这个函数的返回值返回给浏览器,这样浏览器就显示hello world了 @app.route('/') def hello_world(): ...

  3. tornado 02 输出、输入和URL传参

    tornado 02 输出.输入和URL传参 一.输出 write输出到页面 #write可以接受的对象 #write() 可以接受3种对象:bytes Unicode字符(二进制字符) 字典 #如果 ...

  4. 点击div 跳转并通过URL传参

    点击div前要先给div绑定要传的参数: //给panel绑定自定义属性,方便在跳转时传带参数,键/值对排列 panel.attr("user_age",user_age); pa ...

  5. 关于url传参中文乱码问题

    之前都一直很不了解中文编码得问题,之前在做项目中没碰到那么头痛的问题.所以一直没有了解中文乱码的问题. 问题描述: 地址: http://localhost:8080/sun-government/c ...

  6. Silverlight项目笔记8:层次布局、客户端读取shp、ExecuteCountAsync、柱状图、url传参

    1.层次布局 由于地图窗口和菜单栏都在一个父容器内,在浏览器缩小到一定程度点击地图弹出infoWindow时,会出现菜单栏遮挡infoWindow中间部分的现象,于是通过设置Canvas.ZIndex ...

  7. 浏览器URL传参最大长度问题

    这几天为解决一个BUG头疼了一段时间,BUG现象如下: 一个选择人员的选择控件,当选择多个人时(50多个的时候),返回没有错误现象,而再一次打开的时候就报404错误.看到这个错误非常纳闷,无法下手,只 ...

  8. 关于微信浏览不能URL传参,URL中的问号被删除

    关于微信浏览不能URL传参,URL中的问号被删除. 尼玛难道没有人遇到过这个问题?看了微信支付SDK3.0的代码,看到urlencode 看到了几次.实际上 在微信浏览器下 header('locat ...

  9. url传参后获取参数

    当我们通过url传参跳转到其他页面,如: http://www.xxx.com/content.html?id=217&name=txf&phone=15829087165 在跳转后的 ...

  10. url传参中文乱码解决

    url传参request.setCharacterEncoding("utf-8");无法解决中文乱码问题 解决方法: 修改tomcat---conf----server.xml文 ...

随机推荐

  1. 《从0到1学习Flink》—— Apache Flink 介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  2. nginx图片缓存服务器配置实战

     1.图片目录设置: 假定服务器主目录为nginx的默认目录:/usr/local/nginx-0.8.32/html/ 图片存放目录为:/usr/local/nginx-0.8.32/html/SD ...

  3. $.ajax和$.load的区别

    http://lib.csdn.net/article/jquery/35614?knId=646

  4. JavaScript常用数组操作方法

    数组是用于储存多个相同类型数据的集合,平时在数据的处理中用到最多,JavaScript 中常用的操作方法 1.concat()concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅 ...

  5. js数字滑动时钟

    js数字滑动时钟: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  6. Android 环信 调用相机崩掉 mikdir()

    protected void selectPicFromCamera() { if (!EaseCommonUtils.isSdcardExist()) { Toast.makeText(getAct ...

  7. 上传高德地图-express框架

    1.首先要注册高德地图,完后成为开发者 2.控制台里获取自己的key值 3.在要显示地图的页面添加如下的代码 <script type="text/javascript" s ...

  8. 更新KB915597补丁后导致“您的windows副本不是正版”的解决方案

    更新KB915597补丁后导致“您的windows副本不是正版”的解决方案 解决方法: 运行cw.exe(https://pan.lanzou.com/i05ya8h),直至提示成功: 重新启动操作系 ...

  9. 使用Intellij IDEA 14.0.2 编译项目耗时特别长的问题

    前段时间在使用IDEA编译项目时后台编译会一直Hang在那.如图: 刚开始以为是升级将IDEA从13升级至14的问题,退回到13 问题依就.Google了下,按照相应方法还是无果,没办法 还重装了下系 ...

  10. Android(java)学习笔记89:Bundle和Intent类使用和交互

    1. Bundle 和 Intent:    Bundle只是一个信息的载体 将内部的内容以键值对组织 ,Intent负责Activity之间的交互自己是带有一个Bundle的.Intent.putE ...