• Flask 快速入门


    最简单的flask程序

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run()

    外部服务器可访问

    app.run(host='0.0.0.0')

    打开调试模式

    app.debug = True
    app.run()
    
    或
    
    app.run(debug=True)

    路由

    @app.route('/hello')
    def hello():
        return 'Hello World'

    可以为函数指定多个路由

    url中添加变量

    @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
    int 接受整数
    float 接受浮点数
    path 和缺省情况相同,但也接受斜杠

    添加对post的支持

    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            do_the_login()
        else:
            show_the_login_form()

    使用模板文件输出

    from flask import render_template
    
    @app.route('/hello/')
    @app.route('/hello/<name>')
    def hello(name=None):
        return render_template('hello.html', name=name)

     默认使用 Jinja2 模板引擎

    模板文件示例

    <!doctype html>
    <title>Hello from Flask</title>
    {% if name %}
      <h1>Hello {{ name }}!</h1>
    {% else %}
      <h1>Hello World!</h1>
    {% endif %}

    request对象

    from flask import request
    @app.route('/login', methods=['POST', 'GET'])
    def login():
        error = None
        if request.method == 'POST':
            if valid_login(request.form['username'],
                           request.form['password']):
                return log_the_user_in(request.form['username'])
            else:
                error = 'Invalid username/password'
        # 如果请求访求是 GET 或验证未通过就会执行下面的代码
        return render_template('login.html', error=error)

    获取url中的参数

    searchword = request.args.get('key', '')

    文件上传

    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')
        ...

    需要客户端设置enctype="multipart/form-data" 

    使用客户端的文件名保存。

    from flask import request
    from werkzeug 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))

    使用cookie

    from flask import request
    
    @app.route('/')
    def index():
        username = request.cookies.get('username')
        # 使用 cookies.get(key) 来代替 cookies[key] ,
        # 以避免当 cookie 不存在时引发 KeyError 。

    存储cookie

    from flask import make_response
    
    @app.route('/')
    def index():
        resp = make_response(render_template(...))
        resp.set_cookie('username', 'the username')
        return resp

    使用 redirect() 函数可以重定向。使用 abort() 可以更早 退出请求,并返回错误代码:

    from flask import abort, redirect, url_for
    
    @app.route('/')
    def index():
        return redirect(url_for('login'))
    
    @app.route('/login')
    def login():
        abort(401)
        this_is_never_executed()

    定制404页面

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

    make_response() 包裹返回表达式,获得响应对象,并对该对象 进行修改,然后再返回:

    @app.errorhandler(404)
    def not_found(error):
        resp = make_response(render_template('error.html'), 404)
        resp.headers['X-Something'] = 'A value'
        return resp

    使用会话

    from flask import Flask, session, redirect, url_for, escape, request
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        if 'username' in session:
            return 'Logged in as %s' % escape(session['username'])
        return 'You are not logged in'
    
    @app.route('/login', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            session['username'] = request.form['username']
            return redirect(url_for('index'))
        return '''
            <form action="" method="post">
                <p><input type=text name=username>
                <p><input type=submit value=Login>
            </form>
        '''
    
    @app.route('/logout')
    def logout():
        # 如果会话中有用户名就删除它。
        session.pop('username', None)
        return redirect(url_for('index'))
    
    # 设置密钥,复杂一点:
    app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

    随机生成一个秘钥

    import os
     os.urandom(24)

    记录日志

    app.logger.debug('A value for debugging')
    app.logger.warning('A warning occurred (%d apples)', 42)
    app.logger.error('An error occurred')

    flash() 用于闪现一个消息。在模板中,使用 get_flashed_messages() 来操作消息。

  • 相关阅读:
    北京Uber优步司机奖励政策(4月1日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月1日)
    成都Uber优步司机奖励政策(3月31日)
    北京Uber优步司机奖励政策(3月31日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(3月31日)
    uber司机已经激活了,就是还没有上传头
    优步深圳车辆准入标准降啦!6万8年粤车牌!
    开优步认识各色各样的人,人生需要这样的新鲜体验!
    Uber:中国市场两年内不考虑盈利,每年补贴10亿美金
    设置Windows开机自动启动VirtualBox虚拟机系统
  • 原文地址:https://www.cnblogs.com/wuyong09/p/5688797.html
Copyright © 2020-2023  润新知