Flask Web App แบบครบชุด พร้อมสร้าง DB และ Admin User

บทความนี้เหมาะสำหรับผู้เริ่มต้น ไม่จำเป็นต้องมีพื้นฐานมาก่อน คุณจะได้ Flask App ที่รันได้ทันที พร้อมระบบ Login, Dashboard, และ SQLite DB


1️⃣ เตรียมโครงสร้างโปรเจค

สร้างโฟลเดอร์โปรเจค และไฟล์ตามตัวอย่างนี้:

project/
├─ app.py              # Main Flask app
├─ config.py           # Config สำหรับ Flask + SQLAlchemy
├─ models.py           # Models DB
├─ templates/
│   ├─ base.html
│   ├─ login.html
│   └─ dashboard.html
├─ instance/           # Database จะถูกสร้างที่นี่
└─ requirements.txt    # รายการ library

คุณสามารถปรับชื่อไฟล์และ folder ตามต้องการ


2️⃣ สร้าง virtual environment และติดตั้ง dependencies

  1. สร้าง venv
python -m venv venv
  1. เปิดใช้งาน venv
  • Windows:
venv\Scripts\activate
  • Mac/Linux:
source venv/bin/activate
  1. สร้าง requirements.txt ตัวอย่าง
Flask
Flask-Login
Flask-SQLAlchemy
Flask-Migrate
pandas
openpyxl
python-dotenv
Werkzeug
  1. ติดตั้ง dependencies
pip install -r requirements.txt

3️⃣ ตั้งค่า Flask + SQLAlchemy

ตัวอย่าง config.py:

import os
from dotenv import load_dotenv

load_dotenv()

class Config:
    SECRET_KEY = os.getenv('SECRET_KEY', 'devkey123')
    SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL', 'sqlite:///instance/app.db')
    SQLALCHEMY_TRACK_MODIFICATIONS = False

ตัวอย่าง app.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config

app = Flask(__name__)
app.config.from_object(Config)

db = SQLAlchemy(app)
migrate = Migrate(app, db)

from models import User, Record

if __name__ == '__main__':
    app.run(debug=True)

4️⃣ สร้าง Models (DB Schema)

models.py:

from app import db
from datetime import datetime

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password_hash = db.Column(db.String(200), nullable=False)
    role = db.Column(db.String(20), default='user')
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

class Record(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(200))
    category = db.Column(db.String(100))
    value = db.Column(db.Float)
    imported_at = db.Column(db.DateTime, default=datetime.utcnow)

5️⃣ สร้างฐานข้อมูล SQLite

  1. สร้าง folder instance/ (ถ้ายังไม่มี):
mkdir instance
  1. Initialize migration
flask db init
  1. สร้าง migration script
flask db migrate -m "Initial migration"
  1. Apply migration (สร้าง tables จริง)
flask db upgrade

ตอนนี้ DB (instance/app.db) จะถูกสร้าง พร้อม table User และ Record


6️⃣ สร้าง Admin User

เปิด Python shell:

python

รัน:

from app import app, db
from models import User
from werkzeug.security import generate_password_hash

with app.app_context():
    admin = User(username="admin", password_hash=generate_password_hash("1234"), role="admin")
    db.session.add(admin)
    db.session.commit()

✅ ตอนนี้คุณมี admin user สำหรับ login:

  • Username: admin
  • Password: 1234

7️⃣ รัน Flask App

  1. ตั้ง environment variables (เลือกตาม OS)
  • Mac/Linux:
export FLASK_APP=app.py
export FLASK_ENV=development
flask run
  • Windows:
set FLASK_APP=app.py
set FLASK_ENV=development
flask run

หรือรันตรงๆ:

python app.py
  1. เปิด browser: http://127.0.0.1:5000/
  • หน้า login จะปรากฏ
  • ใช้ admin login
  • หลัง login จะเข้าหน้า dashboard

8️⃣ หมายเหตุสำคัญ

  • SQLite เหมาะสำหรับเริ่มต้น / พัฒนา
  • ถ้าใช้ production แนะนำ PostgreSQL/MySQL และตั้งค่า DATABASE_URL ใน .env
  • เปลี่ยน SECRET_KEY ให้เป็นรหัสลับจริงใน production
  • สามารถขยาย dashboard, import Excel, แก้ไข user, หรือ CRUD ได้ตามต้องการ

Leave a Reply

Your email address will not be published. Required fields are marked *

Translate »