Flask中传递参数详解

时间:2025-03-28 10:32:22

请求 
("key") 获取get请求参数

请求

("key", type=str, default=None) 获取表单数据

("key") 获取所有参数

# 参数解析对象生成
parser = ()

args = parser.parse_args()

 
  1. @('/login',methods=["GET","POST"])

  2. def login():

  3. if == "POST":

  4. # 以POST方式传参数,通过form取值

  5. # 如果Key之不存在,报错KeyError,返回400的页面

  6. username = ['username']

  7. password = ['password']

  8. print username,password

  9. else:

  10. # 以GET方式传参数,通过args取值

  11. username = ['username']

  12. print username

  13. return render_template('', req_method=)

传递参数:

传递参数的语法是:`/<参数名>/`。然后在视图函数中,也要定义同名的参数。例如:

@('/article/<string:test>/')

# 传递的参数名是test,因此就需要在函数的形参中定义同名的参数test

def test_article(test):

    return 'test_article:{}'.format(test)

参数的数据类型:

1. 如果没有指定具体的数据类型,那么默认就是使用`string`数据类型。

2. `int`数据类型只能传递`int`类型。 限制参数:<int:article_id>,如果在浏览器中访问:http://127.0.0.1:5000/p/11111.0/ 那就找不到报not found错误,因为我限制了是整形,你现在是浮点型,同理,如果你是浮点型,我使用 整形访问,那就又访问不到了

3. `float`数据类型只能传递`float`类型。

4. `path`数据类型和`string`有点类似,都是可以接收任意的字符串, 但是`path`可以接收路径,也就是说可以包含斜杠。

5. `uuid`数据类型只能接收符合`uuid`的字符串。`uuid`是一个全宇宙都唯一的字符串, 一般可以用来作为表的主键。

关于path数据类型,在主文件中定义如下的代码:

@('/article/<path:test>/') path数据类型

def test_article(test):

     return 'test_article:{}'.format(test)

 

# 通过问号的形式传递参数,例如百度:http://127.0.0.1:5000/d/?wd=%E7%AE%80%E4%B9%A6&pn=20

@('/d/')

def d():

    wd = ("wd")

    page_number = ("pn")

    return "通过字符串查询的关键字为:{}, 页码为:{}".format(wd, page_number)

接收用户传递的参数:

1. 第一种:使用path的形式(将参数嵌入到路径中),就是上面讲的。

2. 第二种:使用查询字符串的方式,就是通过`?key=value`的形式传递的。

@('/d/')

def d():

     wd = ('wd')

     return '您通过查询字符串的方式传递的参数是:%s' % wd ```

3. 如果你的这个页面的想要做`SEO`优化,就是被搜索引擎搜索到,那么推荐使用第一种形式(path的形式)。 如果不在乎搜索引擎优化,那么就可以使用第二种(查询字符串的形式)。

 文件上传

 
  1. from import secure_filename

  2. @('/uploads', methods=['GET', 'POST'])

  3. def uploads():

  4. if == "POST":

  5. fe = ['files']

  6. # basepath = ((__file__))

  7. basepath = ((__file__))

  8. upload_path = (basepath, 'static', 'upload')

  9. # 可以拿到文件名,但是是客户端定义的名,不要相信这个名称,用secure_filename包装一下

  10. (upload_path+'/'+secure_filename())

  11. # 这里的url_for 和jinja的前端用法不一样,可以忽略.的引用

  12. # url_for重定向

  13. return redirect(url_for('uploads'))

  14. return render_template('')

 cookie设置

 
  1. @('/index')

  2. def index():

  3. response = make_response(render_template('',title='Index'))

  4. reqparse.set_cookie('username', '')

  5. return response

自定义错误页面

 
  1. from flask import abort

  2. @(404)

  3. def page_not_not_found(error):

  4. return render_template(''), 404