zoukankan      html  css  js  c++  java
  • flask的基本使用

    flask是一个轻量级框架,它默认依赖2个外部库:Jinja2 模板、 WSGI工具集--Werkzeug

    flask的使用特点是基本所有的工具使用都依赖于导入的形式去扩展,flask只保留了web开发的核心功能。

    通常:我们学习一个web框架只需要学会 如何使用路由、如何使用视图函数与模板语法、如何导入数据库 就可以跑通一个web项目

    安装Flash:pip install flask

    一、Werkzeug简介

    Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下, werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,例如 Request,Response 等等 。

    代码示例:

    from werkzeug.wrappers import Request, Response
    
    '''
    werkzeug是一个WISGI工具包。它可以作为一个web框架的底层库。
    '''
    
    
    @Request.application
    def hello(request):
        print(request)
        return Response('Hello World!')
    
    
    if __name__ == '__main__':
        from werkzeug.serving import run_simple
    
        # run_simple('127.0.0.1', 4000, hello)
        run_simple('localhost', 4000, hello)
    
    

    二、初识flask

    # 导入Flask模块
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route("/")
    def index():
        return "ojbk"
    
    
    if __name__ == '__main__':
        # __call__
        app.run()
        '''
        flask中app.run()会调用run_simple(host, port, self, **options)
        self也就是app。app()会触发Flask类的__call__方法。
        '''
    

    小结:

    1 app.run() 调用 werkzeug.serving的run_simple(host, port, self, **options)
    2 self()等价于app(), app()调用Flask类的__call__方法
    3 Flask类的__call__方法返回了 self.wsgi_app(environ, start_response)
    4 flask程序的执行过程都在 self.wsgi_app(environ, start_response)中
    

    三、Debug模式

    1. flask代码中如果出现了异常,我们在浏览器中不会提示具体的错误信息,开启debug模式后会把具体的错误信息发送到浏览器上。
    2. flask代码如果被修改了,必须要重启项目修改的代码才会有效,开启debug模式后我们修改了代码只要ctrl+s我们的flask项目就会自动重新加载,不需要手动加载整个网站。

    四、导入配置的四种方式

    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.secret_key="asdjja"
    
    @app.route("/")
    def index():
        return "ok"
    
    if __name__ == '__main__':
        app.run()
    
    • 方式二:以字典的形式
    from  flask import Flask
    app = Flask(__name__)
    
    #方式二,以字典的形式
    app.config['DEBUG']=True
    
    @app.route("/")
    def index():
        return "ok"
    
    if __name__ == '__main__':
        app.run()
    
    • 方式三:以文件的形式
    from  flask import Flask
    app = Flask(__name__)
    
    #方式三 ,以文件的形式
    app.config.from_pyfile("settings.py")
    
    @app.route("/")
    def index():
        return "ok"
    
    if __name__ == '__main__':
        app.run()
        
    '''settings.py'''
    DEBUG=True
    
    • 方式四:以类的形式
    from  flask import Flask
    app = Flask(__name__)
    
    #方式四 ,以类的形式(*****)
    app.config.from_object("settings.test")
    
    @app.route("/")
    def index():
        return "ok"
    
    if __name__ == '__main__':
        app.run()
    

    五、返回数据的四种方式

    1. 返回字符串
    2. 返回模板:render_template
    3. 跳转:redirect
    4. 返回json
    from flask import Flask,render_template,redirect,jsonify,request
    app=Flask(__name__)
    
    '''
    1 返回字符串
    2 返回模板:render_template
    3 跳转:redirect
    4 返回 json
    
    '''
    
    @app.route("/")
    def index():
        return "ojbk"
    
    @app.route("/index")
    def index1():
        return render_template("index.html")
    
    @app.route("/home")
    def home():
        return redirect("/index")
    
    @app.route("/json")
    def json1():
        data_dic={'name':"jason",'age':38}
        # 返回字典序列化为json串
        return jsonify(data_dic)
    
    
    if __name__ == '__main__':
        app.run()
    

    templates->index.html

    模板文件夹的名字必须叫这个

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h1>用户列表</h1>
    </body>
    </html>
    
  • 相关阅读:
    Codeforces Round #407 (Div. 2)A B C 水 暴力 最大子序列和
    Codeforces Round #358 (Div. 2) A B C 水 水 dfs序+dp
    51nod 1225 数学
    HDU 4584 splay
    bzoj 1588 平衡树 splay
    HDU 4722 数位dp
    Kubernetes 自动伸缩 auto-scaling
    转发一篇能看懂的关于ingress的说明
    Http 安全检测
    mdadm 软RAID
  • 原文地址:https://www.cnblogs.com/XuChengNotes/p/12149294.html
Copyright © 2011-2022 走看看