zoukankan      html  css  js  c++  java
  • FLASK基础

    一、配置文件

    Flask的配置文件 

    app.config     Config对象的本质是一个字典

    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,
        }

     

    修改配置的方式

    方式一:

    app.config["参数"] = value

    app.secret_key = value

    '''修改配置文件方式一'''
    print(app.config.get('DEBUG'))      # False
    app.config['DEBUG'] = True   # 修改配置文件的DEBUG属性
    print(app.config.get('DEBUG'))      # True

     

    方式二:

    app.config.from_pyfile("python文件名称")
        如:
            settings.py
                DEBUG = True
    
            app.config.from_pyfile("settings.py")
    
    app.config.from_envvar("环境变量名称")
        环境变量的值为python文件名称名称,内部调用from_pyfile方法
    
    
    app.config.from_json("json文件名称")
        JSON文件名称,必须是json格式,因为内部会执行json.loads
    
    app.config.from_mapping({'DEBUG':True})
        字典格式
    
    app.config.from_object("python类或类的路径")
    
        app.config.from_object("settings.MySetting")        # settings.py的MySetting类

     

     

    二、路由

    • @app.route('/user/<username>')
    • @app.route('/post/<int:post_id>')
    • @app.route('/post/<float:post_id>')
    • @app.route('/post/<path:path>')
    • @app.route('/login', methods=['GET', 'POST'])

    常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:

    转换器类型,为变量指定规则:

    string (缺省值) 接受任何不包含斜杠的文本
    int 接受正整数
    float 接受正浮点数
    path 类似 string ,但可以包含斜杠
    uuid 接受 UUID 字符串
    DEFAULT_CONVERTERS = {
        'default':          UnicodeConverter,
        'string':           UnicodeConverter,
        'any':              AnyConverter,
        'path':             PathConverter,
        'int':              IntegerConverter,
        'float':            FloatConverter,
        'uuid':             UUIDConverter,
    }

    示例:

    from flask import Flask,redirect,url_for
    
    app = Flask(__name__)
    
    # endpoint 指向函数的名字
    @app.route("/book/<int:newid>",endpoint="book")
    def book(newid):
        print(newid,type(newid))        # 123 <class 'int'>
        return "Book页面"
    
    # methods= 指定请求方式的列表
    @app.route("/",methods=['GET','POST'])  
    def index():
        return redirect(url_for("book",newid=123))      # 反向解析
    
    if __name__ == '__main__':
        app.run()

     

    访问的URL

    1.URL 是中规中举的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。

    2. URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。

    三、静态文件

    动态的 web 应用也需要静态文件,一般是 CSS 和 JavaScript 文件。理想情况下你的 服务器已经配置好了为你的提供静态文件的服务。但是在开发过程中, Flask 也能做好 这项工作。只要在你的包或模块旁边创建一个名为 static的文件夹就行了。 静态文件位于应用的 /static 中。

    使用特定的 'static' 端点就可以生成相应的 URL

    url_for('static', filename='style.css')
    

    这个静态文件在文件系统中的位置应该是 static/style.css 。

    四、请求和响应

    导入request和Response

    from flask import Flask,request,Response

    # 请求相关信息
    # request.method
    # request.args
    # request.form
    # request.values
    # request.cookies
    # request.headers
    # request.path
    # request.full_path
    # request.script_root
    # request.url
    # request.base_url
    # request.url_root
    # request.host_url
    # request.host
    # request.files
    # obj = request.files['the_file_name']
    # obj.save('/var/www/uploads/' + secure_filename(f.filename))
    
    # 响应相关信息
    # return "字符串"
    # return render_template('html模板路径',**{})
    # return redirect('/index.html')
    
    # response = make_response(render_template('index.html'))
    # response是flask.wrappers.Response类型
    # response.delete_cookie('key')
    # response.set_cookie('key', 'value')
    # response.headers['X-Something'] = 'A value'
    # return response

    示例:

    from flask import Flask
    from flask import request,Response
    from flask import render_template
    from flask import make_response
    
    app = Flask(__name__)
    
    @app.route("/")
    def index():
        print(request.method)   # 请求
        '''
        自定义响应
        '''
        response = make_response(render_template("index.html"))
        response.set_cookie("key","value")      # 响应设置cookie
        return response
    
        # return render_template("index.html")        # 响应
    
    if __name__ == '__main__':
        app.run()

    五、模板

    1、模板的使用

    Flask使用的是Jinja2模板,所以其语法和Django无差别

    2、自定义模板方法

    Flask中自定义模板方法的方式和Bottle相似,创建一个函数并通过参数的形式传入render_template

    '''示例一'''
    from flask import Flask
    from flask import url_for
    from flask import render_template
    
    app = Flask(__name__)
    
    book_list = [
        {"id":1,"title":"python1"},
        {"id":2,"title":"python2"},
        {"id":3,"title":"python3"},
    ]
    
    
    @app.route("/book")
    def book():
        return render_template("book.html",book_list=book_list)
    
    if __name__ == '__main__':
        app.run()
    <!--book.html-->
    <!DOCTYPE html>
    <html lang="zh-cmn-Hans">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <title>Title</title>
    </head>
    <body>
    
    {% for book in book_list %}
    <p> {{book.title}}</p>
    {% endfor %}
    
    </body>
    </html>
    实例1的HTML
    '''实例二'''
    from flask import Flask
    from flask import render_template
    
    app = Flask(__name__)
    
    mydict = {'key':"value"}
    
    def myfunc():
        return "<h1>函数返回的内容</h1>"
    
    @app.route('/test')
    def test():
        return render_template("test.html",**{"mydict":mydict,"myfunc":myfunc})     # 传入的字典需要打散
    
    if __name__ == '__main__':
        app.run()
    <!DOCTYPE html>
    <html lang="zh-cmn-Hans">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
        <title>Title</title>
    </head>
    <body>
    <p>{{mydict.get('key')}}0</p>
    <p>{{mydict["key"]}}1</p>
    {{myfunc()|safe}}
    </body>
    </html>
    实例2的HTML
  • 相关阅读:
    C#使用R.net(RDotNet)混合编程,配置环境时发生错误“This 32-bit process failed to load the library R.dll. Native error message is '句柄无效。'””
    Error in shinyAppDir(x) : No Shiny application exists at the path "~/app"处理方法
    vm拷贝cloudera-scm-agent造成问题
    cloudera目录位置
    centos下安装cdh5
    elasticsearch常用的插件
    elasticsearch 安装
    mongod的主要参数有
    mongodb.conf配置文件详解
    centos 安装 mongo3.0
  • 原文地址:https://www.cnblogs.com/st-st/p/10185943.html
Copyright © 2011-2022 走看看