1. Giriş Programlama yolculuğuma başladığımdan beri ilginç bir model fark ettim: Evet, bu saf bir gerçek! Tam burada, bu makalenin başında durun ve geliştirdiğiniz tüm projeleri düşünmeye başlayın. uygulamaların çoğu şablonlu. Yakından bakarsanız birçok temel işlevin farklı projelerde yeniden kullanıldığını göreceksiniz. Bu temel işlevler genellikle kullanıcı kimlik doğrulaması, ödeme işleme, kullanıcı yönetimi ve daha fazlasını içerir. Onların ortak noktaları ne? Bu makalede, tüm bu kalıpların geçmişteki programcılar tarafından zaten yaratıldığına dikkat çekmek istiyorum. Sadece belirli bir projeye göre bazı işlevleri değiştiriyoruz. Gerçekten şu anda kullandığımız hemen hemen her şey zaten uygulandı. Size Python'daki arka uç geliştirme perspektifinden örnekler sunacağım, ancak bu herhangi bir programlama diline veya yazılım mühendisliği alanındaki herhangi bir alana uygulanabilir. Peki tüm arka uç uygulamalarının ortak noktası nedir? Hadi bir bakalım! : Eğer OOP (Nesneye Yönelik Programlama) konusunda bilginiz varsa, şablonlanmış modüllerinizi en yüksek soyutlama seviyesi olarak ancak düşünün ki bu prensibe göre yazılmalıdır. Not uygulama seviyesinde 2. Kimlik Doğrulama ve Yetkilendirme Her bir bölümü, hemen hemen her arka uç uygulamasına uygulanabilecek temel bileşenlere ayırmak istiyorum. Temel Bileşenler Kullanıcı adı, şifre, e-posta, roller vb. gibi nitelikleri içeren kullanıcının temsili. Kullanıcı Modeli: Parolaları karma ve doğrulama işlevleri. Parola Yönetimi: Tokenleri (JWT, OAuth2, vb.) oluşturma ve doğrulama mekanizması. Token Üretimi: Kimlik doğrulama gerektiren rotaları/uç noktaları koruyun. Ara Yazılım/Dekoratör: Kullanıcı rollerini ve izinlerini atayın ve doğrulayın. Rol Yönetimi: 2.1 Kullanıcı Modeli en genel sınıfını, herhangi bir kullanıcıya uygulanabilecek niteliklerle tanımlıyoruz. User from werkzeug.security import generate_password_hash, check_password_hash class User: def __init__(self, username, password, email): self.username = username self.password_hash = generate_password_hash(password) self.email = email self.roles = [] def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password) 2.2 Token Yönetimi Belirteç tabanlı kimlik doğrulama için JWT'yi kullanmak, siber güvenlik ve arka uç geliştirmedeki en iyi uygulamalar açısından iyi bir seçimdir. def generate_token(user): payload = { 'username': user.username, 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1) } return jwt.encode(payload, SECRET_KEY, algorithm='HS256') def verify_token(token): try: payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256']) return payload['username'] except jwt.ExpiredSignatureError: return None except jwt.InvalidTokenError: return None 2.3 Dekoratörler Dekoratör, kullanıcının sayfaya erişmesine izin verilip verilmediğini kontrol eder. from functools import wraps from flask import request, jsonify, session def is_authenticated(func): @wraps(func) def decorated_function(*args, **kwargs): if 'user' not in session: return jsonify({"error": "User not authenticated"}), 401 return func(*args, **kwargs) return decorated_function Kullanıcının rolünü kontrol etmek için dekoratör. def roles_required(*roles): def decorator(func): @wraps(func) def decorated_function(*args, **kwargs): user_roles = session.get('roles', []) if not any(role in user_roles for role in roles): return jsonify({"error": "User does not have the required role"}), 403 return func(*args, **kwargs) return decorated_function return decorator Ve temelde bu kadar! Bu önceden tanımlanmış işlevselliği tüm projelerde kimlik doğrulama için kullanabilirsiniz! 3. Ödemeler ve Faturalandırma Hemen hemen her uygulama finansal işlemleri yönetir. İster yerel bir kasap dükkanı olsun ister büyük bir işletme devi olsun, ödemeleri toplamak için etkili bir sistem kullanmanız gerekecektir. Temel Bileşenler veya gibi ödeme ağ geçitleriyle bağlantı kurma Ödeme Ağ Geçidi Entegrasyonu: Stripe PayPal Ödeme verilerini işlemek için modellerin tanımlanması. Ödeme Modelleri: Ödeme yaşam döngüsünün yönetilmesi (başlatma, onaylama vb.). Ödeme İşleme: 3.1 Ödeme Ağ Geçidi Entegrasyonu Bu, Stripe için somut bir uygulamayla farklı ödeme ağ geçitlerini entegre etmek için bir temel olarak kullanılabilir. Genel olarak kişisel tercihim, ödemeler için kullanmaktır; çünkü bu, uzun süredir piyasada ve herhangi bir projeye entegrasyonu gerçekten çok kolay. StripeAPI class PaymentGateway(ABC): @abstractmethod def create_payment_intent(self, amount, currency='gbp'): pass @abstractmethod def confirm_payment(self, payment_id): pass @abstractmethod def handle_webhook(self, payload, sig_header): pass Bu, ödeme ağ geçidine yönelik en genel örnektir ve ihtiyaçlarınıza göre özel uygulamaya odaklanabilirsiniz. 3.2 Ödeme Modelleri Ödeme bilgilerini depolamak için modeller tanımlayın. Bu örnek ORM ile kullanılmak üzere uyarlanabilir. Gerekirse daha karmaşık bir sınıf hiyerarşisi oluşturabilirsiniz ancak bu örnek için aşağıdaki kod parçası oldukça yeterli olacaktır. class Payment: def __init__(self, user_id, amount, currency): self.id = uuid.uuid4() self.user_id = user_id self.amount = amount self.currency = currency self.status = status payments = [] Tüm ödemeleri veritabanına kaydedin ve 3.3 bölümü için işlemleri işlemek için bir görevi ayarlayın. Veritabanı kayıtları aşağıdaki gibi görünmelidir: Celery id | user_id | amount | currency | status --------------------------------------+-----------------------------------+--------+----------+---------- e532d653-7c8b-453a-8cd4-3ab956863d72 | 1ff9efb3-d5e8-4e53-854f-4246ba9ff638 | 100.00 | USD | Failed 35985d41-5d54-4021-bed6-82d7233cc353 | a0984002-bace-478e-b6f9-6e4459e1b5ba | 250.50 | EUR | Pending 1ff9efb3-d5e8-4e53-854f-4246ba9ff638 | 9f896874-dc43-4592-8289-d0f7f8b8583a | 99.99 | GBP | Completed Artık her projeye entegre edilebilecek karmaşık bir sistem oluşturduk. Hala modeli takip ediyor musun? Bu HER YERDE kullanılabilir! Sonuçta bu verilerin görselleştirilmesi için başka bir uygulama tanımlayabilirsiniz. Şablon oluşturma konusunda haklısın! 😉 4. E-posta ve Bildirim Hizmetleri E-posta ve bildirimler, kullanıcıların uygulamanızın ömrü hakkında bilgi sahibi olmasını ve etkileşimde kalmasını sağlar. Hesap doğrulama, şifre sıfırlama veya pazarlama iletişimleri için olsun, güvenilir bir e-posta hizmeti her türlü proje için şarttır. veya gibi e-posta hizmetlerine bağlanma. E-posta Hizmeti Entegrasyonu: SendGrid Amazon SES Çeşitli e-posta türleri için şablonların tanımlanması. E-posta Şablonları: Entegre hizmeti kullanarak e-posta gönderme işlevleri. E-posta Gönderme: 4.1 E-posta Hizmeti Entegrasyonu sınıfı içinde e-posta göndermek için ana mantığını tanımlayın. EmailService SendGrid import sendgrid from sendgrid.helpers.mail import Mail class EmailService: def __init__(self, api_key): self.sg = sendgrid.SendGridAPIClient(api_key) def send_email(self, from_email, to_email, subject, html_content): email = Mail( from_email=from_email, to_emails=to_email, subject=subject, html_content=html_content ) try: response = self.sg.send(email) return response.status_code except Exception as e: return str(e) Ödeme ağ geçidinde olduğu gibi, piyasadaki herhangi bir spesifik araç veya ürüne odaklanmanıza gerek yoktur. Bu, herhangi bir proje için nasıl genelleştirilebileceğinin ve şablonlanabileceğinin yalnızca bir örneğidir. 4.2 E-posta Şablonları Bunun gibi sistemler için en sevdiğim kalıp işleyici kalıbıdır; bir e-posta türü olarak sözlüğe giderek daha fazla anahtar ve içerikli dosyanın yolunu eklersiniz. email_templates = { 'welcome': “welcome.html”, 'reset_password': "<h1>Reset Your Password</h1><p>Click <a href='{link}'>here</a> to reset your password.</p>" } Aksi halde aynı amaçlar için bir tanımlamak güzel olabilir. Enum 4.3 E- posta Gönderme Sihrin gerçekleşmesi için bir fonksiyona ihtiyacımız var! Aşağıdakileri yazalım: def send_email(email_service, from_email, to_email, subject, template_name, **template_vars): """ Send an email using the specified email service. """ html_content = get_email_template(template_name, **template_vars) return email_service.send_email(from_email, to_email, subject, html_content) Bir diğer önemli nokta ise , gibi tüm arka uç projelere birkaç dosya eklemek ve README .env config.py pyproject.toml, .pre-commit.yml proje içindeki dosyaların temel yapısını ortaya çıkarmak olacaktır. Önerilen yapı Python uygulamasına biraz sıkılaştırılmış olsa da, daha önce de belirttiğim gibi, aynı şeyi başka herhangi bir dil veya alan için de yapabilirsiniz. Ayrıca, en yüksek düzeyde soyutlamayla şablon oluşturmanın ve uygulamanın iyi bir yapısını sürdürmenin, paket olarak veya mikro hizmet mimarisine ek olarak diğer projeler için yeniden kullanılır. 5. Sonuç HER ŞEY ŞABLONU OLABİLİR! Burada verilen örnekler sadece başlangıçtır; projeleriniz geliştikçe bu modeller daha karmaşık senaryoları kapsayacak şekilde genişletilebilir ve iyileştirilebilir. alma, , , altyapısı, ve işlem hatlarını ekleyebilirsiniz. caching k8s docker Devops CI/CD İşinizi düzgün bir şekilde yaptıktan sonra, aynı işi başka bir işi tamamlarken kullanabilirsiniz. Basit bir ifadeyi unutmayın: Amaç projeyi, altyapıyı, bileşenleri ve hizmetleri farklı uygulamalarda yeniden kullanılabilir hale getirmektir! Kendinize bir fincan çay yapın ve uygulamalarınızın hangi bölümlerinin farklı uygulamalarda yeniden kullanılabileceğini düşünün. Yalnızca bazı kod parçalarını ayarlayarak benzer hizmetler oluşturmaya ve işinizi otomatikleştirmeye çalışın! Okuduğunuz için teşekkürler ve mutlu şablonlamalar!