>  기사  >  백엔드 개발  >  Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)

Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)

WBOY
WBOY앞으로
2022-03-01 18:23:414972검색

이 글은 python에 대한 관련 지식을 제공합니다. 주로 Flask의 작동 원리와 관련된 문제를 소개하고 Flask의 작동 원리를 간략하게 분석하여 모든 사람에게 도움이 되기를 바랍니다.

Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)

권장 학습: python 학습 튜토리얼

모든 Python 웹 프레임워크는 WSGI 프로토콜을 따라야 합니다. 여기서는 WSGI의 핵심 개념을 간략하게 검토해야 합니다.

  WSGI에는 매우 중요한 개념이 있습니다. 모든 Python 웹 애플리케이션은 호출 가능한 객체입니다. 플라스크에서 이 객체는 app = Flask(name)에 의해 생성된 앱이며, 아래 그림의 녹색 Application 부분입니다. 웹 애플리케이션을 실행하려면 Python으로 친숙한 apache, nginx 또는 gunicorn과 같은 웹 서버가 있어야 합니다. 아래에서는 werkzeug에서 제공하는 WSGIServer에 대해 설명하겠습니다. 아래 그림에서 노란색 서버 부분입니다.
Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)
  Server와 Application 간의 통신 방법은 WSGI의 기능입니다. 이는 앱(environ, start_response)의 인터페이스를 지정합니다. 서버는 애플리케이션을 호출하고 두 개의 매개변수를 전달합니다. Environ에는 요청의 모든 정보가 포함되어 있습니다. 매개변수는 애플리케이션이 처리된 후 호출되어야 하는 함수입니다. 코드와 응답에도 오류 메시지가 있습니다.

 WSGI 애플리케이션의 가장 중요한 특징은 중첩이 가능하다는 것입니다. 즉, 다른 애플리케이션을 호출한 다음 반환하는 애플리케이션을 작성할 수 있습니다(프록시와 유사). 일반적으로 중첩의 마지막 계층은 비즈니스 애플리케이션이고 중간은 미들웨어입니다. 이것의 장점은 전류 제한, 인증, 직렬화 등과 같은 비즈니스 논리 및 기타 기능을 서로 다른 중간 계층으로 구현할 수 있다는 것입니다. 서로 다른 중간 계층 및 비즈니스 논리는 서로 관련이 없으며 독립적으로 유지 관리될 수 있습니다. 또한 다양한 중간 계층을 동적으로 결합하여 다양한 요구 사항을 충족할 수 있습니다.
Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)
Flask는 Werkzeug WSGI 도구 상자와 Jinja2 템플릿 엔진을 기반으로 합니다. Flask는 BSD 라이선스에 따라 라이선스가 부여됩니다. Flask는 간단한 코어를 사용하고 확장 기능을 사용하여 추가 기능을 추가하기 때문에 "마이크로프레임워크"라고도 합니다. Flask에는 기본 데이터베이스나 양식 유효성 검사 도구가 없습니다. 그러나 Flask는 확장의 유연성을 유지하므로 Flask 확장을 사용하여 ORM, 양식 유효성 검사 도구, 파일 업로드 및 다양한 개방형 인증 기술과 같은 기능을 추가할 수 있습니다. Flask는 핵심이고 다른 기능은 일부 플러그인이라는 것을 이해할 수 있습니다. 어떤 기능이 필요하든 해당 플러그인을 찾아 코어에 삽입하면 기능을 실현할 수 있습니다.

 Flask가 코드를 눈에 보이는 웹페이지로 변환하는 방법. 우선, 웹 프로그램의 일반적인 프로세스를 살펴봐야 합니다. 웹 애플리케이션의 경우 클라이언트가 동적 리소스(예: ASP 및 PHP와 같은 언어로 작성된 웹 사이트)를 얻으려고 할 때 시작됩니다. HTTP 요청(예: 브라우저를 사용하여 URL에 액세스), 이때 웹 애플리케이션은 서버 백그라운드에서 해당 비즈니스 처리(예: 데이터베이스 운영 또는 일부 계산 작업 수행 등)를 수행하여 데이터를 가져옵니다. 사용자 요구 사항 및 해당 HTTP 응답 생성(물론 정적 리소스에 액세스하는 경우 서버는 사용자가 요구하는 리소스를 직접 반환하고 비즈니스 처리를 수행하지 않습니다). 전체 처리 프로젝트는 다음과 같습니다. 실제 애플리케이션에서는 서로 다른 요청이 동일한 처리 논리를 호출할 수 있습니다. 동일한 비즈니스 처리 논리를 사용하는 HTTP 요청은 URL 유형으로 식별할 수 있습니다. 예를 들어, 블로그 사이트에서 기사 콘텐츠를 얻기 위한 모든 요청은 기사/와 같은 URL로 표시될 수 있습니다. 여기에서 기사 ID는 다양한 기사를 구별하는 데 사용됩니다. 그런 다음 기사의 해당 데이터를 얻기 위해 백그라운드에서 get_article(article_id) 함수를 정의합니다. 또한 URL과 함수 간의 일대일 대응을 설정해야 합니다. 이것은 아래 그림과 같이 웹 개발에서 소위 경로 배포입니다. Flask에서 werkzeug는 경로 배포에 사용됩니다. Werkzeug는 Flask(WSGI, 전체 이름 웹 서버 게이트웨이 인터페이스 또는 Python)에서 사용되는 기본 WSGI 라이브러리입니다. 웹 서버 게이트웨이 인터페이스는 Python 언어용으로 정의된 웹 서버와 웹 애플리케이션 간의 간단하고 보편적인 인터페이스입니다.
WSGI는 웹 서비스를 서버와 애플리케이션의 두 부분으로 나눕니다. WGSI 서버는 네트워크와 관련된 두 가지 작업만 담당합니다. 즉, 브라우저에서 HTTP 요청을 수신하고 HTTP 응답을 브라우저로 보내는 것과 HTTP 요청에 대한 특정 처리 논리는 WSGI 애플리케이션을 호출하여 수행됩니다. WSGI 워크플로우는 아래 그림에 나와 있습니다. Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)

  Flask에서 경로 분배 코드는 다음과 같이 작성하기가 매우 간단합니다. Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)

# 管理员注销页面
@main.route('/logout')
def logout():
    dm = DataManager()
    currentUsers = dm.getUsers('0')
    print(currentUsers[0])
    return render_template('currentUsers.html', users=currentUsers)

  비즈니스 로직 기능을 통해 필요한 데이터를 얻은 후 서버는 HTTP 기반을 생성합니다. 데이터 응답에 대한 응답(웹 애플리케이션의 경우 일반적으로 클라이언트, 즉 브라우저에서 직접 읽고 해석할 수 있는 HTML 파일입니다.) 웹 개발에서는 획득한 데이터를 웹 애플리케이션에서 제공하는 HTML 템플릿 파일에 전달하고, 템플릿 시스템에서 렌더링한 후 최종적으로 필요한 HTML 응답 파일을 얻는 것이 일반적인 관행입니다.
일반적인 상황에서는 요청이 다르지만 응답의 데이터 표시 방법은 동일합니다. 평신도의 관점에서 우리가 요청한 데이터를 제외하고 다른 모든 것은 동일하므로 템플릿을 디자인할 수 있습니다( 데이터 내용은 변경될 수 있지만 다른 내용은 고정된 HTML 파일입니다. 블로그 사이트를 예로 들어 보겠습니다. 기사마다 특정 기사 내용이 다르지만 페이지에 표시되는 내용은 제목 블록, 콘텐츠 열 등을 포함하여 요청된 데이터와 동일합니다. 즉, 기사의 경우 HTML 템플릿을 제공한 다음 다른 기사 데이터를 전달하여 다른 HTTP 응답을 얻으면 됩니다. 이것이 소위 템플릿 렌더링입니다. 아래 그림과 같습니다.
Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)
템플릿 렌더링을 위해 Flask에서 Jinja2 템플릿 렌더링 엔진을 사용합니다. (Jinja2는 Python 기반의 템플릿 엔진이며 기능은 PHP의 스마트한 J2ee의 Freemarker와 유사합니다. 그리고 속도 . 유니코드를 완벽하게 지원하며 널리 사용되는 통합 샌드박스 실행 환경을 갖추고 있습니다(jinja2는 BSD 인증을 사용합니다). Jinja2의 워크플로는 다음과 같습니다.


  Flask에서 템플릿 렌더링 코드는 작성하기도 매우 편리합니다. 코드는 다음과 같습니다.

@app.route('/articles/<article_id>/') 
defget_article(article_id):
returnrender_template('path/to/template.html', data_needed)</article_id>
Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)   Flask에서 요청을 처리하는 과정은 먼저 다음과 같이 제출하는 것입니다. 사용자의 요청 URL을 사용하여 처리할 비즈니스 로직 기능을 결정한 다음 해당 기능에서 작동하여 필요한 데이터를 얻습니다. 그런 다음 얻은 데이터를 해당 템플릿 파일에 전달하면 Jinja2는 HTTP 응답 콘텐츠, 즉 HTTP 응답의 HTML 파일을 렌더링하고 Flask는 응답 콘텐츠를 반환합니다.
  다음에서는 주로 예제 프로젝트를 사용하여 Flask의 작동 원리를 간략하게 분석합니다. 예제 프로젝트에서는 프로그램 팩토리 기능과 청사진이 사용되었습니다. 프로젝트 디렉토리 구조는 다음과 같습니다.
Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)
  manager.py 파일에는 프로젝트 시작을 위한 입력 기능이 정의되어 있습니다.
# 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。
if __name__ == '__main__':
    # 启用cmd命令行
    # manager.run()
    app.run(host='0.0.0.0', port=9000, debug=True)

同时,在该文件中创建了工厂方法实例:

	app = create_app()

  在工程方法中,对数据库进行了相关配置,创建了前端导航栏,同时对所创建的蓝本进行了注册。在创建的蓝本中主要涉及授权、路由及错误处理模块。

# 构造工厂方法
def create_app():
    # 在这里__name__ == __main__
    app = Flask(__name__)
    app.url_map.converters['regex'] = RegexConverter
    # 防止跨站攻击 注:为了增强安全性,密钥不应直接写入代码,而应该保存在环境变量中
    # app.config['SECRET_KEY'] = 'hard to guess string SUNNY2017'
    # app.secret_key = 'Sunny123456'

    # flask提供的读取外部文件
    app.config.from_pyfile('config')

    # basedir = os.path.abspath(os.path.dirname(__file__))
    # print(basedir)

    # 配置数据库连接
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://lmapp:lmapp@localhost/smp'
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

    nav.register_element('top', Navbar(u'APP安盾',
                                       View(u'当前在线', 'main.index'),
                                       View(u'全部用户', 'main.all_users'),
                                       View(u'注销', 'main.logout'),
                                       View(u'修改密码', 'main.chgpwd'),
                                       ))
    nav.init_app(app)
    db.init_app(app)
    bootstrap.init_app(app)
    # init_views(app)
    from .auth import auth as auth_blueprint
    from .main import main as main_blueprint
    # 注册蓝本 url_prefix='/auth'
    app.register_blueprint(auth_blueprint,)
    app.register_blueprint(main_blueprint, static_folder='static')
    return app

 推荐学习:python教程

위 내용은 Flask의 작동 원리를 분석하는 Python 학습(그림과 텍스트로 자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제