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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM