Flask學習筆記(3)--路由

 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
相關文章
相關標籤/搜索