หมายเหตุ: ยังอยู่ระหว่างการพัฒนา!
เวอร์ชันปัจจุบัน: 0.0.0
เบต้า
Flask-BDA ยังอยู่ระหว่างการพัฒนาเบื้องต้นและกำลังทดสอบกับเวอร์ชัน Python 3.8.6
แผนงานปัจจุบันและแผนโครงการระดับสูง: https://trello.com/b/uu4HNPBh/flask-bda-features-roadmap
Flask-BDA จะเป็นไปตามการกำหนดเวอร์ชันเชิงความหมายสำหรับการเผยแพร่ โดยมีรูปแบบ {major}.{minor}.{patch}
สำหรับหมายเลขเวอร์ชัน โดยที่:
การเลิกใช้งานจะถูกเก็บไว้สำหรับเวอร์ชันรองอย่างน้อย 3 เวอร์ชัน หลังจากเวอร์ชัน 0.0.1
โซลูชันอื่นๆ เช่น Tableau, Power BI และ Amazon QuickSight แม้ว่าเครื่องมือที่ยอดเยี่ยมจะเน้นที่การรายงาน แต่ไม่อนุญาตให้คุณแก้ไขหรือเพิ่มข้อมูลลงในแพลตฟอร์มเมื่อจำเป็น ซึ่งหมายความว่าคุณต้องการโซลูชันหรือซอฟต์แวร์เพิ่มเติมเพื่อให้บรรลุเป้าหมายทางธุรกิจของคุณ
ทุกคนสามารถเข้าถึงโซลูชันเช่น Excel และมอบความยืดหยุ่นทั้งหมดที่คุณต้องการ อย่างไรก็ตาม ข้อมูลของคุณกระจัดกระจายและไม่อนุญาตให้มีการแบ่งปันแหล่งที่มาของความจริงสำหรับทีมและลูกค้าของคุณ และเป็นเรื่องง่ายมากที่เอกสาร Excel จะไม่ซิงค์กันหรือแชร์กัน ทำให้บริษัทของคุณเสี่ยงต่อความปลอดภัย
Flask-BDA ช่วยคุณโดยมอบการควบคุมเพื่อส่งมอบแอปพลิเคชันเต็มสแตกที่รวดเร็ว ปลอดภัย เร็วขึ้น 2-5 เท่า (2-5 เท่า) โดยไม่มีการล็อคอินผู้ขายหรือสภาพแวดล้อมเลย
Flask เป็น "ไมโครเฟรมเวิร์ก" แบบโอเพ่นซอร์สที่เขียนโดย Armin Ronacher ซึ่งช่วยให้คุณสามารถสร้างแอปพลิเคชันเว็บใน Python ได้ การจัดส่งเพียงชุดคุณลักษณะหลักเล็กๆ เท่านั้นจะทำให้มีฐานที่ขยายได้ซึ่งช่วยให้นักพัฒนาสามารถเลือกเครื่องมือเพิ่มเติมที่จำเป็นสำหรับแอปพลิเคชันของตนได้
แม้ว่าจะถูกเรียกว่าไมโครเฟรมเวิร์ก แต่ Flask ก็เหมาะสมอย่างยิ่งในการสร้างเว็บแอปพลิเคชันขนาดเล็กและขนาดใหญ่ Flask ถูกนำมาใช้ในระบบการผลิตโดยบริษัทขนาดใหญ่ เช่น Twilio, Pinterest, Lyft, LinkedIn และ Uber
Flask-BDA ช่วยให้คุณพัฒนาได้เร็วขึ้นโดยจัดเตรียมโครงสร้างการใช้งานขวดทดลองที่มีอยู่แล้ว ซึ่งช่วยให้คุณ:
จัดการกับแง่มุมที่น่าเบื่อที่ทำให้การพัฒนาซอฟต์แวร์ช้าลงโดยอัตโนมัติ
- สร้างและจัดการการเชื่อมต่อฐานข้อมูลและการสืบค้นที่ซับซ้อนทั้งหมด
- ความปลอดภัยของแอปพลิเคชันพร้อมการควบคุมการเข้าถึงตามผู้ใช้และบทบาท
- การตรวจสอบอัตโนมัติในทุกการกระทำ
Flask-BDA เป็นแพลตฟอร์มที่ใช้โค้ดน้อย (หมายความว่าเราจะช่วยคุณโดยการเขียนโค้ดจำนวนมากให้กับคุณ) ซึ่งมีเครื่องมือสำหรับบริษัทต่างๆ ในการพัฒนาและปรับใช้แอปพลิเคชันที่ปลอดภัยที่ทำงานบนอุปกรณ์ใดๆ ได้อย่างรวดเร็ว
เราเปลี่ยนวิธีการสร้างซอฟต์แวร์ เพื่อให้คุณสามารถสร้างและปรับใช้แอปพลิเคชันที่สำคัญทุกขนาดได้อย่างรวดเร็ว ซึ่งพัฒนาไปพร้อมกับธุรกิจของคุณ ซึ่งช่วยประหยัดเวลาและเงิน
นักพัฒนาสามารถสร้างและปรับใช้แอปพลิเคชันได้อย่างเต็มรูปแบบ ตั้งแต่แอปสำหรับผู้บริโภคไปจนถึงระบบธุรกิจภายในที่สำคัญ ซึ่งออกแบบมาเพื่อช่วยให้นักพัฒนาส่งมอบแอปพลิเคชันที่ปลอดภัยได้อย่างรวดเร็วและมีประสิทธิภาพ ดังนั้นแอปจึงสามารถจัดส่งได้ภายในไม่กี่สัปดาห์หรือหลายวัน
Flask-BDA ให้การพัฒนาแบบ Full-stack จาก; UI, กระบวนการทางธุรกิจ, ตรรกะที่กำหนดเอง และโมเดลข้อมูลเพื่อสร้างแอปข้ามแพลตฟอร์มได้ทันที จัดเตรียมโครงที่คุณสามารถเพิ่มโค้ดที่คุณกำหนดเองได้เมื่อจำเป็น โดยไม่มีการล็อคอินเลยทีเดียว
ด้วยสภาพแวดล้อมการพัฒนาที่กำหนดค่าไว้ล่วงหน้า เราลดความเจ็บปวด (และต้นทุน) ในการเข้าสู่ตลาด ทำให้คุณมีความยืดหยุ่นในการเลือกสถานที่และวิธีปรับใช้
Flask-BDA เป็นเครื่องมือพัฒนาแอปพลิเคชันฟรีและเป็นมิตรกับนักพัฒนา เป็นเครื่องมือพัฒนาแอปพลิเคชันที่ใช้งานได้ฟรีและมีแหล่งที่มา พร้อมใบอนุญาตที่เป็นมิตรกับนักพัฒนา
Flask-BDA ใช้งานได้ ฟรี สำหรับโครงการเชิงพาณิชย์และส่วนตัว
อย่างไรก็ตาม การพัฒนาซอฟต์แวร์ถือเป็นแบบฝึกหัดที่มีค่าใช้จ่ายสูงเสมอ:
- คุณจะต้องจ่ายเงินให้กับนักพัฒนาซอฟต์แวร์ นักวิเคราะห์ธุรกิจ นักออกแบบ ผู้จัดการโครงการ และสมาชิกในทีมหนึ่งคนหรือหลายคนเพื่อสร้างผลิตภัณฑ์ของคุณ
- สินค้าของคุณไม่มีวันเสร็จสิ้น โครงการซอฟต์แวร์จะต้องมีการพัฒนาอย่างต่อเนื่องเสมอ
- เมื่อคุณส่งมอบผลิตภัณฑ์ การแข่งขันของคุณกำลังทำงานกับคุณสมบัติใหม่และที่ได้รับการปรับปรุงอยู่แล้ว และคุณจะต้องสามารถก้าวนำหน้าหรืออย่างน้อยตามให้ทัน ไม่เช่นนั้นผู้ใช้จะย้ายไปยังคู่แข่งของคุณ
- เมื่อคุณเริ่มใช้ผลิตภัณฑ์ของคุณ คุณและทีมของคุณจะคิดถึงคุณสมบัติใหม่ๆ ที่จะทำให้ดียิ่งขึ้นและปรับปรุงกระบวนการของคุณ
- บำรุงรักษาต่อไป. เมื่อผู้ใช้ใช้ผลิตภัณฑ์ พวกเขาจะพบวิธีที่จะทำลายผลิตภัณฑ์ที่คุณคิดไม่ถึง และจำเป็นต้องได้รับการแก้ไข
ขนาดโครงการ | ต้นทุนเริ่มต้น | ต้นทุนอย่างต่อเนื่อง |
---|---|---|
โครงการขนาดเล็ก (2 - 6 สัปดาห์ของการพัฒนา) | 11 250 ดอลลาร์ | $563 - $1 125 (±10%) / ต่อเดือน |
โครงการขนาดกลาง (ใช้เวลาพัฒนา 2 - 4 เดือน) | $33 750 | $1 563 - $3 375 (±10%) / ต่อเดือน |
โครงการขนาดใหญ่ (ระยะเวลาการพัฒนา 6 - 18 เดือนหรือนานกว่านั้น) | 156 ดอลลาร์ 250 | $3 375 - $15 625 (±10%) / ต่อเดือน |
ขนาดโครงการ | ต้นทุนเริ่มต้น | ต้นทุนอย่างต่อเนื่อง |
---|---|---|
โครงการขนาดเล็ก (1 - 3 สัปดาห์ของการพัฒนา) | 3 750 ดอลลาร์ | $188 - $375 (±10%) / ต่อเดือน |
โครงการขนาดกลาง (ใช้เวลาพัฒนา 1 - 3 เดือน) | 11 250 ดอลลาร์ | $375 - $1 125 (±10%) / ต่อเดือน |
โครงการขนาดใหญ่ (ระยะเวลาการพัฒนา 2 - 6 เดือนหรือนานกว่านั้น) | 52 084 ดอลลาร์ | $1 125 - $5 208 (±10%) / ต่อเดือน |
ด้วย Flask-BDA คุณ จะไม่สูญเสียความยืดหยุ่นของ "การพัฒนาตามปกติ" ใดๆ เนื่องจากใช้รูปแบบการพัฒนาที่ได้มาตรฐานและเทคโนโลยีที่ผ่านการทดลองและทดสอบแล้ว
Flask-BDA ใช้เทคโนโลยี Open Source มากมายและใช้ประโยชน์จากสแต็กเทคโนโลยีที่มีอยู่ เพื่อให้คุณสามารถค้นหานักพัฒนารายอื่นที่ใช้เทคโนโลยีเดียวกันได้อย่างง่ายดาย เป็นผลให้คุณไม่จำเป็นต้องจ่ายค่าธรรมเนียมใบอนุญาตหรือค่าใช้จ่ายด้านสิ่งแวดล้อมราคาแพง ไม่ว่าบริษัทของคุณจะทำรายได้ได้มากเพียงใดหรือธุรกิจของคุณอยู่ที่ใด
เริ่มต้นของคุณด้วยสภาพแวดล้อมการพัฒนาที่กำหนดค่าล่วงหน้าที่ง่ายและรวดเร็วในไม่กี่นาที
ไม่จำเป็นต้องตั้งค่าที่ซับซ้อน ต้องใช้เฉพาะ python (แนะนำ 3.8.6)
อัปเดตการกำหนดค่าของคุณ: การเชื่อมต่อฐานข้อมูลและการตั้งค่าแอปพลิเคชัน
สร้างโมดูลและโครงสร้างข้อมูลของคุณเอง (แบบจำลองข้อมูล) เพื่อให้คุณสามารถใช้ฐานข้อมูลที่แตกต่างกันได้
สร้างขึ้นอัตโนมัติทำงานได้อย่างสมบูรณ์:
- หน้า
Admin
และMobile
REST APIs
พร้อมฟรอนต์เอนด์ SwaggerGraphQL API
พร้อมส่วนหน้า GraphiQL จัดการต่อโมดูลได้อย่างง่ายดาย
กำหนดค่าเพจตามความต้องการเฉพาะของคุณ และแบ่งปันกับทีมและลูกค้าของคุณได้อย่างง่ายดาย
เขียนโค้ดที่คุณกำหนดเองในโมดูลแยก ดังนั้นคุณจะไม่ส่งผลกระทบต่อโมดูลอื่นๆ
รวมโมดูลเข้ากับโครงการต่างๆ ได้อย่างง่ายดาย
ใช้โค้ดเบสเดียวกันเพื่อปรับใช้กับ:
- เดสก์ท็อป
- เว็บ
- มือถือ
สภาพแวดล้อมได้แก่:
- นักเทียบท่า
- AWS ไร้เซิร์ฟเวอร์
- มหาสมุทรดิจิทัล
- เฮโรกุ
- โฮสติ้งที่ใช้ร่วมกัน
pip
แล้ว (ควรติดตั้ง pip ไว้แล้วเพราะมันมาพร้อมกับ python เวอร์ชันล่าสุด) ในกรณีที่ไม่ได้ติดตั้ง โปรดติดตั้งจากที่นี่: https://pip.pypa.io/en/stable/installing/python -m pip --version
หมายเหตุ: เอกสารนี้จะถือว่าคุณใช้งาน
pip3
เป็นpip
เนื่องจากคำแนะนำทั้งหมดเขียนด้วยpip
หากคุณต้องการให้pip3
ทำงานเมื่อคุณเรียกpip
จากเทอร์มินัลของคุณ คุณสามารถสร้าง symlink ไปยังpip3
จากpip
:
pip install --upgrade pip
sudo
เช่น sudo pip install --upgrade pip
nano ~ /.bash_profile
ในไฟล์ ให้วางข้อมูลต่อไปนี้:
alias pip= ' pip3 '
alias python= ' python3 '
หมายเหตุ: คุณอาจต้องลบ python 2.7 บน MacOS เนื่องจากมีการติดตั้งไว้ล่วงหน้าในการแจกแจงของฉันซึ่งมีประโยชน์มากในการบรรลุสิ่งนี้:
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
ที่จำเป็นและเรียกใช้เพื่อช่วยคุณเริ่มโปรเจ็กต์"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
ที่จำเป็นและเรียกใช้เพื่อช่วยคุณเริ่มโปรเจ็กต์"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
หมายเหตุ: ในระหว่างการพัฒนา คุณอาจต้องการใช้สาขาหรือ repo อื่นทั้งหมด วิธีนี้สามารถช่วยในการทดสอบหรือหากคุณแยกตัวออกจากโปรเจ็กต์หลักของ 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 คุณสามารถมีฐานข้อมูลได้ 1 หรือหลายฐานข้อมูล และผู้เช่าที่แตกต่างกันสามารถมีการเชื่อมต่อฐานข้อมูลของตนเองได้ เช่นเดียวกับประเภทฐานข้อมูลของตนเอง (SQLite, MySQL, SQL Server, PostgreSQL)
ตามค่าเริ่มต้น Flask-BDA มีการตั้งค่าฐานข้อมูล SQLite นี่เป็นเพราะคุณไม่จำเป็นต้องมีโครงสร้างพื้นฐานเพิ่มเติมในการตั้งค่าและเริ่มต้นใช้งาน ทำให้ SQLite เป็นตัวเลือกที่ง่ายและรวดเร็ว
หากต้องการเปลี่ยนฐานข้อมูลเริ่มต้น:
flaskbda
) ผู้ใช้ ( flaskbda_user
) และรหัสผ่าน ( password
)config.py
DATABASE_ENGINE
สำหรับ SQLite และแสดงความคิดเห็นใน mysql DATABASE_ENGINE
DATABASE_NAME
สำหรับ SQLite และแสดงความคิดเห็นใน mysql:DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
สำหรับ SQLite และแสดงความคิดเห็นใน 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
สำหรับ SQLite และตัวอย่างความคิดเห็นใน SQLServer DATABASE_ENGINE
DATABASE_NAME
สำหรับ SQLite และแสดงความคิดเห็นใน SQLServer:DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
สำหรับ SQLite และแสดงความคิดเห็นใน try
และ except
SQLServer SQLALCHEMY_DATABASE_URI
หมายเหตุ: หากคุณกำลังใช้งานและพยายามเชื่อมต่อกับ
SQLEXPRESS
โปรดยกเลิกหมายเหตุตัวแปร SQLServerSQLEXPRESS
สิ่งนี้จะได้รับการจัดการในtry
และexcept
เพื่อสร้างSQLALCHEMY_DATABASE_URI
ที่ถูกต้อง
หมายเหตุ: หากคุณต้องการการรับรองความถูกต้องของ windows โปรดยกเลิกหมายเหตุตัวแปร SQLServer
TRUSTED_CONNECTION
สิ่งนี้จะได้รับการจัดการในtry
และexcept
เพื่อสร้าง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
#############
# 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
- หากคุณไม่พบ "" คุณอาจต้องใช้เครื่องมือ "ใช้เครื่องมือการจัดการคอมพิวเตอร์" แทน เพื่อเข้าถึงมัน
- นี่ดูเหมือนจะเป็นปัญหาของ Windows 10
Multitenancy คือสถาปัตยกรรมซอฟต์แวร์ที่ซอฟต์แวร์อินสแตนซ์เดียวทำงานบนเซิร์ฟเวอร์และให้บริการผู้เช่าหลายราย (ไคลเอนต์) ซอฟต์แวร์แบบหลายผู้เช่าช่วยให้หลายอินสแตนซ์อิสระของแอปพลิเคชันเดียวหรือหลายตัวทำงานในสภาพแวดล้อมที่ใช้ร่วมกัน
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' ,
}
ขณะนี้ คุณสามารถโต้ตอบกับฐานข้อมูลผู้เช่าแบบแยกได้โดยการเพิ่มอาร์กิวเมนต์
organization=
ให้กับ URL ของคุณ เช่น:example.com?organization=client1
โดยที่client1
คือชื่อที่คุณเพิ่มในอ็อบเจ็กต์SQLALCHEMY_BINDS
สิ่งนี้ทำงานโดยการสกัดกั้น
@app.before_request
ในapp/_init_.py
และเปลี่ยนการเชื่อมโยงเอ็นจิ้น db โดยใช้db.choose_tenant(g.organization)
จากapp/mod_tenancy/multi_tenant.py
โดยใช้ตัวแปรโกลบอลg.organization
ที่ได้รับ กำหนดโดยการดึงข้อมูลorganization
อาร์กิวเมนต์ URL ซึ่งช่วยให้ฐานข้อมูลของผู้เช่าทุกรายใช้โค้ดเดียวกันในแอปได้ในขณะที่แยกข้อมูลออกจากกัน
บางครั้งคุณจำเป็นต้องโต้ตอบกับฐานข้อมูลต่างๆ ในฟังก์ชันเดียว (โดยเฉพาะเมื่อรวมระบบ หรืออ่านข้อมูลจากแหล่งต่างๆ)
ตามค่าเริ่มต้น คอนโทรลเลอร์ทั้งหมดจะมีการนำเข้า
MultiBindSQLAlchemy
# import multiple bindings
from app . mod_tenancy . multi_bind import MultiBindSQLAlchemy
ภายใต้การนำเข้าจะมีใส่ความคิดเห็นโค้ดไว้เพื่อช่วยคุณในการดำเนินการลิงก์ไปยังฐานข้อมูลต่างๆ อย่างรวดเร็วในฟังก์ชันเดียว ประการแรก จำเป็นต้องเพิ่มการเชื่อมโยงฐานข้อมูลเข้ากับอ็อบเจ็กต์
SQLALCHEMY_BINDS
อ้างอิงฐานข้อมูลที่แยกออกมาด้วยฟังก์ชันเดียวกันเพื่อทำความเข้าใจวิธีเพิ่มฐานข้อมูลใหม่ให้กับออบเจ็กต์SQLALCHEMY_BINDS
ได้ดียิ่งขึ้น
จากนั้นคุณสามารถสร้างออบเจ็กต์ใหม่ที่แนบมากับออบเจ็กต์
db
ตามโครงสร้างของdb.<binding>
เช่น:db.first
โดยที่first
คือชื่อที่คุณต้องการอ้างอิงการโยงในส่วนที่เหลือของโค้ด จากนั้นคุณสามารถกำหนดตัวแปรนี้ให้กับMultiBindSQLAlchemy
เช่น:db.first = MultiBindSQLAlchemy('first')
ขณะนี้คุณสามารถเรียกโค้ดที่กำหนดเองซึ่งจะช่วยให้คุณสามารถเข้าถึงการเชื่อมโยงฐานข้อมูลใหม่ตลอดจนผู้เช่าหลักในฟังก์ชันเดียว เช่น
db.first.execute(...)
ซึ่งคุณสามารถรันโค้ด SQL แบบดิบได้
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 ถูกสร้างขึ้นบนฟิลด์ เช่นเดียวกับความสัมพันธ์แบบ Lazy ระหว่างโมเดลที่ระบุฟิลด์
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
หมายเหตุ: คุณยังสามารถสร้างโมดูลจากไฟล์ JSON ใน "app/generated_config/models//models.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
การสร้างโมดูลใหม่จะทำให้คุณมี 3 วิธีในการโต้ตอบกับระบบใหม่ของคุณ
Public
Admin
REST API
และGraphQL API
ในการเข้าถึงสิ่งเหล่านี้ พวกเขาจะต้องให้แอปทำงานในสภาพแวดล้อม
มุมมอง
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
เพื่อเข้าถึง SwaggerUI REST API เช่น: http://localhost:5000/api/docs
วิธีเข้าถึง REST API โดยไม่มี SwaggerUI:
<base_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
วิธีเข้าถึง GraphQL API โดยไม่มี GraphiQL:
<base_URL>/
../graphql
mod_graphql
> query
> Query
> all_xyz
../graphql
mod_graphql
> mutation
> Mutation
> createXyz
ขณะนี้มีสภาพแวดล้อมแบบสำเร็จรูปที่รองรับ 7 แบบ (โดยมีแผนจะรองรับเพิ่มเติมในเร็วๆ นี้) พร้อมคำแนะนำเกี่ยวกับวิธีการกำหนดค่าแต่ละรายการสำหรับ Windows / Linux / Mac
และคุณสามารถเรียกใช้พร้อมกันได้หากต้องการ
ในการสร้างและพัฒนาแอปพลิเคชันภายในเครื่อง เรากำลังใช้ virtualenv เครื่องมือสำหรับสร้างสภาพแวดล้อมหลามเสมือนแบบแยกส่วน
pip install --upgrade pip
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
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
บริการโฮสติ้งที่ใช้ร่วมกันบางบริการสามารถรันแอพพลิเคชั่นหลามบนเซิร์ฟเวอร์ได้ โดยส่วนตัวแล้วฉันใช้ 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 ไว้ (รายละเอียดเกี่ยวกับวิธีการติดตั้งในภายหลังในเอกสารประกอบ) คุณจะได้รับอิมเมจใหม่ที่สร้างขึ้นทุกครั้งที่คุณ
push
หรือทำpull_request
บน Github ซึ่งตั้งค่าไว้ในไฟล์: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
หมายเหตุ: ยังอยู่ระหว่างการพัฒนา
ในการสร้างและปรับใช้แอปพลิเคชันแบบไร้เซิร์ฟเวอร์ เรากำลังใช้ Serverless Framework ซึ่งช่วยให้การพัฒนาแบบไร้เซิร์ฟเวอร์มีแรงเสียดทานเป็นศูนย์ ช่วยให้คุณสร้างแอปที่ปรับขนาดอัตโนมัติบนโครงสร้างพื้นฐานระบบคลาวด์ยุคถัดไปที่มีต้นทุนต่ำได้
เฟรมเวิร์กไร้เซิร์ฟเวอร์เป็นเครื่องมือโอเพ่นซอร์สที่ให้การพัฒนา YAML + CLI และการปรับใช้กับ AWS, Azure, Google Cloud, Knative และอื่นๆ ได้อย่างง่ายดาย
หมายเหตุ: คุณอาจต้องปรับสตริงฐานข้อมูลเริ่มต้นก่อน del=polying เนื่องจาก serverless ไม่รองรับ "SQLite" เนื่องจากฟังก์ชันไม่เก็บสถานะ
หากต้องการอัพเดตสตริงฐานข้อมูล โปรดดูที่ [Config]
npm update -g serverless
npm update -g serverless
choco install serverless
หมายเหตุ: หากไม่ได้ติดตั้งแพ็คเกจ คุณอาจต้องรันคำสั่งในฐานะผู้ดูแลระบบ
กด "Windows-Key" พิมพ์ "cmd", "คลิกขวา" ที่คำว่า "Command Prompt" และเลือกตัวเลือก "Run as administrator" จากนั้นทำตามขั้นตอนก่อนหน้าอีกครั้ง
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 คุณควรรับ
password
ผ่านทางอีเมลที่คุณลงทะเบียนบัญชีสำหรับ Digital Ocean ด้วย
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 เป็นแพลตฟอร์มเป็นบริการ (PaaS) Heroku ช่วยให้คุณเริ่มต้นด้วยความมุ่งมั่นที่ไม่มีความมุ่งมั่นจ่ายตามที่คุณไปโดยไม่มีการล็อคนักพัฒนาทีมและธุรกิจทุกขนาดสามารถใช้ Heroku เพื่อปรับใช้จัดการและปรับขนาดแอพ ไม่ว่าคุณจะสร้างต้นแบบที่เรียบง่ายหรือผลิตภัณฑ์ที่สำคัญทางธุรกิจแพลตฟอร์มที่มีการจัดการอย่างเต็มรูปแบบของ Heroku ช่วยให้คุณสามารถส่งแอพได้อย่างรวดเร็ว
ในการสร้างและปรับใช้แอปพลิเคชันไปยัง Heroku จากเทอร์มินัลคุณจะต้องดาวน์โหลดและติดตั้ง Heroku CLI ในการตรวจสอบการติดตั้งคุณสามารถตรวจสอบรุ่น Heroku จากเทอร์มินัล:
heroku --version
หมายเหตุ: ตรวจสอบให้แน่ใจว่าคุณได้เปลี่ยนการเชื่อมต่อฐานข้อมูลของคุณเนื่องจาก 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 โดยเฉพาะเราใช้ Expo เป็นกรอบและแพลตฟอร์มสำหรับแอพพลิเคชั่น React Universal มันเป็นชุดของเครื่องมือและบริการที่สร้างขึ้นรอบแพลตฟอร์มพื้นเมืองและพื้นเมืองที่ช่วยให้คุณพัฒนาสร้างปรับใช้และวนซ้ำบน iOS, Android และเว็บแอปจาก JavaScript/TypeScript Codebase เดียวกัน
เราได้ตั้งค่าการแจ้งเตือนแบบพุชล่วงหน้าดังนั้นคุณไม่จำเป็นต้องทำ ซึ่งหมายความว่ามันเร็วขึ้นและง่ายขึ้นสำหรับคุณในการเริ่มต้นและทำงาน นอกจากนี้เรายังใช้ประโยชน์จากแพ็คเกจการแจ้งเตือนการแสดงผลงานเริ่มต้นที่อนุญาตให้มีการใช้งานและวิธีการที่ง่ายขึ้น
ข้อดีรวมถึงการสร้างและการทดสอบขั้นตอนการทำงาน/กระบวนการที่เร็วขึ้นการทดสอบระยะไกลในขณะที่พัฒนาด้วยการอัพเดทผ่านทางอากาศ (OTA) พร้อมการเปลี่ยนแปลงที่มองเห็นได้ในการประหยัดในระหว่างการพัฒนา
อย่างไรก็ตามมีข้อเสียและข้อ จำกัด บางประการที่ 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
สำหรับมือถือเราจะสร้างโฟลเดอร์
"_mobile_app"
แยกต่างหากโดยอัตโนมัติซึ่งคำนำหน้าของโฟลเดอร์เป็นชื่อโครงการของคุณเช่นmy_awesome_project_mobile_app
นี่คือการป้องกันปัญหาเกี่ยวกับpackage.json
การกำหนดค่าแบบServerless
JSON และอนุญาตให้คุณไม่ปรับใช้รหัสทั้งหมดสำหรับแอพมือถือบนเว็บเซิร์ฟเวอร์ของคุณ
หากคุณยังอยู่ในระหว่างการพัฒนาและ/หรือยังไม่ได้เลือกผู้ให้บริการสำหรับโฮสติ้งคุณสามารถใช้: Ngrok เพื่อสร้าง URL การพัฒนาสาธารณะชั่วคราวที่อุโมงค์ไปยังสภาพแวดล้อมในท้องถิ่นของคุณ Ngrok เปิดเผยเซิร์ฟเวอร์ท้องถิ่นที่อยู่เบื้องหลัง Nats และ Firewalls ไปยังอินเทอร์เน็ตสาธารณะผ่านอุโมงค์ที่ปลอดภัย สิ่งนี้ช่วยให้คุณสามารถสาธิตเว็บไซต์บน 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 "server_base_url": "https://github.com/RyanJulyan/Flask-BDA"
โดยแทนที่ https://github.com/RyanJulyan/Flask-BDA
ด้วยของคุณเอง ชื่อเซิร์ฟเวอร์expo
บนโทรศัพท์มือถือของคุณเองโดยค้นหา "Expo" บน Apple หรือ Google Play Store: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 สิ่งนี้จะช่วยให้คุณใช้แอพ Expo หากคุณอยู่บน Android หรือใช้กล้องถ้าคุณอยู่บน iOS เพื่อสแกนรหัสและเปิดแอปของคุณโดยตรงจากเซิร์ฟเวอร์การพัฒนา
หมายเหตุ: หากคุณต้องการให้คนที่ไม่ได้อยู่ในเครือข่ายของคุณสามารถสแกนและทดสอบแอพจากระยะไกลให้กดปุ่มแท็บ
tunnel
เหนือรหัส QR
ส่วนหนึ่งของคำแนะนำคือเพื่อให้แน่ใจว่าภาพได้รับการปรับให้เหมาะสม ในการทำงาน Expo นี้ได้แนะนำแพ็คเกจ Expo-Optimize ซึ่งสามารถช่วยในการปรับภาพให้เหมาะสม นอกจากนี้การเพิ่มประสิทธิภาพรูปภาพสามารถปรับปรุง 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 เครื่องมือสำหรับการสร้างและเรียกใช้เว็บแอปพลิเคชัน Flask ของคุณใน wrapper Chrome เพื่อแจกจ่ายแอปพลิเคชันเดสก์ท็อปเรากำลังใช้ Pyinstaller Pyinstaller Freezes (แพ็คเกจ) แอปพลิเคชัน Python ลงในการทำงานแบบสแตนด์อโลนภายใต้ 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
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
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
python create_desktop_installer_lunix.py
pip install --upgrade pip
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
python create_desktop_installer_mac.py
สิ่งนี้จะเปิดหน้าต่างสูงสุดที่จะทำงานเหมือนแอปพลิเคชันเดสก์ท็อปปกติ สิ่งนี้จะใช้เบราว์เซอร์ Chrome ที่ติดตั้งในเครื่องเพื่อให้บริการเนื้อหา
โดยค่าเริ่มต้นแอปพลิเคชันนี้จะเสิร์ฟบนพอร์ต
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 เพื่อทดสอบและรวม APIs เข้ากับรหัสของพวกเขา เราได้รับความช่วยเหลือจากการจัดหาการส่งออกคอลเลกชันโดยตรงสำหรับบุรุษไปรษณีย์
เพื่อนำเข้าคอลเลกชันในบุรุษไปรษณีย์:
Import...
(Ctrl+O)Link
จากแท็บ<base_URL>/api/postman
เช่น: http://localhost:5000/api/postman
<base_URL>/aswagger.json
เช่น: http://localhost:5000/swagger.json
และนำเข้าโดยตรงไปยังบุรุษไปรษณีย์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
สิ่งนี้จะนำเข้าคอลเลกชันบุรุษไปรษณีย์ซึ่งจะมีอยู่ทางด้านซ้ายมือเป็นโฟลเดอร์ (พร้อมโฟลเดอร์ย่อยจากจุดสิ้นสุดที่คุณสร้างขึ้น)
คุณสามารถสร้างรหัสสำหรับ lanuages และเฟรมเวิร์กที่แตกต่างกันมากมายโดยใช้บุรุษไปรษณีย์ ภาษาเหล่านี้รวมถึง แต่ไม่ จำกัด เพียง:
ช่วยให้คุณสามารถรวม 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 โดยทั่วไปจะมีคำขอ HTTP ที่ทำโดย (เบราว์เซอร์-ลูกค้า) ใน JavaScript ที่ใช้ XML/JSON เพื่อขอข้อมูลและ/หรือข้อมูลการตอบสนองจากระบบภายในหรือภายนอก คำขอ AJAX ทำโดยใช้ </> HTMX โดยค่าเริ่มต้น
HTMX เป็นไลบรารีที่ปราศจากการพึ่งพาซึ่งช่วยให้คุณสามารถเข้าถึง AJAX, CSS Transitions, WebSockets และเหตุการณ์เซิร์ฟเวอร์ได้โดยตรงใน HTML โดยใช้แอตทริบิวต์เพื่อให้คุณสามารถสร้างอินเทอร์เฟซผู้ใช้ที่ทันสมัยด้วยความเรียบง่ายและพลังของไฮเปอร์เท็กซ์ สำหรับรายละเอียดเกี่ยวกับวิธีการใช้ 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 >
อินพุตนี้ชื่อ Q จะออกคำขอเป็น /trigger_delay
500 มิลลิวินาทีหลังจากเหตุการณ์คีย์ขึ้นหากอินพุตมีการเปลี่ยนแปลงและแทรกผลลัพธ์ลงใน DIV ด้วยการค้นหา ID
แม้จะมีข้อดีของการเข้ารหัสแบบสมมาตร แต่ก็มีข้อบกพร่องในวิธีนี้ที่ช่วยให้บุคคลที่ไม่ได้รับอนุญาตเข้าถึงคีย์ลับของข้อความ
หนึ่งในวิธีที่มีประสิทธิภาพมากที่สุดในการป้องกันการเข้าถึงคีย์ลับของข้อความคือการใช้ฟังก์ชันทางเดียวเช่นอัลกอริทึม Diffie-Hellman วิธีนี้อนุญาตให้ผู้ส่งและผู้รับถอดรหัสข้อความเท่านั้น
โดยทั่วไปแล้วฟังก์ชั่นทางเดียวจะถูกนำไปใช้โดยใช้อัลกอริทึมประเภทหนึ่งที่อนุญาตให้พวกเขาคำนวณเอาต์พุตสำหรับทุกอินพุตที่ได้รับ อย่างไรก็ตามวิธีนี้ไม่สามารถหาผลลัพธ์ที่แน่นอนจากคีย์สุ่ม
การทดสอบเป็นส่วนสำคัญในการสร้างความมั่นใจว่าโครงการจะดำเนินการสำเร็จ
มี 3 ด้านของการทดสอบที่มีให้ใน Flask 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
การเรียกใช้ไฟล์เดียวและการตั้งค่า
โครงการ Starter Flask ซึ่งสร้างโครงสร้างโฟลเดอร์โครงการด้วย
992px
500px
@mobile_template
Decorator ช่วยให้การดูเทมเพลตได้รับการปรับให้เหมาะกับประสบการณ์มือถือที่ดีขึ้นหากจำเป็น{% if request.MOBILE %}True{% else %}False{% endif %}
config.py
สำหรับการเข้าถึงอย่างรวดเร็วและการจัดการตัวแปรสภาพแวดล้อมและสภาพแวดล้อมและ SEO เริ่มต้นconfig.py
สร้างไฟล์โมดูลที่กำหนดเองและโฟลเดอร์ที่เหมาะสมกับโครงสร้างโครงการขวดจากไฟล์ create_module.py
พร้อมพรอมต์เพื่อสร้างสิ่งต่อไปนี้:
public_list
index
create
store
show
edit
update
destroy
get
post
get
update
delete
before
และ after
การเปลี่ยนแปลงใน event listeners
แบบจำลองข้อมูลสำหรับ: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 รุ่น Major Not Dead)
└── `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")
ผ้าสำลีคือการตรวจสอบซอร์สโค้ดของคุณโดยอัตโนมัติสำหรับข้อผิดพลาดในการเขียนโปรแกรมและโวหาร สิ่งนี้ทำได้โดยใช้เครื่องมือผ้าสำลี (หรือที่เรียกว่า linter) เครื่องมือผ้าสำลีเป็นเครื่องวิเคราะห์รหัสคงที่พื้นฐาน
ผ้าสำลีหรือ linter เป็นเครื่องมือวิเคราะห์รหัสแบบคงที่ที่ใช้ในการตั้งค่าสถานะข้อผิดพลาดการเขียนโปรแกรมข้อผิดพลาดข้อผิดพลาดโวหารและสิ่งก่อสร้างที่น่าสงสัย
ในการเขียนโปรแกรมคอมพิวเตอร์การทดสอบหน่วยเป็นวิธีการทดสอบซอฟต์แวร์ซึ่งแต่ละหน่วยของซอร์สโค้ด - ชุดของโมดูลโปรแกรมคอมพิวเตอร์อย่างน้อยหนึ่งรายการพร้อมกับข้อมูลการควบคุมที่เกี่ยวข้องขั้นตอนการใช้งานและขั้นตอนการทำงาน - กำลังทดสอบเพื่อตรวจสอบว่าเหมาะสมสำหรับการใช้งาน .
แพลตฟอร์มการพัฒนารหัสต่ำให้สภาพแวดล้อมการพัฒนาเพื่อสร้างซอฟต์แวร์แอปพลิเคชันผ่านส่วนต่อประสานกับผู้ใช้แบบเป็นโปรแกรมหรือกราฟิกและการกำหนดค่าแทนการเขียนโปรแกรมคอมพิวเตอร์ที่ใช้รหัสด้วยมือแบบดั้งเดิม
เราจะดีใจถ้าคุณมีส่วนร่วมในโครงการด้วยวิธีใดวิธีหนึ่งหรือทั้งหมด:
ดูข้อมูลใบอนุญาตสำหรับ Python 3 (https://docs.python.org/3.8/license.html) และข้อตกลงทางกฎหมายอื่น ๆ (https://www.python.org/about/legal/)
ดูข้อมูลใบอนุญาตสำหรับนักเทียบท่า (https://www.docker.com/legal/components-licenses) และข้อตกลงทางกฎหมายอื่น ๆ (https://www.docker.com/legal)
เช่นเดียวกับรูปภาพ Docker ทั้งหมดสิ่งเหล่านี้มีซอฟต์แวร์อื่น ๆ ซึ่งอาจอยู่ภายใต้ใบอนุญาตอื่น ๆ (เช่น Bash ฯลฯ จากการกระจายฐานพร้อมกับการพึ่งพาโดยตรงหรือโดยอ้อมของซอฟต์แวร์หลักที่มีอยู่)
ข้อมูลใบอนุญาตเพิ่มเติมบางอย่างที่ตรวจพบอัตโนมัติอาจพบได้ใน Python/ Directory ของ Repo-INFO
สำหรับการใช้ภาพที่สร้างไว้ล่วงหน้าใด ๆ ความรับผิดชอบของผู้ใช้รูปภาพคือเพื่อให้แน่ใจว่าการใช้ภาพนี้เป็นไปตามใบอนุญาตใด ๆ ที่เกี่ยวข้องสำหรับซอฟต์แวร์ทั้งหมดที่มีอยู่ภายใน
ดูข้อมูลใบอนุญาตสำหรับเฟรมเวิร์ก Serverless และข้อตกลงทางกฎหมายอื่น ๆ (https://app.serverless.com/legal/terms)
เป็นความรับผิดชอบของผู้ใช้เพื่อให้แน่ใจว่าเป็นไปตามนโยบายการใช้งานที่ยอมรับได้ (https://app.serverless.com/legal/aup)
ดูข้อมูลใบอนุญาตสำหรับเฟรมเวิร์ก Expo และข้อตกลงทางกฎหมายอื่น ๆ (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 มันขึ้นอยู่กับคุณที่จะตัดสินใจว่าคุณต้องการแจกจ่ายใบอนุญาตและประกาศอย่างไร ด้านล่างนี้เป็นตัวอย่างของวิธีการที่สามารถทำได้:
ลิขสิทธิ์ 2021 Flask-BDA, Ryan Julyan ได้รับใบอนุญาตภายใต้ใบอนุญาต Flask-BDA เวอร์ชัน 0.1 ("ใบอนุญาต"); คุณไม่สามารถใช้ Flask-BDA
ยกเว้นตามใบอนุญาต คุณอาจได้รับสำเนาใบอนุญาตที่ https://github.com/RyanJulyan/Flask-BDA/blob/main/LICENSE
เว้นแต่จะกำหนดตามกฎหมายที่บังคับใช้หรือตกลงเป็นลายลักษณ์อักษรซอฟต์แวร์ที่แจกจ่ายภายใต้ใบอนุญาตจะถูกแจกจ่ายใน " เช่นเดียวกับ "พื้นฐานโดยไม่มีการรับประกันหรือเงื่อนไขใด ๆ ไม่ว่าจะโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อจำกัดภายใต้ใบอนุญาต