• 二 Flask快速入门


    1: 外部可访问的服务器:

    如果你运行了这个服务器,你会发现它只能从你自己的计算机上访问,网络中其它任何的地方都不能访问。在调试模式下,用户可以在你的计算机上执行任意 Python 代码。因此,这个行为是默认的。如果你禁用了 debug 或信任你所在网络的用户,你可以简单修改调用 run() 的方法使你的服务器公开可用,如下:

    app.run(host='0.0.0.0'),这会让操作系统监听所有公网 IP。

    2: 调试模式

    虽然 run() 方法适用于启动本地的开发服务器,但是你每次修改代码后都要手动重启它。这样并不够优雅,而且 Flask 可以做到更好。如果你启用了调试支持,服务器会在代码修改后自动重新载入,并在发生错误时提供一个相当有用的调试器。有两种途径来启用调试模式。一种是直接在应用对象上设置:

    app.debug = True
    app.run()
    

    另一种是作为 run 方法的一个参数传入:

    app.run(debug=True)
    

    两种方法的效果完全相同。

    注意: 遇到一个问题,程序报错:ModuleNotFoundError: No module named 'markupsafe._compat'。 解决方案:把下面代码拷贝到

    # -*- coding: utf-8 -*-
    """
        markupsafe._compat
        ~~~~~~~~~~~~~~~~~~
        Compatibility module for different Python versions.
        :copyright: (c) 2013 by Armin Ronacher.
        :license: BSD, see LICENSE for more details.
    """
    import sys
    PY2 = sys.version_info[0] == 2
    if not PY2:
        text_type = str
        string_types = (str,)
        unichr = chr
        int_types = (int,)
        iteritems = lambda x: iter(x.items())
    else:
        text_type = unicode
        string_types = (str, unicode)
        unichr = unichr
        int_types = (int, long)
        iteritems = lambda x: x.iteritems()
    View Code

    3: 路由

      (1) 基本路由

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

    (2) 代参数路由
    @app.route('/user/<username>')
    def show_user_profile(username):
        # show the user profile for that user
        return 'User %s' % username
    (3)转换器
    @app.route('/post/<int:post_id>')
    def show_post(post_id):
    return 'post %d' % post_id

    换器有下面几种:

    int 接受整数
    float 同 int ,但是接受浮点数
    path 和默认的相似,但也接受斜线

    (4) URL_for可以生成URL
    @app.route('/user/<username>')
    def show_user_profile(username):
    return ' %s ' % username

    @app.route('/post/<int:post_id>')
    def show_post(post_id):
    return url_for('show_user_profile', username = "jack") # 构造URL
    4: HTTP请求
    一个可以处理GET、POST的函数
    app.route('/login', methods=['GET', 'POST'])
    def login():
    if request.method == 'POST':
    return "POST"
    else:
    return "GET"
    5:静态文件
    动态 web 应用也会需要静态文件,通常是 CSS 和 JavaScript 文件。理想状况下, 你已经配置好 Web 服务器来提供静态文件,但是在开发中,Flask 也可以做到。
    只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。给静态文件生成 URL ,使用特殊的 'static' 端点名:
    url_for('static', filename='style.css'),这个文件应该存储在文件系统上的 static/style.css

    6:模板渲染
    Flask 配备了 Jinja2 模板引擎,用来渲染HTML文件。可以使用 render_template() 方法来渲染模板。你需要做的一切就是将模板名和你想作为关键字的参数传入模板的变量。
    @app.route('/hello/')
    @app.route('/hello/<name>')
    def hello(name=None):
        return render_template('hello.html', name=name)

    Flask 会在 templates 文件夹里寻找模板hello.html:
    templates下创建hello.html:
    <!doctype html>
    <title>Hello from Flask</title>
    {% if name %}
      <h1>Hello {{ name }}!</h1>
    {% else %}
      <h1>Hello World!</h1>
    {% endif %}

    7:  取得请求的参数

    当前请求的 HTTP 方法可通过 request.method 属性来访问

    request.form 属性来访问表单数据( POST 或 PUT 请求提交的数据)。'

    request.args.get('key')  可以取得 /login?key="parameter"的key的值 “parameter”

    8: 上传文件

    获取POST请求的文件,并保存。

    f = request.files['the_file']
    f.save('/var/www/uploads/uploaded_file.txt')

    9: cookie
    request.cookies.get('username')
    resp = make_response(render_template(...))
        resp.set_cookie('username', 'the username')

    10:重定向和错误
    @app.route('/')      
    def hello_world():
    return redirect(url_for('login')) #重定向

    @app.errorhandler(404)                       #错误处理
    def page_not_found(error):
    return "error hhahh"


     



  • 相关阅读:
    redis中save和bgsave区别
    scrapy生成json中文为ASCII码解决
    mysql数据库,创建只读用户
    memcached命令行、Memcached数据导出和导入
    Memcache 查看列出所有key方法
    Elasticsearch5.x 引擎健康情况
    docker容器创建MariaDB镜像
    大文本数据排序
    换行符 和回车符
    索引与文本文件
  • 原文地址:https://www.cnblogs.com/liufei1983/p/8408984.html
Copyright © 2020-2023  润新知