0x01 參數傳遞html
傳遞參數的語法是: /<參數名>/,而後在視圖函數中,也要定義同名的參數。python
參數的數據類型:flask
一、若是沒有指定具體的數據類型,那麼默認就是使用string 數據類型。windows
二、int 數據類型只能傳遞int類型。app
三、float 數據類型只能傳遞float類型。函數
四、path 數據類型和string 有點類型,均可以接收任意的字符串,可是path能夠接收路徑,也就是說能夠包含斜槓。優化
五、uuid 數據類型只能接收符合uuid的字符串。uuid是一個全宇宙都惟一的字符串,通常能夠用來做爲表的主鍵。ui
六、any 數據類型能夠在一個url中指定多個路徑。url
接收用戶傳遞的參數:spa
一、第一種:使用path的形式(將參數嵌入到路徑中)
二、第二種:使用查詢字符串的方式,就是經過 ?key=value的形式傳遞的。
三、若是出於SEO優化的考慮,推薦第一種。
# _*_ coding:utf-8 _*_ from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/list/') def article_list(): return 'article list' @app.route('/p/<id>/') def article_detail1(id): return u'您請求的文章是:%s' % id @app.route('/page/<int:article_id>/') def article_detail2(article_id): return u'您請求的文章是:%s' % article_id @app.route('/article/<path:test>/') def test_article(test): return 'test article: %s' % test @app.route('/u/<uuid:user_id>') def user_detail(user_id): return u'我的用戶信息: %s' % user_id import uuid print uuid.uuid4() #/blog/<id>/ #/user/<id>/ @app.route('/<any(blog,user):url_path>/<id>/') def detail(url_path,id): if url_path == 'blog': return u'博客詳情:%s' % id else: return u'用戶信息:%s ' %id from flask import request @app.route('/d/') def d(): wd = request.args.get('wd') ie = request.args.get('ie') return ie #經過字符串的方式傳遞參數 #/d/?wd=python if __name__ == '__main__': app.run()
正則路由轉換器
from flask import Flask,render_template from werkzeug.routing import BaseConverter class RegexConverter(BaseConverter): def __init__(self,url_map,*items): super(RegexConverter,self).__init__(url_map) self.regex=items[0] app = Flask(__name__) app.url_map.converters['regex']=RegexConverter @app.route('/user/<regex("[a-z]{3}"):user_id>') def user(user_id): return 'User %s' % user_id if __name__ == '__main__': app.run(debug=True)
登陸模塊:
from flask import Flask,render_template,request app = Flask(__name__) @app.route('/login',methods=['GET','POST']) def login(): return render_template('login.html',method=request.method) if __name__ == '__main__': app.run(debug=True)
上傳
@app.route('/upload',methods=['GET','POST']) def upload(): if request.method=='POST': f=request.files['file'] basepath = path.abspath(path.dirname(__file__)) upload_path=path.join(basepath,'static\\uploads') f.save(upload_path,secure_filename(f.filename)) return redirect(url_for('upload')) return render_template('upload.html')
windows平臺上,flask上傳文件出現IOError: [Errno 13] Permission denied: 'D:\\test\\myproject\\static\\uploads'
解決方法:
第一種:
@app.route('/upload',methods=['GET','POST']) def upload(): if request.method=='POST': f = request.files['file'] basepath = path.abspath(path.dirname(__file__)) filename = secure_filename(f.filename) upload_path=path.join(basepath,'static','uploads',filename) f.save(upload_path) return redirect(url_for('upload')) return render_template('upload.html')
第二種
@app.route('/upload',methods=['GET','POST']) def upload(): if request.method=='POST': f = request.files['file'] filename = secure_filename(f.filename) f.save(path.join('static/uploads',filename)) return redirect(url_for('upload')) return render_template('upload.html')
404 狀態
@app.errorhandler(404) def page_not_found(error): return render_template('404.html'),404