참고: 아직 개발 중입니다!
현재 버전: 0.0.0
베타
Flask-BDA는 아직 초기 개발 중이며 Python 3.8.6 버전에서 테스트 중입니다.
현재 로드맵 및 높은 수준의 프로젝트 계획: https://trello.com/b/uu4HNPBh/flask-bda-features-roadmap
Flask-BDA는 버전 번호에 대한 {major}.{minor}.{patch}
구성표를 사용하여 릴리스에 대한 의미 체계 버전 관리를 따릅니다.
버전 0.0.1
이후 최소 3개의 마이너 버전에 대한 지원 중단이 유지됩니다.
Tableau, Power BI 및 Amazon QuickSight와 같은 다른 솔루션은 환상적인 도구이지만 보고에 중점을 두지만 필요할 때 플랫폼에 데이터를 편집하거나 추가할 수 없습니다. 즉, 비즈니스 목표를 달성하려면 추가 솔루션이나 소프트웨어가 필요합니다.
Excel과 같은 솔루션은 누구나 액세스할 수 있으며 필요한 모든 유연성을 제공합니다. 그럼에도 불구하고 데이터는 분산되어 팀과 고객이 공유할 수 있는 정보 소스를 쉽게 허용하지 않으며, Excel 문서가 동기화되지 않거나 공유되는 경우가 매우 많아 회사가 보안 위험에 노출될 수 있습니다.
Flask-BDA는 빠르고 안전한 풀 스택 애플리케이션을 2~5배(2~5배) 빠르게 제공할 수 있는 제어 기능을 제공하여 귀하를 돕습니다. 공급업체나 환경에 종속되지 않습니다.
Flask는 Python에서 웹 애플리케이션을 구축할 수 있도록 Armin Ronacher가 작성한 오픈 소스 "마이크로 프레임워크"입니다. 작은 핵심 기능 세트만 제공하면 개발자가 애플리케이션에 필요한 추가 도구를 선택할 수 있는 확장 가능한 기반이 제공됩니다.
마이크로 프레임워크라고 불려도 Flask는 크고 작은 웹 애플리케이션을 구축하는 데 매우 적합합니다. Flask는 Twilio, Pinterest, Lyft, LinkedIn 및 Uber와 같은 대기업의 생산 시스템에 사용되었습니다.
Flask-BDA는 다음을 수행할 수 있는 기존 플라스크 애플리케이션 구조를 제공하여 더 빠르게 개발할 수 있도록 도와줍니다.
소프트웨어 개발 속도를 늦추는 지루한 측면을 자동으로 처리합니다.
- 모든 데이터베이스 연결과 복잡한 쿼리를 생성하고 관리합니다.
- 사용자 및 역할 기반 액세스 제어를 통한 애플리케이션 보안
- 모든 작업에 대한 자동 감사
Flask-BDA는 회사가 모든 장치에서 실행되는 보안 응용 프로그램을 신속하게 개발하고 배포할 수 있는 도구를 제공하는 로우 코드 플랫폼(많은 코드를 작성하여 도움을 준다는 의미)입니다.
우리는 소프트웨어 구축 방식을 변경하여 비즈니스와 함께 발전하는 모든 규모의 중요한 애플리케이션을 신속하게 생성 및 배포할 수 있도록 하여 시간과 비용을 절약합니다.
개발자는 소비자 앱부터 중요한 내부 비즈니스 시스템에 이르기까지 개발자가 보안 애플리케이션을 빠르고 효율적으로 제공할 수 있도록 설계된 광범위한 애플리케이션을 구축하고 배포할 수 있으므로 앱이 몇 주, 심지어 며칠 내에 제공됩니다.
Flask-BDA는 다음과 같은 풀스택 개발을 제공합니다. UI, 비즈니스 프로세스, 사용자 지정 논리 및 데이터 모델을 사용하여 즉시 크로스 플랫폼 앱을 만들 수 있습니다. 필요할 때 사용자 정의 코드를 추가할 수 있는 스캐폴드를 제공합니다. 잠금 장치가 없습니다.
사전 구성된 개발 환경을 통해 시장 출시에 따른 어려움(및 비용)을 줄이고 배포 위치와 방법을 선택할 수 있는 유연성을 제공합니다.
무료이며 개발자 친화적인 Flask-BDA는 개발자 친화적인 라이선스가 포함된 무료로 사용할 수 있고 소스를 사용할 수 있는 애플리케이션 개발 도구입니다.
Flask-BDA는 상업용 및 개인 프로젝트에 완전히 무료로 사용할 수 있습니다.
그러나 소프트웨어 개발은 항상 비용이 많이 드는 작업입니다.
- 제품을 구축하려면 한 명 이상의 소프트웨어 개발자, 비즈니스 분석가, 디자이너, 프로젝트 관리자 및 기타 팀 구성원에게 비용을 지불해야 합니다.
- 귀하의 제품은 결코 완성되지 않습니다. 소프트웨어 프로젝트에는 항상 지속적인 개발이 필요합니다.
- 제품을 제공할 때 경쟁업체는 이미 새롭고 향상된 기능을 개발 중이므로 앞서 나가거나 최소한 따라잡을 수 있어야 합니다. 그렇지 않으면 사용자가 경쟁업체로 이동할 것입니다.
- 제품을 사용하기 시작하면 귀하와 귀하의 팀은 제품을 더욱 향상시키고 프로세스를 개선할 새로운 기능을 생각하게 될 것입니다.
- 지속적인 유지 관리. 사용자는 제품을 사용하면서 생각하지 못한 문제를 해결하는 방법을 발견하게 되며 이를 수정해야 합니다.
프로젝트 규모 | 초기비용 | 지속적인 비용 |
---|---|---|
소규모 프로젝트(개발 기간 2~6주) | $11250 | $563 - $1 125 (±10%) / 월 |
중형 프로젝트(개발 기간 2~4개월) | $33,750 | $1 563 - $3 375 (±10%) / 월 |
대규모 프로젝트(개발 기간이 6~18개월 이상) | $156250 | $3 375 - $15 625 (±10%) / 월 |
프로젝트 규모 | 초기비용 | 지속적인 비용 |
---|---|---|
소규모 프로젝트(개발 기간 1~3주) | $3,750 | $188 - $375 (±10%) / 월 |
중형 프로젝트(개발 기간 1~3개월) | $11250 | $375 - $1 125 (±10%) / 월 |
대규모 프로젝트(개발기간 2~6개월 이상) | $52084 | $1 125 - $5 208 (±10%) / 월 |
Flask-BDA를 사용하면 표준화된 개발 패턴과 검증된 기술을 사용하므로 "일반 개발"의 유연성을 전혀 잃지 않습니다 .
Flask-BDA는 다양한 오픈 소스 기술을 사용하고 기존 기술 스택을 활용하므로 동일한 기술을 사용하는 다른 개발자를 쉽게 찾을 수 있습니다. 결과적으로 회사의 매출 규모나 사업 위치에 관계없이 값비싼 라이센스 비용이나 환경 비용을 지불할 필요가 없습니다.
몇 분 안에 빠르고 쉽게 사전 구성된 개발 환경을 시작하세요.
복잡한 설정이 필요하지 않습니다. Python(3.8.6 권장)만 필요합니다.
구성 업데이트: 데이터베이스 연결 및 애플리케이션 설정.
다양한 데이터베이스를 사용할 수 있도록 자신만의 모듈과 데이터 구조(데이터 모델)를 생성하세요.
자동 생성된 완전한 기능:
Admin
및Mobile
페이지- Swagger 프런트엔드를 갖춘
REST APIs
- GraphiQL 프런트엔드가 포함된
GraphQL API
모듈별로 쉽게 관리됩니다.
특정 요구 사항에 맞게 페이지를 구성하고 팀 및 고객과 쉽게 공유하세요.
격리된 모듈에 사용자 정의 코드를 작성하여 다른 모듈에 영향을 주지 않으며,
다양한 프로젝트에 걸쳐 모듈을 쉽게 통합할 수 있습니다.
동일한 코드베이스를 사용하여 다음 위치에 배포합니다.
- 데스크탑
- 편물
- 이동하는
환경에는 다음이 포함됩니다.
- 도커
- AWS 서버리스
- 디지털 오션
- 헤로쿠
- 공유 호스팅.
pip
설치되어 있는지 확인하십시오(pip는 최신 버전의 Python과 함께 제공되므로 이미 설치되어 있어야 함). 그렇지 않은 경우 여기에서 설치하십시오: https://pip.pypa.io/en/stable/installing/python -m pip --version
참고: 이 문서에서는 모든 지침이
pip
로 작성되었으므로pip3
pip
로 실행한다고 가정합니다.pip
호출할 때pip3
실행하려면 터미널에서pip
에서pip3
에 대한 심볼릭 링크를 생성할 수 있습니다.
pip install --upgrade pip
실행하려면 관리자 권한으로 "cmd"를 실행해야 할 수도 있습니다.sudo
로 명령을 실행합니다(예: sudo pip install --upgrade pip
nano ~ /.bash_profile
파일에 다음을 붙여넣습니다.
alias pip= ' pip3 '
alias python= ' python3 '
참고: MacOS에서는 Python 2.7이 내 배포판에 사전 설치되어 있으므로 제거해야 할 수도 있습니다. 이는 이를 달성하는 데 매우 도움이 되었습니다.
sudo rm -rf /Library/Frameworks/Python.framework/Versions/2.7
sudo rm -rf " /Applications/Python 2.7 "
ls -l /usr/local/bin | grep ' ../Library/Frameworks/Python.framework/Versions/2.7 '
그런 다음 다음 명령을 실행하여 모든 링크를 제거하십시오.
cd /usr/local/bin/
ls -l /usr/local/bin | grep ' ../Library/Frameworks/Python.framework/Versions/2.7 ' | awk ' {print $9} ' | tr -d @ | xargs rm
Python과
pip
설치한 후에는 Flask-BDA 명령줄 기능이 올바르게 실행되도록 하려면 종속성을 설치해야 합니다.
pip install click
전역적으로 설치할 수 있는 기타 종속성(그러나 프로젝트를 생성할 때 자동으로 실행되어야 함)은 다음과 같습니다.
pip install virtualenv
pip install flaskwebgui
pip install pyinstaller
Flask-BDA를 사용하여 첫 번째 프로젝트 구축을 시작하려면 아래의 간단한 단계에 따라 사전 구성된 개발 환경을 만들고 몇 분 만에 실행하세요.
이 빠른 시작에서는
"My Awesome Project"
라는 프로젝트를 만듭니다. 그러나 원하는 대로 프로젝트를 호출할 수 있습니다.
create_project.py
Python 파일이 다운로드되어 실행되어 프로젝트를 시작할 수 있습니다."My Awesome Project"
. curl -L https://raw.githubusercontent.com/RyanJulyan/Flask-BDA/main/create_project_git.py --ssl-no-revok -o create_project_git.py
python create_project_git.py --project= " My Awesome Project "
create_project.py
Python 파일이 다운로드되어 실행되어 프로젝트를 시작할 수 있습니다."My Awesome Project"
. curl -L https://raw.githubusercontent.com/RyanJulyan/Flask-BDA/main/create_project_git.py --ssl-no-revok -o create_project_git.py
python create_project_git.py --project= " My Awesome Project "
참고: 유효한 프로젝트 이름을 입력하지 않은 경우 입력하라는 메시지가 표시됩니다.
- 메시지가 나타나면 프로젝트 이름을 입력하세요. 예:
- 오류를 방지하려면 프로젝트 이름 앞뒤에 따옴표를 넣으십시오(예:
"My Awesome Project"
.
Invalid Project Name !
Please enter a valid project name :
"My Awesome Project"
참고: "create_project_git.py" 파일과 동일한 경로에 폴더가 생성되는 것을 볼 수 있습니다. 이 폴더는 소문자이며 모든 특수 문자를 제거하고 공백을 밑줄로 대체합니다. 예:
my_awesome_project
참고: 개발 중에는 다른 브랜치나 저장소를 완전히 사용하고 싶을 수도 있습니다. 이는 테스트에 도움이 되거나 핵심 Flask-BDA 프로젝트에서 벗어난 경우에 도움이 될 수 있습니다.
- 새 프로젝트를 생성할 때
Owner
,Repo
및Branch
지정할 수 있습니다.
curl - L https : // raw . githubusercontent . com / RyanJulyan / Flask - BDA / RyanJulyan - Dev / create_project_git . py - - ssl - no - revok - o create_project_git . py
python create_project_git . py - - project = "My Awesome Project" - - owner = "RyanJulyan" - - repo = "Flask-BDA" - - branch = "RyanJulyan-Dev" - - create_venv = True
참고: 아직 모든 연결 유형에 대해 테스트 중입니다!
Flask-BDA에서는 데이터베이스 연결이 빠르고 쉽습니다. 하나 이상의 데이터베이스를 가질 수 있으며, 다양한 테넌트가 자체 데이터베이스 연결은 물론 자체 데이터베이스 유형(SQLite, MySQL, SQL Server, PostgreSQL)을 가질 수 있습니다.
기본적으로 Flask-BDA에는 SQLite 데이터베이스가 설정되어 있습니다. 이는 SQLite를 설정하고 실행하는 데 추가 인프라가 필요하지 않기 때문에 SQLite를 빠르고 쉽게 선택할 수 있기 때문입니다.
기본 데이터베이스를 변경하려면:
flaskbda
), 사용자( flaskbda_user
) 및 비밀번호( password
)를 생성합니다.config.py
파일을 엽니다.DATABASE_ENGINE
주석 처리하고 mysql DATABASE_ENGINE
에 주석을 추가합니다.DATABASE_NAME
주석 처리하고 mysql에 주석을 추가합니다.DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
주석 처리하고 mysql SQLALCHEMY_DATABASE_URI
에 주석을 추가합니다. ##########
# SQLite #
##########
# DATABASE_ENGINE = 'sqlite:///'
# DATABASE_NAME = os.path.join(BASE_DIR, 'databases/sqlite/default.db')
# SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_NAME
#########
# MySQL #
#########
DATABASE_ENGINE = 'mysql://'
DATABASE_HOST = ''
DATABASE_PORT = '1433'
DATABASE_USERNAME = ''
DATABASE_PASSWORD = ''
DATABASE_NAME = ''
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME
DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
DATABASE_USERNAME = 'flaskbda_user'
DATABASE_PASSWORD = 'password'
DATABASE_NAME = 'flaskbda'
기본 데이터베이스를 변경하려면:
flaskbda
), 사용자( flaskbda_user
) 및 비밀번호( password
)를 생성합니다.config.py
파일을 엽니다.import pyodbc
에 주석을 추가하세요.DATABASE_DRIVER
에 주석을 추가합니다.DATABASE_ENGINE
을 주석 처리하고, 예를 들어 SQLServer DATABASE_ENGINE
의 주석을 처리합니다.DATABASE_NAME
을 주석 처리하고 SQLServer에 주석을 추가합니다.DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
주석 처리하고 SQLServer SQLALCHEMY_DATABASE_URI
except
try
에서 주석을 처리합니다.참고:
SQLEXPRESS
실행 중이고 연결을 시도하는 경우. SQLServerSQLEXPRESS
변수의 주석 처리를 제거하십시오. 이는 올바른SQLALCHEMY_DATABASE_URI
생성하기 위한try
및except
에서 처리됩니다.
참고: Windows 인증을 원하는 경우. SQLServer
TRUSTED_CONNECTION
변수의 주석 처리를 제거하십시오. 이는 올바른SQLALCHEMY_DATABASE_URI
생성하기 위한try
및except
에서 처리됩니다.
##########
# SQLite #
##########
# DATABASE_ENGINE = 'sqlite:///'
# DATABASE_NAME = os.path.join(BASE_DIR, 'databases/sqlite/default.db')
# SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_NAME
#############
# SQLServer #
#############
import pyodbc # noqa: E402
DATABASE_ENGINE = 'mssql+pyodbc://'
# SQLEXPRESS = '\SQLEXPRESS' # for SQLEXPRESS
# TRUSTED_CONNECTION = 'yes' # for windows authentication.
DATABASE_DRIVER = 'SQL+Server+Native+Client+11.0' # for windows authentication.
DATABASE_HOST = ''
DATABASE_PORT = '1433'
DATABASE_USERNAME = ''
DATABASE_PASSWORD = ''
DATABASE_NAME = ''
try :
if SQLEXPRESS == ' \ SQLEXPRESS' :
try :
if TRUSTED_CONNECTION == 'yes' :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '?trusted_connection=' + TRUSTED_CONNECTION + '&driver=' + DATABASE_DRIVER
else :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
try :
if TRUSTED_CONNECTION == 'yes' :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME + '?trusted_connection=' + TRUSTED_CONNECTION + '&driver=' + DATABASE_DRIVER
else :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
DATABASE_HOST = 'MSSQLSERVER'
DATABASE_PORT = '1433'
DATABASE_USERNAME = 'flaskbda_user'
DATABASE_PASSWORD = 'password'
DATABASE_NAME = 'flaskbda'
MS-SQL 인스턴스에 원격 연결 권한이 설정되어 있고 참조가 활성화되어 있는지 확인하세요(여기)[https://knowledgebase.apexsql.com/configure-remote-access-connect-remote-sql-server-instance-apexsql-tools/ ]:
"SQL 서버 구성 관리" 설정이 올바르게 구성되었는지 확인하세요.
참고: 설치에는
Client Tools Connectivity
필요합니다. "SQL 서버 구성 관리"를 찾을 수 없는 경우Client Tools Connectivity
포함하도록 설치를 수정해야 할 수도 있습니다.
- ""를 찾을 수 없으면 "컴퓨터 관리 사용" 도구를 대신 사용해야 할 수도 있습니다. 그것에 액세스하려면.
- 이건 윈도우 10 문제인거 같네요
멀티테넌시는 단일 소프트웨어 인스턴스가 서버에서 실행되고 여러 테넌트(클라이언트)에 서비스를 제공하는 소프트웨어 아키텍처입니다. 멀티테넌트 소프트웨어를 사용하면 하나 또는 여러 애플리케이션의 여러 독립 인스턴스가 공유 환경에서 작동할 수 있습니다.
Flask-BDA는 완전히 분할된 다중 테넌시를 지원합니다. 수직 분할은 각 테넌트가 서로 다른 데이터베이스(및 데이터베이스 연결 문자열)를 갖는다는 것을 의미합니다.
기본적으로 Flask-BDA는
default
라는 테넌트에 연결됩니다. 이는 각 테넌트에 필요한 특정 연결 세부 정보가 있어야 하는SQLALCHEMY_BINDS
개체(config.py
에 있음)를 사용하여 수행됩니다. 기본 연결 세부 정보는SQLALCHEMY_DATABASE_URI
라는 문자열로 결합됩니다. 이는 빠르고 쉬운 단일 테넌트 설정을 허용하기 위한 것입니다.
이와 동일한 구조를 사용할 수 있지만 여러 테넌트를 보유하려면 이를
SQLALCHEMY_BINDS
개체에 빠르게 추가할 수 있습니다. 새 테넌트를 추가하려면 다음을 수행하세요.
SQLALCHEMY_BINDS
개체에 새 줄을 만듭니다. SQLALCHEMY_BINDS = {
"default" : SQLALCHEMY_DATABASE_URI ,
"client1" : 'sqlite:///databases/sqlite/client1.db' ,
}
이제 URL에
organization=
인수를 추가하여 격리된 테넌트 데이터베이스와 상호 작용할 수 있습니다. 예:example.com?organization=client1
여기서client1
은SQLALCHEMY_BINDS
개체에 추가한 이름입니다.
이는
app/_init_.py
에서@app.before_request
를 가로채고app/mod_tenancy/multi_tenant.py
에서db.choose_tenant(g.organization)
사용하여 db 엔진 바인딩을 변경하는 방식으로 작동합니다g.organization
URL 인수organization
가져와서 설정합니다. 이를 통해 데이터를 분리된 상태로 유지하면서 모든 테넌트의 데이터베이스에서 앱의 동일한 코드를 사용할 수 있습니다.
단일 기능으로 다양한 데이터베이스와 상호 작용해야 하는 경우가 있습니다(특히 시스템을 통합하거나 다양한 소스에서 데이터를 읽을 때).
기본적으로 모든 컨트롤러에는
MultiBindSQLAlchemy
가져옵니다.
# import multiple bindings
from app . mod_tenancy . multi_bind import MultiBindSQLAlchemy
가져오기 아래에는 단일 함수에서 다양한 데이터베이스에 대한 연결을 신속하게 구현하는 데 도움이 되는 주석 처리된 코드가 있습니다. 먼저 데이터베이스 바인딩을
SQLALCHEMY_BINDS
개체에 추가해야 합니다.SQLALCHEMY_BINDS
개체에 새 데이터베이스를 추가하는 방법을 더 잘 이해하려면 동일한 기능이 포함된 격리된 데이터베이스를 참조하세요.
그런 다음 db.<바인딩> 구조에 따라
db
개체에 연결된 새 개체를 만들 수 있습니다db.<binding>
예:db.first
여기서first
는 나머지 코드에서 바인딩을 참조하려는 이름입니다. 그런 다음 이 변수를MultiBindSQLAlchemy
에 할당할 수 있습니다(예:db.first = MultiBindSQLAlchemy('first')
.
이제 단일 함수(예: 원시 SQL 코드를 실행할 수 있는
db.first.execute(...)
에서 새 데이터베이스 바인딩과 기본 테넌트에 액세스할 수 있는 사용자 지정 코드를 호출할 수 있습니다.
db . first = MultiBindSQLAlchemy ( 'first' )
##################################################
## this will only work for the execute function ##
##################################################
db . first . execute (...)
**참고: ** 이는
execute
기능에 대해서만 작동합니다. 여기에서 찾을 수 있는 SQLAlchemy ORM을 계속 사용하는 몇 가지 고급 기술이 있습니다: SQLAlchemy 실행 튜토리얼
모듈은 독립형 구성 요소이므로 프로그램이 커짐에 따라 관리하기가 더 쉽습니다. Flask-BDA의 모듈은 논리와 뷰를 제어하기 위한 데이터 모델, 경로 및 관련 기능을 생성하는 데 도움이 됩니다.
새 CRUD 모듈을 생성하면
create_module_template
폴더의 모든 요소가 앱 디렉터리에 복사되고 모든xyz
값을 모듈 이름으로 바꾸고 아래 설명된 대로 추가 데이터 모델 정보를 추가하여 제공한 모듈 이름으로 이름이 변경됩니다.
<Path To>/<my_awesome_project>/create_module_json.py
파일을 열고 실행하세요.<Path To>/<my_awesome_project>/
는 생성한 프로젝트의 경로입니다. cd < Path To > / < my_awesome_project > /
python create_module_json . py - - module = Projects
Create new field Name (type the string : 'STOP_CREATING_FIELDS' to exit ): "name"
What datatype is name
Choose one of the following options
( 'String'
, 'Int'
, 'Float'
, 'Numeric'
, 'Text'
, 'Date'
, 'DateTime'
, 'Boolean'
, 'BigInt'
, 'Enum'
, 'JSON'
, 'LargeBinary' ): "String"
String Length ( 1 - 256 ): 256
Is name nullable ( 'True' , 'False' ): False
Is name unique ( 'True' , 'False' ): True
Does the name have a Relationship with another Data Model ? ( 'True' , 'False' ): False
Default value :
참고: "STOP_CREATING_FIELDS"라는 정확한 단어를 입력하고 제출할 때까지 계속 반복됩니다.
이를 통해 모듈에 대한 여러 필드를 빠르고 쉽게 만들 수 있습니다.
위 필드는 다양한 필드 유형이 상호 작용하고 여러 필드를 생성했음을 보여줍니다.
참고: 관계는 항상 제공된 모델의
id
에 따라 만들어집니다.필드에 ForeignKey가 생성될 뿐만 아니라 모델이 제공한
id
필드 간의 지연 관계도 생성됩니다.
Create new field Name (type the string : 'STOP_CREATING_FIELDS' to exit ): STOP_CREATING_FIELDS
Create module logic from Data Model ? ( 'True' , 'False' ): True
참고: "app/generated_config/models//models.json"의 JSON 파일에서 모듈을 생성할 수도 있습니다. 여기서 이 작업을 수행하기 위해 입력한 모듈의 이름은 다음과 같습니다. 파일을 열고 실행합니다
<Path To>/<my_awesome_project>/create_module.py
* 여기서<Path To>/<my_awesome_project>/
는 생성한 프로젝트의 경로입니다. * 지침을 입력하세요. 예:
cd < Path To > / < my_awesome_project > /
python create_module . py - - module = projects
그러면 아래 앱 변경 사항에 설명된 대로 필요한 파일과 폴더가 생성됩니다.
create_module_template
폴더의 파일과 폴더가Projects
모듈용으로 생성된 후app
폴더에 추가됩니다.이렇게 하면 스캐폴드된 관리 CRUD 보기, REST API(대량 삽입 및 업데이트 포함), GraphQL API, 공개 보기 및 논리가 생성되어 생성한 모듈과 즉시 상호 작용할 수 있습니다.
관리자 패널에서 새 모듈에 대한 생성, 읽기, 업데이트 및 삭제("CRUD") 작업을 수행할 수 있습니다.
공개 보기를 통해 게스트 사용자(로그인하지 않은 사용자)는 제공된 정보 보기를 볼 수 있습니다.
└── `my_awesome_project`
└── app
├── generated_config
│ └── models
│ └── `projects`
│ └── models.json
└── `mod_projects`
├── templates
│ ├── mobile
│ │ └── `projects`
│ │ ├── admin
│ │ │ ├── create.html
│ │ │ ├── edit.html
│ │ │ ├── index.html
│ │ │ └── show.html
│ │ └── public
│ │ └── public_list.html
│ └── `projects`
│ ├── admin
│ │ ├── create.html
│ │ ├── edit.html
│ │ ├── index.html
│ │ └── show.html
│ └── public
│ └── public_list.html
├── api_controllers.py
├── controllers.py
├── forms.py
├── models.py
└── types.py
새 모듈을 생성하면 새 시스템
Public
,Admin
,REST API
및GraphQL API
와 상호 작용하는 3가지 방법이 제공됩니다.
이에 액세스하려면 앱이 환경에서 실행되고 있어야 합니다.
Public
보기는 모듈에 제공된 데이터에 대한 인증되지 않은 보기입니다.
xyz
는 모듈 이름).../xyz/
public_list
Admin
보기는 모듈에서 제공되는 데이터의 인증된 보기입니다.
xyz
는 모듈 이름).../admin/xyz/
index
../admin/xyz/create
create
../admin/xyz/store
store
../admin/xyz/show/{id}
show
../admin/xyz/edit/{id}
edit
../admin/xyz/update/{id}
update
../admin/xyz/destroy/{id}
destroy
API
보기는 REST API 엔드포인트, 관련 문서 및 실행 플레이그라운드의 목록입니다.
Flask BDA는 SwaggerUI를 사용하여 REST API를 사용자/클라이언트에 제공합니다.
SwaggerUI를 사용하면 개발 팀이든 최종 소비자든 누구나 구현 논리를 마련하지 않고도 API 리소스를 시각화하고 상호 작용할 수 있습니다. 대신 OpenAPI(이전의 Swagger) 사양에서 자동으로 생성되며 시각적 문서를 통해 백엔드 구현과 클라이언트 측 소비가 쉬워집니다.
SwaggerUI에 액세스하려면:
<base_URL>/api/docs
URL을 삽입하여 SwaggerUI REST API에 액세스합니다(예: http://localhost:5000/api/docs
.SwaggerUI 없이 REST API에 액세스하려면:
<base_URL>/
URL을 삽입하세요.../api/xyz
XyzListResource
> get
../api/xyz
XyzListResource
> post
../api/xyz/{id}
XyzResource
> get
../api/xyz/{id}
XyzResource
> update
../api/xyz/{id}
XyzResource
> delete
../api/xyz/bulk
XyzBulkListResource
> post
../api/xyz/bulk
XyzBulkListResource
> update
../api/xyz/aggregate
XyzAggregateResource
> get
graphql
보기는 GraphiQL 보기, API 끝점, 관련 문서 및 실행 놀이터입니다.
Flask BDA는 graphene-python과 GraphiQL을 사용하여 GraphQL API를 사용자/클라이언트에게 제공함으로써 개발자의 삶을 더 쉽게 만들기 위한 간단하지만 확장 가능한 API를 제공합니다.
GraphQL은 REST 및 임시 웹 서비스 아키텍처에 대한 대안을 제공하는 데이터 쿼리 언어입니다.
GraphiQL에 액세스하려면:
<base_URL>/graphql
삽입하여 GraphiQL, GraphQL API에 액세스합니다(예: http://localhost:5000/graphql
.GraphiQL 없이 GraphQL API에 액세스하려면:
<base_URL>/
URL을 삽입하세요.../graphql
mod_graphql
> query
> Query
> all_xyz
../graphql
mod_graphql
> mutation
> Mutation
> createXyz
현재 Windows / Linux / Mac
에 대해 각각을 구성하는 방법에 대한 지침과 함께 7가지 기본 환경이 지원되며(향후 더 많은 환경이 지원될 예정) 원할 경우 동시에 실행할 수 있습니다.
로컬 애플리케이션을 생성하고 개발하기 위해 virtualenv를 사용하고 있습니다. 격리된 가상 Python 환경을 만들기 위한 도구입니다.
pip install --upgrade pip
실행하려면 관리자 권한으로 "cmd"를 실행해야 할 수도 있습니다.cd <Path To>/my_awesome_project
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
venv S cripts a ctivate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
set FLASK_APP=app
set FLASK_ENV=development
flask run --port 5000
pip install --upgrade pip
실행하려면 관리자 권한으로 "cmd"를 실행해야 할 수도 있습니다.sudo
로 명령을 실행합니다. 예: sudo pip install --upgrade pip
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
export FLASK_APP=app
export FLASK_ENV=development
flask run --port 5000
일부 공유 호스팅 서비스는 서버에서 Python 애플리케이션을 실행하는 기능을 제공합니다. 저는 개인적으로 A2hosting을 사용했습니다. 그들의 지원은 놀라웠고 기능에 대한 가격은 제가 본 것 중 최고 중 하나였습니다.
참고: 공유 호스팅 옵션은 A2로 제한되지 않습니다. 그러나 여기에서 Flask-BDA를 테스트하고 공유 호스팅 옵션을 업로드하고 실행한 경험이 있습니다. 귀하의 공유 호스팅 옵션이 유사한 기능 세트를 제공하는 경우 자유롭게 사용해 보십시오.
A2의 경우, 예를 들어 일부 구성이 필요할 수 있는 Python 애플리케이션을 실행하도록 서버를 설정해야 합니다.
사용자 정의 애플리케이션을 작동시키려면 다음을 수행하십시오.
참고:
Linux
환경에서는pyodbc
요구 사항이 기본적으로 작동하지 않습니다. 이 때문에 공유 환경에서는 작동을 위한 요구 사항을 추가할 권한이 없을 수 있습니다. 설치가 실패하지 않도록 하는 가장 쉬운 방법은 서버에서 이 요구 사항을 주석 처리하는 것입니다.
requirements.txt
파일을 열고 pyodbc
를 검색한 후 패키지 이름 앞에 공백과 함께 #
을 입력합니다. # pyodbc==4.0.30
requirements.txt
에서 환경 요구 사항(로컬 환경과 유사)을 설치합니다.SSH
창에서 이를 실행했는지 확인하세요. pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
Setup Python App
다시 클릭하세요.Application startup file
run_shared_server.py
로 변경합니다.컨테이너화된 애플리케이션을 생성하고 배포하기 위해 우리는 개발자와 개발팀이 앱을 구축하고 출시하는 데 도움이 되는 Docker를 사용하고 있습니다. 또한 Docker는 컨테이너화된 애플리케이션과 마이크로서비스를 구축하고 공유하는 데 사용됩니다.
참고: Github을 사용 중이고 docker가 설치되어 있는 경우(설치 방법에 대한 자세한 내용은 설명서 후반부 참조) Github에서
push
또는pull_request
를 수행할 때마다 새 이미지가 빌드됩니다. 이는docker-image.yml
파일에 설정되어 있습니다.docker-image.yml
그러나 이 작업을 수동으로 수행하려면 아래 단계를 따르십시오.
cd < Path To > /my_awesome_project
docker build -t flask_app:latest .
docker run -p 5000:5000 flask_app
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl start docker
cd < Path To > /my_awesome_project
docker build -t flask_app:latest .
docker run -it -p 5000:5000 flask_app
참고: 아직 개발 중입니다.
서버리스 애플리케이션을 생성하고 배포하기 위해 우리는 원활한 서버리스 개발을 가능하게 하는 서버리스 프레임워크를 사용하여 저렴한 비용의 차세대 클라우드 인프라에서 자동 확장되는 앱을 쉽게 구축할 수 있도록 합니다.
서버리스 프레임워크는 AWS, Azure, Google Cloud, Knative 등에 대한 간편한 YAML + CLI 개발 및 배포를 제공하는 오픈 소스 도구입니다.
참고: 서버리스는 함수가 상태를 유지하지 않기 때문에 "SQLite"를 지원하지 않으므로 del=polying 전에 기본 데이터베이스 문자열을 조정해야 할 수도 있습니다.
데이터베이스 문자열을 업데이트하려면 [구성]을 참조하세요.
npm update -g serverless
npm update -g serverless
choco install serverless
참고: 패키지가 설치되지 않으면 관리자로 명령을 실행해야 할 수도 있습니다.
"Windows 키"를 누르고 "cmd"를 입력한 후 "명령 프롬프트"라는 단어를 "마우스 오른쪽 버튼으로 클릭"하고 "관리자 권한으로 실행" 옵션을 선택한 다음 이전 단계를 다시 수행하세요.
serverless
cd < Path To > /my_awesome_project
sls plugin install -n serverless-python-requirements
sls plugin install -n serverless-wsgi
serverless deploy
curl -o- -L https://slss.io/install | bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl start docker
cd < Path To > /my_awesome_project
sls plugin install -n serverless-python-requirements
sls plugin install -n serverless-wsgi
serverless deploy
참고: 아직 개발 중입니다.
Digital Ocean은 서비스형 플랫폼(PaaS)입니다. DigitalOcean의 완전한 클라우드 플랫폼에서 애플리케이션을 개발, 관리 및 확장하세요. Digital Ocean은 간단하고 예측 가능한 가격을 제공합니다. 클라우드에서 확장 가능한 컴퓨팅 제품, 완전 관리형 데이터베이스, 고가용성 및 확장 가능한 스토리지 옵션 등을 사용하여 자신 있게 구축하고 출시하세요. 애플리케이션과 데이터베이스를 호스팅하고 확장하도록 조정된 충분한 양의 메모리를 갖춘 가상 머신을 통해 Digital Ocean은 복잡한 문제에 대한 간단한 솔루션을 제공합니다.
터미널에서 Heroku에 애플리케이션을 생성하고 배포하려면 다음을 수행해야 합니다.
138.197.67.25
참고 SSH를 통해 연결하지 않은 경우 Digital Ocean 계정을 등록한 이메일을 통해
password
받아야 합니다.
cd < Path To > / < my_awesome_project > /
scp -r < my_awesome_project > root@ < ip_address > :/
ssh root@ < ip_address >
여기서
<Path To>/<my_awesome_project>/
는 생성한 프로젝트의 경로이고<ip_address>
는 <ip_address> 드롭릿입니다(예:138.197.67.25
).
참고: 원격 서버로부터의 액세스 허용과 같이 SSH에서 표시되는 프롬프트를 따르십시오.
로그인하면 다음과 같은 터미널을 볼 수 있습니다.
root@ < droplet_name > :
cd < Path To > / < my_awesome_project > /
chmod +x setup.sh
bash setup.sh
virtualenv venv
source venv/bin/activate
sudo pip install --upgrade pip
sudo pip install --no-cache-dir -r requirements.txt
sudo pip install uwsgi
sudo ufw allow 5000
export FLASK_APP=app
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
여기서
5000
포트 번호입니다
그리고<droplet_name>
은 이름입니다
cd < Path To > / < my_awesome_project > /
scp -r < my_awesome_project > root@ < ip_address > :/
ssh root@ < ip_address >
여기서
<Path To>/<my_awesome_project>/
는 당신이 만든 프로젝트의 경로이며<ip_address>
는 <ip_address> 예를 들어 :138.197.67.25
입니다.
참고 : 원격 서버에서 액세스 할 수있는 것과 같은 SSH가 미용하는 프롬프트를 따르십시오.
로그인하면 다음과 함께 터미널을 볼 수 있어야합니다.
root@ < droplet_name > :
cd < Path To > / < my_awesome_project > /
chmod +x setup.sh
bash setup.sh
virtualenv venv
source venv/bin/activate
sudo pip install --upgrade pip
sudo pip install --no-cache-dir -r requirements.txt
sudo pip install uwsgi
sudo ufw allow 5000
export FLASK_APP=app
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
여기서
5000
포트 번호입니다
그리고<droplet_name>
은 이름입니다
참고 : 아직 개발 중입니다
Heroku는 서비스 (PAA)로서의 플랫폼입니다. Heroku를 사용하면 잠금 장치를 사용하지 않고 지불 할 때 지불 할 수 있습니다. 개발자, 팀 및 모든 규모의 비즈니스는 Heroku를 사용하여 앱을 배포, 관리 및 스케일링 할 수 있습니다. 간단한 프로토 타입이나 비즈니스 크리티컬 제품을 구축하든 Heroku의 완전 관리 플랫폼은 앱을 신속하게 제공하는 간단한 경로를 제공합니다.
터미널에서 Heroku에 응용 프로그램을 생성하고 배포하려면 Heroku CLI를 다운로드하여 설치해야합니다. 설치를 확인하려면 터미널에서 Heroku 버전을 확인할 수 있습니다.
heroku --version
참고 : Heroku는 파일에서 데이터가 손실 될 수 있으므로 Heroku가 SQLITE 사용을 제안하지 않으므로 데이터베이스 연결을 변경했는지 확인하십시오. Heroku는 무료 Postgres 데이터베이스를 제공합니다. 다른 계획에 한계가 있으므로 그들의 계획을보고 올바른 계획을 선택하십시오.
cd < Path To > /my_awesome_project
heroku login
<my_awesome_project-flask-bda-app>
, 여기서 <my_awesome_project-flask-bda-app>
은 프로젝트를 제공 한 이름입니다.heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
에 배포됩니다. cd < Path To > /my_awesome_project
sudo snap install --classic heroku
heroku login
<my_awesome_project-flask-bda-app>
, 여기서 <my_awesome_project-flask-bda-app>
은 프로젝트를 제공 한 이름입니다.heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
에 배포됩니다. cd < Path To > /my_awesome_project
brew tap heroku/brew && brew install heroku
heroku login
<my_awesome_project-flask-bda-app>
, 여기서 <my_awesome_project-flask-bda-app>
은 프로젝트를 제공 한 이름입니다.heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
에 배포됩니다. 기본 모바일 앱의 경우 React-Native를 사용하고 있습니다. 특히, 우리는 엑스포를 프레임 워크 및 범용 반응 응용 프로그램을위한 플랫폼으로 사용합니다. 동일한 JavaScript/TypeScript Codebase에서 iOS, Android 및 웹 앱을 개발, 구축, 배포 및 신속하게 반복하는 데 도움이되는 React Native 및 Native 플랫폼을 중심으로 구축 된 일련의 도구 및 서비스입니다.
우리는 사전 세트 푸시 알림을 가지고 있으므로 필요하지 않습니다. 이것은 당신이 시작하고 달리기가 더 빠르고 쉽다는 것을 의미합니다. 또한 단순화 된 구현 및 접근 방식을 허용하는 기본 Expo-Notifications 패키지를 활용하고 있습니다.
장점으로는 더 빠른 빌드 및 테스트 워크 플로/프로세스, Over the Air (Over the Air) 업데이트와 함께 개발 중 저축시 보이는 변경 사항으로 개발 중 원격 테스트, 원격 테스트가 포함됩니다.
그러나 Expo가 이것을 알고있는 몇 가지 단점과 한계가 있으며이를 잘 설명합니다. 사전 구축 된 방법을 사용하기 전에 이러한 제한 사항을 검토하는 것이 좋습니다.
모든 사용자의 장치에서 기본적으로 실행되는 하나의 프로젝트를 구축하십시오.
cd < Path To > /my_awesome_project_mobile_app
npm install -g expo-cli
npm install
cd < Path To > /my_awesome_project_mobile_app
npm install -g expo-cli
npm install
Flask BDA는 웹 사이트를 호스팅 해야하는 위치를 지시하지 않기 때문에 모바일 앱을 어디로 가야하는지 알려야합니다.
QuickStart 예제에서는
"My Awesome Project"
라는 프로젝트를 만들었습니다. 그러나 프로젝트를 다른 것을 불렀을 수도 있습니다. 이로 인해 이름이 모두 소문자가되어 모든 특수 문자를 제거하고 공백을 밑줄로 바꾸는 폴더를 만들었을 것my_awesome_project
.
모바일의 경우 폴더의 접두사가 프로젝트 이름 (예 :
my_awesome_project_mobile_app
) 인 별도의"_mobile_app"
폴더를 자동으로 작성했습니다. 이는Serverless
Configurationpackage.json
의 문제를 방지하고 웹 서버에 모바일 앱의 모든 코드를 배포하지 못하게합니다.
아직 개발 중이거나 호스팅을위한 서비스 제공 업체를 선택하지 않은 경우 NGROK를 사용하여 현지 환경에 터널을 터뜨리는 임시 대중 개발 URL을 만들 수 있습니다. NGROK는 NATS 및 방화벽 뒤의 로컬 서버를 안전한 터널을 통해 공개 인터넷에 노출시킵니다. 이를 통해 공개 URL에서 웹 사이트를 데모하고 배포하지 않고 로컬에서 실행중인 백엔드에 연결된 모바일 앱을 테스트 할 수 있습니다.
로컬 환경 지침에 따라 로컬 개발 서버를 시작하십시오.
전에 NGROK에 등록하지 않은 경우 :
이미 등록되었지만 설치되지 않은 경우 :
Ngrok 터미널이 열리면 로컬 서버에서 Ngrok까지 터널을 만듭니다.
5000
에서 포트 번호를 변경 한 경우 http
후 숫자를 교체하여 올바른 터널을 만들 수 있습니다. ngrok http 5000
ngrok by @inconshreveable
(Ctrl+C to quit)
Session Status online
Session Expires 1 hour, 59 minutes
Version 2.3.40
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://573d4ec93267.ngrok.io - > http://localhost:5000
Forwarding https://573d4ec93267.ngrok.io - > http://localhost:5000
Connections
ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
참고 : 무료 버전은이 서버를 2 시간 동안 만 생생하게 유지하므로 향후이 프로세스를 따라야 할 수도 있고이 URL을 "Repo"로 푸시하면 다음 사람에게는 작동하지 않을 수 있습니다.
my_awesome_project_mobile_app
를 엽니 다app.json
파일을 선택하고 라인 2 " https://github.com/RyanJulyan/Flask-BDA
"server_base_url": "https://github.com/RyanJulyan/Flask-BDA"
서버 이름.expo
앱을 설치하십시오.iOS
이동 : https://apps.apple.com/app/apple-store/id982107779Android
이동 : https://play.google.com/store/apps/details?id=host.exp.exponent휴대 전화에 앱을 설치 한 후에는 로컬 컴퓨터에서 개발 서버를 시작할 수 있습니다.
cd < Path To > /my_awesome_project_mobile_app
expo start
cd < Path To > /my_awesome_project_mobile_app
expo start
QR 코드가있는 웹 페이지가 열립니다. 이렇게하면 Android에있는 경우 Expo 앱을 사용할 수 있거나 iOS에있는 경우 카메라를 사용하여 코드를 스캔하고 개발 서버에서 직접 앱을 열 수 있습니다.
참고 : 네트워크에없는 사람들이 앱을 원격으로 스캔하고 테스트 할 수 있도록하려면 QR 코드 위의
tunnel
탭 버튼을 누릅니다.
권장 사항의 일부는 이미지가 최적화되도록하는 것입니다. 이 엑스포를 수행하려면 이미지 최적화에 도움이 될 수있는 엑스포 최적화 패키지를 권장했습니다. 또한 이미지를 최적화하면 기본 앱 TTI (또는 상호 작용 시간)를 향상시킬 수 있으며, 이는 스플래시 화면에서의 시간이 줄어들고 네트워크 연결이 열악한 경우 더 빠르게 전달됩니다.
cd < Path To > /my_awesome_project_mobile_app
npm install -g sharp-cli
npx expo-optimize --quality 0.9
cd < Path To > /my_awesome_project_mobile_app
npm install -g sharp-cli
npx expo-optimize --quality 0.9
데스크탑 응용 프로그램을 만들고 개발하기 위해 FlaskWebGui를 사용하고 있습니다. 크롬 래퍼에서 플라스크 웹 애플리케이션을 작성하고 실행하는 도구. 데스크탑 응용 프로그램을 배포하기 위해 Pyinstaller를 사용하고 있습니다. Pyinstaller는 (패키지) 파이썬 응용 프로그램을 Windows, GNU/Linux, Mac OS X, FreeBSD, Solaris 및 AIX에서 독립형 실행 파이브로 연결합니다.
각 배포는 실행하려는 특정 플랫폼에서 생성되어야합니다. 우리는 각 플랫폼의
build
및dist
폴더를 부모 폴더에 배치하여 이러한 배포를 관리 할 수있는 스크립트를 만들었습니다. 이 폴더는desktop_
와 플랫폼으로 접두사가 제공됩니다. 이는 특정 플랫폼의 배포 및 빌드 프로세스를 관리하고 다른 플랫폼을 구축 할 때 덮어 쓰지 않도록 순전히 수행됩니다.
데스크탑으로의 내보내기가 올바르게 작동하도록하려면 일부 코드 변경이 필요합니다. 기본적으로 Flask-BDA는 웹 및 모바일 개발을위한 것이며 사이트에서 속도 제한자를 구현했습니다. 불행히도 서버가 제한을 평가하려면 시스템을 데스크탑 애플리케이션으로 내보내기 때문에 서버를 실행하지 않습니다.
따라서 리미터에 대한 모든 참조를 제거해야합니다. 이들은
app/__init__.py
에서 찾을 수 있습니다. 이렇게하려면 텍스트 편집기에서 파일을 열고 다음 줄에 주석하십시오.
# from flask_limiter import Limiter
# from flask_limiter.util import get_remote_address
# limiter = Limiter(
# app,
# key_func=get_remote_address,
# default_limits=app.config['DEFAULT_LIMITS']
# )
참고 : 사용자 정의 리미터를 추가 한 경우 컨트롤러에서 찾을 수있는
@limiter.limit
검색하십시오. 귀하는 모든 참조 및 가져 오기 참조 (예 :from app import limiter
를 언급해야합니다.
이를 통해 응용 프로그램을 오류없이 데스크탑 실행 파일로 내보낼 수 있습니다.
pip install --upgrade pip
실행하려면 "CMD"를 관리자로 실행해야 할 수도 있습니다.cd <Path To>/my_awesome_project
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
venv S cripts a ctivate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_windows.py
pip install --upgrade pip
실행하려면 "CMD"를 관리자로 실행해야 할 수도 있습니다.sudo
EG : sudo pip install --upgrade pip
로 명령을 실행합니다. cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_lunix.py
pip install --upgrade pip
실행하려면 "CMD"를 관리자로 실행해야 할 수도 있습니다.sudo
EG : sudo pip install --upgrade pip
로 명령을 실행합니다. cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_mac.py
이것은 일반적인 데스크탑 응용 프로그램처럼 실행되는 최대화 된 창이 열립니다. 로컬로 설치된 크롬 브라우저를 사용하여 컨텐츠를 제공합니다.
기본적 으로이 응용 프로그램은 포트
7000
에서 제공됩니다. 그러나 기존 응용 프로그램과 충돌하는 경우run_desktop.py
파일에서 포트를 편집 할 수 있습니다.
프로젝트에 추가 Python 패키지를 포함하는 경우 터미널에서
pip freeze
실행하여 배포에 대한 올바른 패키지를 얻는 것을 잊지 마십시오.
pip freeze > requirements.txt
참고 : 전 세계가 아닌 가상 환경에서 추가 Python 패키지를 설치하고 동결하는 것이 좋습니다. 이렇게하면
requirements.txt
작고 특정 프로젝트에서 사용중인 패키지로 제한됩니다.
Flask BDA는 기본적으로 Swaggerui를 사용하여 API를 사용자/클라이언트에게 지원하고 제시합니다.
Swaggerui는 개발 팀 또는 최종 소비자 등 모든 사람이 구현 논리를 갖지 않고 API의 리소스를 시각화하고 상호 작용할 수 있도록합니다. 대신 OpenAPI (이전의 Swagger라고도 함) 사양에서 자동으로 생성되며 시각적 문서와 함께 백엔드 구현 및 클라이언트 측 소비가 쉽습니다.
Swaggerui에 액세스하려면 :
<base_URL>/api/docs
삽입하여 Swaggerui API에 액세스하십시오 (예 : http://localhost:5000/api/docs
많은 개발자들은 Swaggerui보다 우체부를 선호하여 API를 코드와 테스트하고 통합 할 것입니다. 우리는 우체부에게 직접 수집 내보내기를 제공함으로써 도움을 받았습니다.
우체부에서 컬렉션을 가져 오려면 :
Import...
(Ctrl+O)Link
선택하십시오<base_URL>/api/postman
EG를 삽입하십시오 : http://localhost:5000/api/postman
<base_URL>/aswagger.json
EG : http://localhost:5000/swagger.json
사용하고 우편 번호로 직접 가져옵니다.https://learning.postman.com/docs/getting-started/importing-and-exporting-data/#converting-postman-collections-from-v1-to-v2
. https://learning.postman.com/docs/getting-started/importing-and-exporting-data/#converting-postman-collections-from-v1-to-v2
npm install -g postman-collection-transformer
postman-collection-transformer convert -i <path to the input Postman collection file> -o <path to the downloaded Postman file> -j 1.0.0 -p 2.0.0 -P
<path to the input Postman collection file>
및 <path to the downloaded Postman file>
로컬 컴퓨터의 물리적 파일 경로입니다.Continue
누르십시오Import
검토하고 클릭하십시오이렇게하면 왼쪽에서 폴더로 사용할 수있는 우편 컬렉션을 가져옵니다 (생성 된 각 엔드 포인트의 하위 폴더 포함).
Postman을 사용하여 다양한 라 누이지 및 프레임 워크에 대한 코드를 생성 할 수 있습니다. 이러한 언어에는 다음이 포함되지만 이에 국한되지 않습니다.
새로 만든 API를 기존 프로젝트와 통합 할 수 있습니다.
때로는 외부 요청을해야합니다 (예 : 외부 API). AJAX 요청을 사용하여 이에 접근 할 수 있지만 때로는 통화 변환을 자동으로 업데이트하려는 경우 서버 측에서 이러한 요청을해야합니다. 서버를 통해 외부 API에 액세스하려면 웹 페이지에 적극적으로있는 사용자에게 명령을 보내고 싶지 않습니다. 대신 서버 가이 주석을 활성화 할 수 있기를 원합니다. 이를 달성하기 위해 요청 모듈을 사용합니다.
import requests
requests . methodname ( params )
import requests
params = { "model" : "Mustang" }
x = requests . get ( 'https://w3schools.com/python/demopage.php' , params = params )
print ( x . status_code )
print ( x . text )
import requests
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . post ( 'https://w3schools.com/python/demopage.php' , data = data , headers = headers )
print ( x . status_code )
print ( x . text )
import requests
import json
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . post ( 'https://w3schools.com/python/demopage.php' , json = data , headers = headers )
print ( x . status_code )
print ( x . text )
# use this to load JSON returned as a python dictionary
return_data = json . loads ( x . text )
import requests
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . put ( 'https://w3schools.com/python/demopage.php' , data = data , headers = headers )
print ( x . status_code )
print ( x . text )
import requests
import json
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . put ( 'https://w3schools.com/python/demopage.php' , json = data , headers = headers )
print ( x . status_code )
print ( x . text )
# use this to load JSON returned as a python dictionary
return_data = json . loads ( x . text )
import requests
x = requests . delete ( 'https://w3schools.com/python/demopage.php' )
print ( x . status_code )
print ( x . text )
AJAX는 XML/JSON을 사용하여 내부 또는 외부 시스템에서 데이터 및/또는 응답 데이터를 요청하는 JavaScript의 (브라우저-클리어)가 작성한 HTTP 요청입니다. ajax 요청은 기본적으로 </> htmx를 사용하여 이루어집니다.
HTMX는 속성을 사용하여 HTML에서 AJAX, CSS Transitions, Websockets 및 Server Sent 이벤트에 직접 액세스 할 수있는 종속성이없는 라이브러리입니다. HTMX 사용 방법에 대한 자세한 내용은 문서를 참조하고 기능에 대한 전체 참조를 참조하십시오. https://htmx.org/reference/를 참조하십시오.
HTMX를 사용하여 활성 검색과 같은 많은 일반적인 UX 패턴을 구현할 수 있습니다.
< input type =" text " name =" q "
hx-get =" /trigger_delay "
hx-trigger =" keyup changed delay:500ms "
hx-target =" #search-results "
placeholder =" Search... " />
< div id =" search-results " > </ div >
이 입력은 입력이 변경된 후 키 업 이벤트 후 /trigger_delay
500 밀리 초에 대한 요청을 발행하고 ID 검색 결과로 결과를 div에 삽입합니다.
대칭 암호화의 장점에도 불구하고,이 방법에는 무단 개인이 메시지의 비밀 키에 액세스 할 수있는 결함이 있습니다.
메시지의 비밀 키에 대한 무단 액세스를 방지하는 가장 효과적인 방법 중 하나는 Diffie-Hellman 알고리즘과 같은 편도 기능을 구현하는 것입니다. 이 메소드를 사용하면 발신자와 수신기가 메시지를 해독 할 수 있습니다.
일원 함수는 일반적으로 수신 된 모든 입력에 대한 출력을 계산할 수있는 알고리즘 유형을 사용하여 구현됩니다. 그러나이 방법은 임의의 키에서 정확한 결과를 도출하는 데 가능하지 않습니다.
테스트는 프로젝트가 성공적으로 실행되도록하는 데 중요한 부분입니다.
플라스크 BDA에는 제공되는 테스트의 세 가지 측면이 있습니다.
참고 : Python
unittest
수동으로 실행하려면 로컬 환경을 설치했는지 확인하십시오.
cd < Path To > /my_awesome_project
venv S cripts a ctivate
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=11 --max-line-length=127 --statistics
cd < Path To > /my_awesome_project
source venv/bin/activate
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
참고 : Python
unittest
수동으로 실행하려면 로컬 환경을 설치했는지 확인하십시오.
cd < Path To > /my_awesome_project
venv S cripts a ctivate
python -m unittest discover
cd < Path To > /my_awesome_project
venv/bin/activate
python -m unittest discover
단일 파일 실행 및 설정
Project Flask Project는 프로젝트 폴더 구조를 구축합니다.
992px
미만의 태블릿을 중심으로합니다500px
미만으로 모바일을 중심으로합니다@mobile_template
데코레이터를 사용하므로 필요한 경우 더 나은 모바일 경험을 위해 템플릿 뷰를 조정할 수 있습니다.{% if request.MOBILE %}True{% else %}False{% endif %}
로 추가 할 수 있습니다.config.py
config.py
통해 내장 및 액세스 할 수있는 디버깅 create_module.py
파일에서 Flask Project 구조에 맞는 사용자 정의 모듈 파일 및 폴더를 작성하여 다음을 작성하십시오.
public_list
index
create
store
show
edit
update
destroy
get
post
get
update
delete
event listeners
의 변경 before
에 사전 구성된 after
:Insert
Update
Delete
public_list
index
create
store
show
edit
update
넣으십시오destroy
get
받으십시오post
get
받으십시오update
넣습니다delete
post
update
넣으십시오get
public_list.html
(목록 요소)index.html
(목록 요소)create.html
(단일 요소 양식)show.html
(단일 요소)edit.html
(단일 요소 양식)api/docs
(URL)브라우저 지원 (마지막 1 주요 버전이 죽지 않음)
└── `project_name`
├── .github
│ └── workflows
│ ├── docker-image.yml
│ └── run_tests.yml
├── app
│ ├── generated_config
│ │ ├── model_editor
│ │ └── models
│ │ ├── hierarchies
│ │ │ └── models.json
│ │ └── organisations
│ │ └── models.json
│ ├── mod_audit
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ └── models.py
│ ├── mod_users
│ │ ├── templates
│ │ │ ├── mobile
│ │ │ │ └── auth
│ │ │ │ ├── admin
│ │ │ │ │ ├── create.html
│ │ │ │ │ ├── edit.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── show.html
│ │ │ │ └── public
│ │ │ │ └── public_list.html
│ │ │ ├── email
│ │ │ │ ├── activate.html
│ │ │ │ └── reset.html
│ │ │ └── users
│ │ │ ├── admin
│ │ │ │ ├── create.html
│ │ │ │ ├── edit.html
│ │ │ │ ├── index.html
│ │ │ │ └── show.html
│ │ │ └── public
│ │ │ └── public_list.html
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ ├── forms.py
│ │ └── models.py
│ ├── mod_email
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ └── models.py
│ ├── mod_file_upload
│ │ ├── templates
│ │ │ └── file_upload
│ │ │ └── upload.html
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ ├── forms.py
│ │ └── models.py
│ ├── static
│ │ ├── css
│ │ ├── images
│ │ ├── js
│ │ ├── manifest.json
│ │ └── sw.js
│ ├── templates
│ │ ├── admin
│ │ │ └── index.html
│ │ ├── email
│ │ │ └── auth
│ │ │ ├── activate.html
│ │ │ └── reset.html
│ │ ├── mobile
│ │ ├── public
│ │ │ └── index.html
│ │ ├── 403.html
│ │ ├── 404.html
│ │ └── index.html
│ └── __init__.py
├── create_module_template
│ ├── generated_config
│ │ └── models
│ │ └── xyz
│ │ └── models.json
│ └── mod_xyz
│ ├── templates
│ │ ├── mobile
│ │ │ └── xyz
│ │ │ ├── admin
│ │ │ │ ├── create.html
│ │ │ │ ├── edit.html
│ │ │ │ ├── index.html
│ │ │ │ └── show.html
│ │ │ └── public
│ │ │ └── public_list.html
│ │ └── xyz
│ │ ├── admin
│ │ │ ├── create.html
│ │ │ ├── edit.html
│ │ │ ├── index.html
│ │ │ └── show.html
│ │ └── public
│ │ └── public_list.html
│ ├── api_controllers.py
│ ├── controllers.py
│ ├── forms.py
│ └── models.py
├── databases
│ └── sqlite
│ ├── core.db
│ └── default.db
├── .dockerignore
├── .gitignore
├── config.py
├── create_all_models_json.py
├── create_desktop_installer_lunix.py
├── create_desktop_installer_mac.py
├── create_desktop_installer_windows.py
├── create_module.py
├── create_module_json.py
├── Dockerfile
├── FLASK-BDA LICENSE
├── LICENSE
├── package.json
├── package-lock.json
├── Procfile
├── README.md
├── requirements.txt
├── run.py
├── run_desktop.py
├── run_shared_server.py
└── serverless.yml
모듈은 프로그램의 일부입니다. 프로그램은 결합 될 때 프로그램을 만드는 하나 이상의 독립적으로 개발 된 모듈로 구성됩니다.
모듈은 자체 포함 된 구성 요소이므로 프로그램이 커짐에 따라 쉽게 관리 할 수 있습니다.
Flask-BDA의 모듈은 생성에 도움이됩니다 : 데이터 모델, 경로 및 로직 및 뷰 제어를위한 관련 기능
컨트롤러는 관련 요청 처리 로직을 단일 클래스로 그룹화 할 수 있습니다. 예를 들어, USERCONTROLLER 클래스는 사용자와 관련된 모든 수신 요청을 사용자 표시, 작성, 업데이트 및 삭제하는 것을 포함하여 모든 수신 요청을 처리 할 수 있습니다.
작성, 읽기, 업데이트 및 삭제 ( "Crud")
Linting은 프로그래밍 및 스타일 오류에 대한 소스 코드를 자동으로 확인하는 것입니다. 보풀 도구 (그렇지 않으면 Linter라고도 함)를 사용하여 수행됩니다. 보풀 도구는 기본 정적 코드 분석기입니다.
Lint 또는 Linter는 프로그래밍 오류, 버그, 문체 오류 및 의심스러운 구성을 플래그하는 데 사용되는 정적 코드 분석 도구입니다.
컴퓨터 프로그래밍에서 단위 테스트는 소스 테스트 방법으로, 소스 코드의 개별 단위 (하나 이상의 컴퓨터 프로그램 모듈이 관련 제어 데이터, 사용 절차 및 운영 절차와 함께 사용하기에 적합한 지 확인하기 위해 테스트됩니다. .
로우 코드 개발 플랫폼은 기존의 손으로 코딩 된 컴퓨터 프로그래밍 대신 프로그래밍 또는 그래픽 사용자 인터페이스 및 구성을 통해 애플리케이션 소프트웨어를 만들 수있는 개발 환경을 제공합니다.
이 프로젝트에 한 가지 또는 전부에서 프로젝트에 기여하면 기뻐할 것입니다.
Python 3에 대한 라이센스 정보보기 (https://docs.python.org/3.8/license.html) 및 기타 법적 계약 (https://www.python.org/about/legal/)
Docker의 라이센스 정보를보십시오. (https://www.docker.com/legal/components-licenses) 및 기타 법적 계약 (https://www.docker.com/legal)
모든 Docker 이미지와 마찬가지로, 여기에는 기본 소프트웨어의 직접 또는 간접 종속성과 함께 다른 라이센스 (예 : Bash 등)에 따라 다른 소프트웨어가 포함되어있을 수 있습니다.
자동 탐지 될 수있는 일부 추가 라이센스 정보는 Repo-Info 리포지토리의 Python/ Directory에서 찾을 수 있습니다.
사전 구축 된 이미지 사용법의 경우 이미지 사용자의 책임은이 이미지의 사용이 포함 된 모든 소프트웨어의 관련 라이센스를 준수하는지 확인하는 것입니다.
서버리스 프레임 워크 및 기타 법적 계약에 대한 라이센스 정보를 봅니다 (https://app.serverless.com/legal/terms).
허용 가능한 사용 정책을 준수하는 것은 사용자의 책임입니다 (https://app.serverless.com/legal/aup)
박람회 프레임 워크 및 기타 법적 계약에 대한 라이센스 정보를 봅니다 (https://github.com/expo/expo/blob/master/license).
Flask-BDA는 개발자 친화적 인 Flask-BDA 라이센스에 따라 생성 및 배포됩니다. Flask-BDA 라이센스는 인기있는 Apache 2.0 라이센스에서 파생됩니다.
FLASK-BDA 라이센스는 귀하 또는 귀하의 회사가 Flask-BDA 및 파생 상품 작업을 사용하고 배포하는 법적 요구 사항입니다. 귀하의 신청서 또는 프로젝트에는 다른 라이센스가있을 수 있지만 여전히 원래 라이센스를 준수해야합니다.
라이센스 및 저작권 통지 포함
FLASK-BDA 라이센스는 FLASK-BDA의 모든 사본과 FLASK-BDA를 사용하여 생성 된 파생 작업에 라이센스 및 저작권 통지를 포함해야합니다. 라이센스와 통지를 분배하는 방법을 결정하는 것은 귀하에게 달려 있습니다. 다음은이 작업을 수행 할 수있는 방법에 대한 몇 가지 예입니다.
Copyright 2021 Flask-Bda, Ryan Jaurnanan은 Flask-BDA 라이센스 버전 0.1 ( "라이센스")에 따라 라이센스가 부여되었습니다. 라이센스 준수를 제외하고는 Flask-BDA
사용할 수 없습니다. 귀하는 라이센스 사본을 https://github.com/RyanJulyan/Flask-BDA/blob/main/LICENSE
에서 해당 법률에 의해 요구하거나 서면으로 동의하지 않는 한, 라이센스에 따라 배포 된 소프트웨어가 "기준, 어떤 종류의 보증이나 조건없이, 명시 적 또는 묵시적. 라이선스에 따른 허가 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요.