Flask ile Oturum Yönetimi: Esneklik ve Basitlik
Örnek bir oturum yönetimi kodu için şu şekilde ilerleyebiliriz:
from flask import Flask, render_template, redirect, url_for
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user
app = Flask(__name__)
app.secret_key = 'supersecretkey'
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin):
def __init__(self, id):
self.id = id
@login_manager.user_loader
def load_user(user_id):
return User(user_id)
@app.route('/login', methods=['GET', 'POST'])
def login():
user = User(1) # Kullanıcı bilgileri burada alınır
login_user(user)
return redirect(url_for('profile'))
@app.route('/profile')
@login_required
def profile():
return 'Hoşgeldiniz, Profiliniz'
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
Flask ile çalışırken, geliştiriciler esnekliğe sahip olurlar ancak bu bazen uygulamanın ölçeklenebilirliğini veya güvenliğini zorlaştırabilir. Yine de basit uygulamalar ve hızlı prototipler için idealdir.
Django ile Oturum Yönetimi: Güçlü ve Kapsayıcı
Django'da oturum yönetimi için temel yapı şu şekildedir:
from django.contrib.auth import authenticate, login, logout
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('profile')
else:
return render(request, 'login.html', {'error': 'Geçersiz giriş'})
return render(request, 'login.html')
def user_logout(request):
logout(request)
return redirect('login')
def profile(request):
return render(request, 'profile.html')
Django'nun sunduğu güvenlik özellikleri, geliştiricilerin güvenli uygulamalar geliştirmelerini kolaylaştırır. Django ile yapılan projelerde, kullanıcı oturumu yönetimi oldukça yerleşik bir özellik olduğundan, güvenlik ve hata ayıklama konularında çok daha az problem yaşanır. Ancak, bu güçlü yapısı bazen esneklikten ödün vermenizi gerektirebilir.
FastAPI ile Oturum Yönetimi: Hız ve Modernlik
FastAPI ile bir oturum yönetimi örneği şu şekilde olabilir:
from fastapi import FastAPI, Depends, HTTPException
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from pydantic import BaseModel
import jwt
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
class User(BaseModel):
username: str
def verify_token(token: str):
try:
payload = jwt.decode(token, 'secretkey', algorithms=['HS256'])
return User(username=payload.get('sub'))
except jwt.ExpiredSignatureError:
raise HTTPException(status_code=401, detail="Token süresi dolmuş")
except jwt.InvalidTokenError:
raise HTTPException(status_code=401, detail="Geçersiz token")
@app.post("/token")
def login(form_data: OAuth2PasswordRequestForm = Depends()):
user = {'sub': form_data.username}
token = jwt.encode(user, 'secretkey', algorithm='HS256')
return {"access_token": token, "token_type": "bearer"}
@app.get("/users/me")
def read_users_me(current_user: User = Depends(verify_token)):
return current_user
FastAPI, yüksek hızda çalışan uygulamalar geliştirmek isteyenler için mükemmel bir seçimdir. Ayrıca, modern web uygulamalarında giderek daha popüler hale gelen JWT ile oturum yönetimini kolayca entegre edebilirsiniz. Bununla birlikte, FastAPI'nin öğrenme eğrisi biraz daha dik olabilir ve bazı özellikleri daha geleneksel framework'lere göre daha az yerleşik olabilir.
Hangi Framework'ü Seçmelisiniz?
Sonuç olarak, eğer küçük ve hızlı bir uygulama geliştirecekseniz, Flask’ı tercih edebilirsiniz. Ancak daha kapsamlı ve güvenli bir uygulama için Django daha uygun olacaktır. Yüksek performans gerektiren bir API geliştirecekseniz, FastAPI doğru seçim olacaktır. Her üç framework de kullanıcı oturum yönetimi için güçlü araçlar sunar, ancak her birinin avantajları ve zorlukları vardır.