Flask 노트 1

7370 단어
Flask 노트
우선 동적 웹 페이지를 실행하려면
  • 웹 서버가 요청을 감청하고 응답합니다. 정적 파일을 요청하면 바로 되돌려주고 동적 URL이면 요청을 웹 응용 프로그램에 전달합니다.
  • 요청을 동적으로 처리하고 응답을 생성하는 웹 애플리케이션
  • 그 중에서 웹 서버는 일반적으로 다른 사람들이 이미 실현한 것으로 정의된 인터페이스를 통해 우리가 작성한 웹 응용 프로그램과 통신한다.WSGI는 하나의 통일된 웹 서버 인터페이스 표준이다. 만약에 우리가 WSGI에 따라 웹 응용 프로그램을 작성한다면 이 표준에 부합되는 모든 서버에서 실행할 수 있다. 예를 들어 Gunicorn.(자바의 서브렛을 비교해 보면 서브렛 규범에 따라 작성된 응용 프로그램은 모든 서브렛 용기에서 실행할 수 있다. 예를 들어 Tomcat과 Jetty, 서브렛 용기는 WSGI 서버에 해당한다)
    그러나 WSGI는 여전히 밑바닥을 비교하고 그대로 쓰기가 너무 번거로워서 웹 프레임워크가 생겼다. 파이톤이 유명한 것은 바로 Flask와 Django이다.Java의 서브렛도 Spring MVC 프레임워크에 해당합니다.그러나 Flask와 Django는 테스트에 내장된 서버를 가지고 있지만 Spring MVC는 없고 오히려 Spring Boot은 내장된tomcat 용기를 사용할 수 있다.
    Flask는 마이크로 프레임워크로'미크'는 그 핵심이 매우 작고 선택할 수 있는 모든 기능이 포함되지 않는다는 것을 가리킨다.그러나 Flask 커뮤니티는 다양한 확장 플러그인을 제공합니다. 필요한 플러그인을 선택해서 원하는 기능을 실현할 수 있습니다.
    소개
    Flask는 마이크로 프레임워크로'미크'는 그 핵심이 매우 작고 선택할 수 있는 모든 기능이 포함되지 않는다는 것을 가리킨다.그러나 Flask 커뮤니티는 다양한 확장 플러그인을 제공합니다. 필요한 플러그인을 선택해서 원하는 기능을 실현할 수 있습니다.
    2. 데모 프레젠테이션
    환경 준비
    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)


    3. 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()

    5. 역해석
    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": "plf\u754c\u9762 GET", 
      "status": "OK"
    }
    """

    렌더링 페이지:rendertemplate
    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()

    전재 대상:https://www.cnblogs.com/plf-Jack/p/11594175.html

    좋은 웹페이지 즐겨찾기