zoukankan      html  css  js  c++  java
  • flask参数传递

    一. 参数传递两种方式:

    1.get请求
    request.args.get("key") 获取get请求参数

    2.post请求
    request.form.get("key", type=str, default=None) 获取表单数据

    request.values.get("key") 获取所有参数

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

    args = parser.parse_args()

    from flask import Flask, redirect, url_for ,request
    app = Flask(__name__)
    @app.route('/login',methods=["GET","POST"])
    def login():
        if request.method == "POST":
            # 以POST方式传参数,通过form取值
            # 如果Key之不存在,报错KeyError,返回400的页面
            username = request.form['username']
            password = request.form['password']
            print username,password
        else:
            # 以GET方式传参数,通过args取值,如果不用args取值,若输入类似地址的值会报错
            username = request.args['username']
            print username
        return render_template('login.html', req_method=request.method)
    
    if __name__ == '__main__':
       app.run(debug = True)

    在网页输入http://127.0.0.1:5000/login/

     

    传递参数:

    • 传递参数的语法是:`/<参数名>/`。然后在视图函数中,也要定义同名的参数。例如:
    1 @app.route('/article/<string:test>/')
    2 
    3 # 传递的参数名是test,因此就需要在函数的形参中定义同名的参数test
    4 
    5 def test_article(test):
    6 
    7     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数据类型,在主文件中定义如下的代码:

    @app.route('/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
    @app.route('/d/')
    
    def d():
    
        wd = request.args.get("wd")
    
        page_number = request.args.get("pn")
    
        return "通过字符串查询的关键字为:{}, 页码为:{}".format(wd, page_number)


    接收用户传递的参数:

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

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

    @app.route('/d/')

    def d():

         wd = request.args.get('wd')

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

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

    文件上传

    from werkzeug.utils import secure_filename
    @app.route('/uploads', methods=['GET', 'POST'])
    def uploads():
        if request.method == "POST":
            fe = request.files['files']
            # basepath = os.path.dirname(os.path.abspath(__file__))
            basepath = os.path.abspath(os.path.dirname(__file__))
            upload_path = os.path.join(basepath, 'static', 'upload')
            # f.filename可以拿到文件名,但是是客户端定义的名,不要相信这个名称,用secure_filename包装一下
            fe.save(upload_path+'/'+secure_filename(fe.filename))
            # 这里的url_for 和jinja的前端用法不一样,可以忽略.的引用
            # url_for重定向
            return redirect(url_for('uploads'))
        return render_template('upload.html')

    cookie设置

    @app.route('/index')
    def index():
        response = make_response(render_template('index.html',title='Index'))
        reqparse.set_cookie('username', '')
        return response

    自定义错误页面

    from flask import abort
    @app.errorhandler(404)
    def page_not_not_found(error):
        return render_template('404.html'), 404


    版权声明:本文为CSDN博主「xiaoming0018」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/xiaoming0018/article/details/83024383

     

  • 相关阅读:
    多线程(一)高并发和多线程的关系
    spring源码浅析——IOC
    网络爬虫(java)
    数据结构—平衡二叉树
    设计模式—抽象工厂模式
    设计模式—工厂方法模式
    scala(二) Future执行逻辑解读
    java异常处理机制
    为什么覆写equals必须要覆写hashCode?
    Scala对MongoDB的增删改查操作
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/11344576.html
Copyright © 2011-2022 走看看