Bu yazıda, Flask ile bir REST API geliştirmeyi ve bu API'yi PostgreSQL veritabanı ile entegre etmeyi öğreneceksiniz. SQLAlchemy, Python için popüler bir ORM (Object-Relational Mapping) kütüphanesidir ve veritabanı işlemlerini kolaylaştırır. PostgreSQL ise güçlü ve yaygın olarak kullanılan bir veritabanı yönetim sistemidir. Adım adım ilerleyerek bir örnek uygulama oluşturacağız.
Gereksinimler
- Python 3.x
- PostgreSQL
- Flask
- SQLAlchemy
- Flask-Migrate
Kurulum
Öncelikle gerekli Python paketlerini yükleyelim:
pip install Flask SQLAlchemy psycopg2-binary Flask-Migrate
PostgreSQL Veritabanı Kurulumu
PostgreSQL'in kurulu olduğunu varsayıyoruz. Yeni bir veritabanı ve kullanıcı oluşturmak için aşağıdaki komutları kullanabilirsiniz:
CREATE DATABASE flask_api_db;
CREATE USER flask_user WITH PASSWORD 'yourpassword';
GRANT ALL PRIVILEGES ON DATABASE flask_api_db TO flask_user;
Proje Yapısı
Proje dosya yapımız şu şekilde olacak:
flask_api/
├── app.py
├── models.py
├── routes.py
├── config.py
├── migrations/
└── __init__.py
Config.py
Veritabanı bağlantı ayarlarımızı config.py dosyasında tutacağız.
import os
class Config:
SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL', 'postgresql://flask_user:yourpassword@localhost/flask_api_db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
Models.py
Veritabanı modellerimizi models.py dosyasında tanımlayacağız. Örnek olarak bir User modeli oluşturalım.
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.username}>'
Routes.py
API rotalarını routes.py dosyasında tanımlayacağız.
from flask import Blueprint, jsonify, request
from models import db, User
api = Blueprint('api', __name__)
@api.route('/users', methods=['GET'])
def get_users():
users = User.query.all()
return jsonify([{'id': user.id, 'username': user.username, 'email': user.email} for user in users])
@api.route('/users', methods=['POST'])
def add_user():
data = request.get_json()
new_user = User(username=data['username'], email=data['email'])
db.session.add(new_user)
db.session.commit()
return jsonify({'id': new_user.id, 'username': new_user.username, 'email': new_user.email}), 201
init.py
Flask uygulamamızı ve gerekli uzantıları __init__.py dosyasında başlatacağız.
from flask import Flask
from config import Config
from models import db
from routes import api
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
db.init_app(app)
app.register_blueprint(api, url_prefix='/api')
return app
App.py
Uygulamamızı çalıştırmak için app.py dosyasını kullanacağız.
from __init__ import create_app
from flask_migrate import Migrate
from models import db
app = create_app()
migrate = Migrate(app, db)
if __name__ == '__main__':
app.run(debug=True)
Veritabanı Migrasyonları
Flask-Migrate kullanarak veritabanı migrasyonlarını yönetebiliriz.
flask db init
flask db migrate -m "Initial migration."
flask db upgrade
Çalıştırma
Son olarak, uygulamayı çalıştırabiliriz.
python app.py
Tarayıcınızda http://127.0.0.1:5000/api/users adresine giderek kullanıcıları listeleyebilir veya POST isteği göndererek yeni kullanıcı ekleyebilirsiniz.
Sonuç
Bu yazıda, Flask kullanarak bir REST API oluşturmayı, SQLAlchemy ile PostgreSQL veritabanına bağlanmayı ve Flask-Migrate ile veritabanı migrasyonlarını yönetmeyi öğrendik. Flask'ın esnek yapısı ve SQLAlchemy'nin güçlü ORM yetenekleri sayesinde kolayca ölçeklenebilir ve yönetilebilir API'ler geliştirebilirsiniz.