zoukankan      html  css  js  c++  java
  • Flask快速入门(2) — Flask四剑客与配置文件

    Flask四剑客

    在Django中后端返回响应有几种形式:render(前端渲染页面)、redirect(重定向跳转)、HttpResponse(直接返回)、JsonResponse(实际内部继承了HttpResponse,返回json字符串)。

    在Flask中也有相对的返回机制:

    • render:前端渲染页面
    • redirect_:重定向跳转
    • jsonify:返回json字符串
    • return 'xx':相当于HttpResponse
    from flask import Flask, render_template, redirect, jsonify
    app = Flask(__name__)
    
    @app.route('/login')
    def login():
        return render_template('login.html')  # 渲染login.html页面
    
    @app.route('/index')
    def index():
        return redirect('/login')  # 重定向跳转至'/login',显示login.html页面
    
    @app.route('/test')
    def test():
        data = {'name': 'Bob', 'age': 18}
        return jsonify(data)  # 页面响应结果:{"age":18,"name":"Bob"}
    
    @app.route('/test1')
    def test1():
        return 'ok'  # 页面响应结果:ok。需要注意的是:return返回时不能返回数字类型,The return type must be a string, dict, tuple, Response instance, or WSGI callable
    
    if __name__ == '__main__':
        app.run()
    

    login.html 页面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>用户登录</h1>
        <form method="post">
            <input type="text" name="user">
            <input type="text" name="pwd">
            <input type="submit" value="登录">{{error}}
        </form>
    </body>
    </html>
    

    注意:在django中html模板页面都是放在templates文件夹下,在flask中也需要新建一个templates文件夹,统一将html页面放在templates文件夹下

    # 在Flask源码中,实例化__init__()方法中就已经定义了参数
    def __init__(
            self,
            import_name,
            static_url_path=None,
            static_folder="static",  # 放置静态文件的文件夹名,同django中的static
            static_host=None,
            host_matching=False,
            subdomain_matching=False,
            template_folder="templates",   # 放置html页面的文件夹名,同django中的templates
            instance_path=None,
            instance_relative_config=False,
            root_path=None,
        ):
    '''
    :param template_folder: the folder that contains the templates that should be used by the application.  Defaults to ``'templates'`` folder in the root path of the application.
    '''
    

    配置文件的方式

    flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:

     {
            'DEBUG':                                get_debug_flag(default=False),  是否开启Debug模式
            'TESTING':                              False,                          是否开启测试模式
            'PROPAGATE_EXCEPTIONS':                 None,                          
            'PRESERVE_CONTEXT_ON_EXCEPTION':        None,
            'SECRET_KEY':                           None,
            'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),
            'USE_X_SENDFILE':                       False,
            'LOGGER_NAME':                          None,
            'LOGGER_HANDLER_POLICY':               'always',
            'SERVER_NAME':                          None,
            'APPLICATION_ROOT':                     None,
            'SESSION_COOKIE_NAME':                  'session',
            'SESSION_COOKIE_DOMAIN':                None,
            'SESSION_COOKIE_PATH':                  None,
            'SESSION_COOKIE_HTTPONLY':              True,
            'SESSION_COOKIE_SECURE':                False,
            'SESSION_REFRESH_EACH_REQUEST':         True,
            'MAX_CONTENT_LENGTH':                   None,
            'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),
            'TRAP_BAD_REQUEST_ERRORS':              False,
            'TRAP_HTTP_EXCEPTIONS':                 False,
            'EXPLAIN_TEMPLATE_LOADING':             False,
            'PREFERRED_URL_SCHEME':                 'http',
            'JSON_AS_ASCII':                        True,
            'JSON_SORT_KEYS':                       True,
            'JSONIFY_PRETTYPRINT_REGULAR':          True,
            'JSONIFY_MIMETYPE':                     'application/json',
            'TEMPLATES_AUTO_RELOAD':                None,
        }
    

    第一种方式

    from flask import Flask
    app = Flask(__name__)
    
    app.debug = True  
    
    @app.route('/')
    def index():
        return 'ok3'
    
    if __name__ == '__main__':
        app.run()
    

    直接在文件中用 app.debug = True 设置开启DEBUG模式。开启后项目会自动重启。这种方式只能配置 debug 和 secret_key

    第二种方式

    from flask import Flask
    app = Flask(__name__)
    
    app.config['DEBUG'] = True   # 通过config配置
    
    @app.route('/')
    def index():
        return 'ok3'
    
    if __name__ == '__main__':
        app.run()
    

    第三种方式

    from flask import Flask
    app = Flask(__name__)
    
    app.config.from_pyfile('settings.py')  # 将配置写在配置文件中
    
    @app.route('/')
    def index():
        return 'ok3'
    
    if __name__ == '__main__':
        app.run()
    

    settings.py文件

    DEBUG = True
    

    第四种方式

    from flask import Flask
    app = Flask(__name__)
    
    app.config.from_object('settings.TestConfig')  # 将配置写在配置文件的类中,导入使用
    
    @app.route('/')
    def index():
        return 'oD3'
    
    if __name__ == '__main__':
        app.run()
    

    settings.py文件

    class BaseConfig:
        SESSION_COOKIE_NAME = 'session' 
    
    class TestConfig(BaseConfig):
        DEBUG = True
    
    class WorkConfig(BaseConfig):
        DEBUG = False
    

    这种配置比较推荐使用,因为以后在开发过程中需要不同环境下配置不同,可以通过引用不同的类来配置不同的参数

    其他方式

    # 通过环境变量配置
    app.config.from_envvar("环境变量名称")
    # app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
    环境变量的值为python文件名称名称,内部调用from_pyfile方法
    
    app.config.from_json("json文件名称")
    JSON文件名称,必须是json格式,因为内部会执行json.loads
    
    app.config.from_mapping({'DEBUG': True})
    字典格式
    
  • 相关阅读:
    Jenkins和Postman 集成,使用Allure 输出测试报告
    Jenkins 中使用VSTest.console 进行单元测试,使用Allure 输出测试报告
    如果网页中有ShawdowDOM ,如何使用 Selenium Web Driver 进行操作
    postman 不能打开
    chrome DEvTools 使用
    使用selenium 连接到一个已经打开的浏览器
    如何查看电脑开关机时间
    Task.Wait() 和 await Task 的区别
    已经过了1/3的2020
    Laravel7 配置jwt ,并处理 Unauthorized 错误
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11600225.html
Copyright © 2011-2022 走看看