zoukankan      html  css  js  c++  java
  • Flask笔记1

    Flask笔记

    首先明确一下,要运行一个动态网页,我们需要

    1. 一个 Web 服务器来监听并响应请求,如果请求的是静态文件它就直接将其返回,如果是动态 url 它就将请求转交给 Web 应用。
    2. 一个 Web 应用来动态处理请求,生成响应

    其中 Web 服务器通常都是别人已经实现好了的,它通过定义好的接口与我们编写的 Web 应用通信。WSGI 就是一个统一的 Web 服务器接口标准,如果我们按照 WSGI 编写 Web 应用,那么它就能在任何符合该标准的服务器上运行,例如 Gunicorn.(对比一下 Java 的 Servlet,按照 Servlet 规范编写的应用,都能运行在任何 Servlet 容器上,例如 Tomcat 和 Jetty,Servlet 容器就相当于 WSGI 服务器)

    可是 WSGI 仍然比较底层,直接照着它写太麻烦,于是就有了 Web 框架,Python 知名的就是 Flask 和 Django。Java 的 Servlet 也是如此,对应的出现了 Spring MVC 框架。但是 Flask 和 Django 都有内置服务器用于测试,而 Spring MVC 没有,倒是 Spring Boot 可以使用内嵌的 tomcat 容器。

    Flask 是一个微框架,“微”是指它的核心非常小,任何可选的功能都不包括在内。但是 Flask 社区提供了丰富的拓展插件,你可以通过选择需要的插件来实现你想要的功能。

    一、简介

    Flask 是一个微框架,“微”是指它的核心非常小,任何可选的功能都不包括在内。但是 Flask 社区提供了丰富的拓展插件,你可以通过选择需要的插件来实现你想要的功能。

    二、demo演示

    环境准备

    sudo apt install python-pip
    sudo pip3 install flask
    mkdir flask
    cd flask/
    

    hello-world.py文件

    #!/usr/bin/env python3
    """Out first Flask Application"""
    from flask import Flask
    app = Flask("__name__")  #这里以接受包或者模块为参数,一般传递__name__
                             #这里定义了变量app赋值为Flask()
    
    @app.route('/')         #这里相当于定义了一个路由,具体访问一下本地就知道了
    def index():            #路由的函数就是紧接着定义的函数
      return "Hello World!" #访问http://127.0.0.1:5000/(默认端口)界面返回Hello World!
    
    @app.route('/say_hello')
    def say_hello():
      return "Hello You are so Good!"  #访问http://127.0.0.1:5000/say_hello界面返回Hello You are so Good!
    
    if (__name__=="__main__"):
      app.run()  #端口可以修改app.run(host='0.0.0.0',port=8000)
    

    一个非常简单的flask网页就已经搭建成功,直接运行该python程序

    ┌─[thekingofnight@parrot]─[~/flask]
    └──╼ $chmod +x hello-world.py 
    ┌─[thekingofnight@parrot]─[~/flask]
    └──╼ $sudo ./hello-world.py 
     * Serving Flask app "__name__" (lazy loading)
     * Environment: production
       WARNING: Do not use the development server in a production environment.
       Use a production WSGI server instead.
     * Debug mode: off
     * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    

    当然也可以这样,效果是一样的

    ┌─[thekingofnight@parrot]─[~/flask]
    └──╼ $FLASK_APP=hello-world.py flask run
    * Serving Flask app "hello-world"
    * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    

    三、自定义Flask配置文件的几种方式

    第一种:

    app.debug=True
    app.secret_key='*****' # 随便填
    

    第二种:

    app.config["DEBUG"]=True
    
    或者
    
    config = {
        "DEBUG":True,
        "SECRET_KEY":'***'
    }
    app.config.update(config)
    

    第三种:指定配置文件,ps: 配置文件与运行文件要在同一路径下

    app.config.from_pyfile('settings.py')
    

    第四种:使用类当作配置文件

    配置文件foo.py文件

    class Config(object):
        DEBUG = False
        TESTING = False
        DATABASE_URI = 'sqlite://:memory:'
    
    
    class ProductionConfig(Config):
        DATABASE_URI = 'mysql://user@localhost/foo'
    
    
    class DevelopmentConfig(Config):
        DEBUG = True
    
    
    class TestingConfig(Config):
        TESTING = True
    
    # 导入该类
    # app.config.from_object('python类或类的路径')
    app.config.from_object(foo.DevelopmentConfig)
    

    四、路由

    使用路由的几种方式

    第一种:

    from flask import Flask,request
    app = Flask(__name__)
    @app.route('/',methods=['GET','POST'])
    def index():
        print(request)
        if request.method == "POST":
            return "我是首页 POST"
        else:
            return "我是首页 GET"
    if __name__ == '__main__':
        app.run()
    

    第二种:

    from flask import Flask,request
    app = Flask(__name__)
    def index():
        return "我是首页"
    app.add_url_rule('/','index',index,methods=['GET','POST'])
    if __name__ == '__main__':
        app.run()
    

    五、反向解析

    from flask import Flask,redirect,url_for,request
    
    app = Flask(__name__)
    
    @app.route('/',methods=['GET','POST'],endpoint='index_plf')	# endpoint 反向路由别名
    def index():
        print(request)
        if request.method == "POST":
            return "我是首页 POST"
        else:
            return "我是首页 GET"
        
    @app.route('/register',methods=['GET','POST'])
    def register():
        print(request)
        if request.method == "POST":
            return "注册界面 POST"
        else:
            return redirect(url_for('index_plf'))		# url_for从定向到指定别名为index_plf的路由视图中
    
    if __name__ == '__main__':
        app.run()
    

    当我们使用get方式访问127.0.0.1:5000/register时,会直接跳转到index视图函数中

    六、四剑客

    从定向:redirect

    from flask import Flask,redirect,url_for,request
    
    app = Flask(__name__)
    
    @app.route('/',methods=['GET','POST'],endpoint='index_plf')	# endpoint 反向路由别名
    def index():
        print(request)
        if request.method == "POST":
            return "我是首页 POST"
        else:
            return "我是首页 GET"
        
    @app.route('/register',methods=['GET','POST'])
    def register():
        print(request)
        if request.method == "POST":
            return "注册界面 POST"
        else:
            return redirect(url_for('index_plf'))		# url_for从定向到指定别名为index_plf的路由视图中
    
    if __name__ == '__main__':
        app.run()
    

    返回json数据:jsonify

    from flask import Flask,jsonify
    app = Flask(__name__)
    
    @app.route('/plf',methods=['GET','POST'])
    def plf():
        print(request)
        if request.method == "POST":
            return jsonify({"status":"OK","msg":"plf界面 POST"})
        else:
            return jsonify({"status":"OK","msg":"plf界面 GET"})
    if __name__ == '__main__':
        app.run()
    
    """
    {
      "msg": "plfu754cu9762 GET", 
      "status": "OK"
    }
    """
    

    渲染页面:render_template

    from flask import Flask,render_template,request
    app = Flask(__name__)
    
    @app.route('/lt',methods=['GET','POST'])
    def lt():
        print(request)
        if request.method == "POST":
            return render_template('lt.html',age=18)
        else:
            return render_template('lt.html',age=18)
    if __name__ == '__main__':
        app.run()
    

    ps:注意模板渲染时,html文件应该放入templates文件夹中。同时必须要注意运行的文件必须要跟templates文件夹在同一个目录下

    响应对象:Response

    from flask import Flask,Response
    app = Flask(__name__)
    
    @app.route('/plf_test',methods=['GET','POST'])
    def plf_test():
        print(request)
        if request.method == "POST":
            return Response("plf_test界面 POST")
        else:
            return Response("plf_test界面 GET")
    if __name__ == '__main__':
        app.run()
    
  • 相关阅读:
    Spring源码分析(一)
    keras默认配置
    keras中常用的初始化器
    keras手写数字识别
    tensorflow实现XOR
    sklearn PCA的使用
    git常用操作
    Microsoft Visual C++ 14.0 is required问题解决
    TensorFlow2.0提示Cannot find reference 'keras' in __init__.py
    线性回归处理非数值型数据
  • 原文地址:https://www.cnblogs.com/plf-Jack/p/11594175.html
Copyright © 2011-2022 走看看