• Flask 路由相关操作


    URL Route

    • URL 后接 / 作为目录级访问
    • URL 后不接 / 作为文件级访问
    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return 'Index Page'
    
    @app.route('/about')
    def about():
        return 'The about page'
    
    
    type:XXX 说明
    string (default) accepts any text without a slash
    int accepts positive integers
    float accepts positive floating point values
    path like string but also accepts slashes
    uuid accepts UUID strings
    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/user/<username>')
    def show_user_profile(username):
        # show the user profile for that user
        return 'User %s' % username
        
    @app.route('/post/<int:post_id>')
    def show_post(post_id):
        # show the post with the given id, the id is an integer
        return 'Post %d' % post_id
        
    @app.route('/path/<path:subpath>')
    def show_subpath(subpath):
        # show the subpath after /path/
        return 'Subpath %s' % subpath
    
    • 可以使用methods来指定该路由使用的HTTP方法。
    from flask import request
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            return do_the_login()
        else:
            return show_the_login_form()
    

    参考

    URL Binding

    使用url_for()方法可以调用参数中的route方法,以便满足某种调用目的,如单元测试。

    from flask import Flask
    from flask import Flask, url_for
    app = Flask(__name__)
    
    with app.test_request_context():
        print(url_for('index'))
        print(url_for('login'))
        print(url_for('login', next='/'))
        print(url_for('profile', username='John Doe'))
    

    静态文件伺候

    静态文件指应用使用的JavascriptCSS代码及图片资源文件。

    • 在项目根目录下创建static目录
    url_for('static', filename='style.css')
    

    模板文件伺候

    Flask会自动寻找templates目录,所以原则上请不要自定义这个目录的名字,且应该将其放在项目(或模块)的根路径下。

    from flask import Flask
    from flask import render_template
    app = Flask(__name__)
    
    @app.route('/hello/')
    @app.route('/hello/<name>')
    def hello(name=None):
        return render_template('hello.html', name=name)
    
    <body>
        Hello, World!
    
        from templates
    </body>
    

    参考

    请求处理

    Request

    @app.route('/test', methods=['POST', 'GET'])
    def test():
        error = None
        
        if request.method == 'POST':
            t1 = request.form['1']
            t2 = request.form['2']
        elif request.method == 'GET':
            # for URL `?key=value`
            t3 = request.args.get('key', '')
        else:
            error = 'Method is not POST or GET!'
    
        return render_template('test.html', error=error)
    

    参考

    文件上传

    • 保存时重新指定文件名
    from flask import request
    
    @app.route('/upload', methods=['GET', 'POST'])
    def upload_file():
        if request.method == 'POST':
            f = request.files['the_file']
            f.save('/var/www/uploads/uploaded_file.txt')
        ...
    
    • 保存时,使用上传的文件名
    from flask import request
    from werkzeug.utils import secure_filename
    
    @app.route('/upload', methods=['GET', 'POST'])
    def upload_file():
        if request.method == 'POST':
            f = request.files['the_file']
            f.save('/var/www/uploads/' + secure_filename(f.filename))
        ...
    

    参考

    Cookies

    • 读取cookie
    from flask import request
    
    @app.route('/')
    def index():
        username = request.cookies.get('username')
        # use cookies.get(key) instead of cookies[key] to not get a
        # KeyError if the cookie is missing.
    
    • 写入cookie
    from flask import make_response
    
    @app.route('/')
    def index():
        resp = make_response(render_template(...))
        resp.set_cookie('username', 'the username')
        return resp
    

    重定向

    • 使用url_for来找到URL地址
    • 使用redirect来重定向
    from flask import abort, redirect, url_for
    
    @app.route('/')
    def index():
        return redirect(url_for('login'))
    
    • 使用abort来返回错误码
    @app.route('/login')
    def login():
        abort(401)
        this_is_never_executed()
    
    • 使用@app.errorhandler()来处理错误码对应的请求
    from flask import render_template
    
    @app.errorhandler(404)
    def page_not_found(error):
        return render_template('page_not_found.html'), 404
    

    参考

  • 相关阅读:
    zookeeper简介(二)
    zookeeper简介(一)
    消息队列及常见消息队列介绍
    使用IntelliJ IDEA 和 Maven创建Java Web项目
    Java NIO 缓冲区Buffer(二)缓冲区的创建
    Java NIO 缓冲区Buffer(一)基础学习
    Java NIO使用及原理之--选择器Seclector
    JAVA集合类汇总
    谈谈final、finally、 finalize有什么不同?
    查看SELinux状态:
  • 原文地址:https://www.cnblogs.com/sitemanager/p/9121926.html
Copyright © 2020-2023  润新知