• flask çok güzel de gerçek hayatta (production) bunu nasıl kullanacaz?” sık sorulan bir soru. ucundan kıyısından cevap vereyim dedim ama önce python ve web development’ın tarihi hakkında ufacık bir özet geçeceğim. burada yazanlar işin “sistem” tarafını “programming” tarafından daha çok ilgilendiriyor. yine de, “who draws the boundaries?"

    eskiden python ile web based bir sistem yazmak isterseniz cgi (common gateway interface) kullanmanız gerekirdi. en başından beri zope projesi de bunu yapıyordu. sonra mod_python çıktı. mod_python kısaca, apache web server içerisinde python interpreter barındırmayı sağlayan bir modül. uzun süre python ile web based programming yapacak kişiler bu araçlar dahilinde sınırlı kaldılar ve her iki döneme de maruz kalan biri olarak söylüyorum, hiç pratik değildi ve eninde sonunda alternatif teknolojilere yöneliyordu kişi. zope hala kullanılan bir alternatif ancak flask başlığında takılıyorsanız zope size göre olmayabilir. mod_python’u ise artık ölü bir teknoloji olarak görebilirsiniz, yanlış değilsem son stable release 2013’te oldu.

    cgi ve mod_python’un problemleri python camiasında rahatsızlığa sebep oluyordu, mod_python’un genellikle güvenlik problemleri vardı, cgi’ın da konsept olarak verimliliği çok düşüktü, fine tuning’e izin vermiyordu. ve en sonunda pep 333 kapsamında yeni bir teknoloji önerildi: [wsgi] (web server gateway interface). burada [wsgi] kısaltmasını özellikle köşeli parantezde tuttum çünkü bunun büyük harflerle yazıldığını ifade etmeye çalışıyorum. nedenini ilerde anlayacaksınız.

    [wsgi] (ingilizce ‘whiskey’ gibi okunuyor) python interpreter ile web server (apache gibi) arasında bir köprü kuruyor. eğer web server [wsgi] protokolünü desteklerse web server kendisine gelen request’lere karşılık python kodundan ilgili methodu çalıştırabiliyor. mod_python gibi web server içinden bir interpreter (doğrudan) çalıştırmıyor, cgi gibi her request için yeni process spawn etme zorunluluğu olmuyor… neyse detayını isteyen okur zaten.

    böyle olunca mevzu şuna döndü. python programınızı yazıyorsunuz. sonra tercihen bir web server (apache, nginx, iis?!) ile [wsgi] kullanarak programınızı dış dünyaya serve ediyorsunuz. bu noktada her şey soyut gelebilir size, “iyi de bunu nasıl yapacaz?” diyebilirsiniz.

    now relax… eminim flask ile program yazdığınızda debugging yapmışsınızdır, programınızı çalıştırmışsınızdır ve testler yapmışsınızdır. dolayısıyla “kendisinin” aslında bir web server gibi davrandığını görmüşsünüzdür. aslında burada “kendisi” web server gibi davranmaz, flask’ın dependency’lerinden birisi olan ve adını görüp ismini bir türlü okuyamadığınız werkzeug bu işi yapıyor. (‘verkzög’ gibi okunuyor). werkzeug aslında [wsgi] protokolünü destekleyen köprünüz. ancak içerisinde bir de “uyduruk” web server barındırıyor. siz de testlerinizi yaparken bu uyduruk web server’ı kullanıyorsunuz, 5555 portundan falan bağlanıyorsunuz. ama [wsgi] nedir muhtemelen daha önce duymadığınız için bu web server’ı nasıl dış dünyayla konuşturacağınızı bilmiyordunuz.

    bu noktada bir şeyi açıklığa kavuşturayım. teoride werkzeug’u tek başına kullanarak da production’da iş yapabilirsiniz. 3-4 sene önce yazdığım bir sistemi (ve onlarca clone’unu) bu şekilde ship ettim. geçenlerde öğrendim hala çalışıyormuş. ancak proje arm işlemci üzerinde çalışıyor (dolayısıyla az component istiyorum), tek client bağlanıyor (server boğulmuyor), neredeyse 10 saniyede 1 connection alıyor, ve fena halde kapalı bir network üzerinde machine-to-machine çalışıyor dolayısıyla güvenlik endişem yok denecek kadar az. ancak bu kadar tanımlanmış, ne iş yaptığınızı ve nasıl bir ortamla karşılaşacağınızı bildiğiniz durumlarda production’da direkt kullanmak iyi olacaktır. yoksa sakın ha python app’inizi werkzeug’un web server’ı ile çalıştırıp doğrudan internete maruz bırakmayın.

    bu noktada aslında sizin ihtiyacınız olan, [wsgi] görevini görecek araçlar, ve bunları web serverlar ile bağlamak. bunu yapabilecek bir takım araçlar var. mesela bir tanesi gunicorn. production’da doğrudan kullanılan bir araç. benim tercihim (ve aşık olduğum) aracın ismi u[wsgi] (‘you-whiskey’ şeklinde okunuyor). evet biraz talihsiz bir isim, hala ısrarla u[wsgi]’nin bir kısmını büyük harflerle yazıyoruz, sebebine geleceğiz. bu u[wsgi] tam takım [wsgi] protokolünü destekliyor, application’larınzı native bir biçimde çalıştırabiliyorsunuz. kendiliğinden virtualenv support’u var, böylece aynı sunucu üzerinde farklı python versiyonlarını rahatlıkla çalıştırabiliyorsunuz. kaç thread ve worker olacağı, request’lerin nasıl handle edileceği, tonlarca ayarı var ve son derece verimli çalışıyor.

    dahası, u[wsgi]’nin de tıpkı werkzeug gibi kendi web server’ı var, ve werkzeug gibi “poor man’s apache” performansında değil, bildiğin production’a hazır. ancak best practice olarak genellikle apache, nginx gibi “işi web server’lık olan” araçlar tercih ediliyor (örneğin static content caching için).

    burada da yine u[wsgi]’yi [wsgi] protokolü için kullanıyoruz ancak önüne de bir web server koyuyoruz. işte isim karmaşası burada artıyor. u[wsgi]’in web server’lar ile çalışması için kendi geliştirdiği bir protokol daha var, ve (maalesef!) ismi uwsgi. tamamı küçük harflerle yazılıyor.

    yani web server'ımız uwsgi protokolü ile u[wsgi] programıyla konuşuyor, o da [wsgi] protokolü ile python programımızla (dolayısıyla flask framework’ümüzle) konuşuyor. resmen isimlendirme kabusu.

    nginx doğrudan uwsgi protokolünü destekliyor. ama “ yok ben apache kullanacam” derseniz mod_uwsgi, mod_proxy_uwsgi, mod_ruwsgi ("r" büyük) gibi modüller kullanabilirsiniz.

    u[wsgi]’nin en güzel yanlarından birisi de, aslında ille de web server ile uwsgi protokolünde konuşmak zorunda olmayışı. örneğin gelen verinin http olduğunu belirtebiliyorsunuz, doğrudan bir load balancer’ı u[wgsi]’ye bağlayabiliyorsunuz. ha proxy veya traefik gibi.

    özetle, python+flask yazdıktan sonra yapmanız gereken bir [wsgi] ile yazılımınızı bir web server’a bağlayıp bu şekilde dış dünyaya (veya load balancer’ınıza) expose etmek. benim tercihim genelde şu şekilde oluyor. [varsa bir load balanacer] -> nginx (reverse proxy) -> u[wsgi] -> python 3 virtualenv + flask. production falan geç, direkt battlefield tested, tavsiye edilir.

    konu flask'ın dışına çıktı, bu setup'ta flask yerine django, tornado, pyramid vs. de kullanabilirsiniz ama tabloyu genel olarak yansıtmıştır umarım.
  • 2011'in nisan bir'inde şaka olarak ortaya çıkmış (http://denied.immersedcode.org/) sonradan 'abi şaka maka güzel oldu bu' düşüncesiyle bugünlere flask adı altında gelmiştir.

    sqlalchemy ile birlikte tadından yenmiyor.
  • basit bir ml modeli tasarladınız örneğin ev fiyat tahmini. basit bir html template oluştur, flask ile modelini çalıştır ve onu da deploy et heroku'ya. miss gibi frameworktür kendisi. alternatif seçeneği streamlit'tir.
  • minimalist python web framework.

    güçlü template sistemi (jinja2) ve pratik url dispatcher'i ile birlikte sizi hiçbir kalıba zorlamamasıyla, mikro projeler, ya da hızlı prototip çıkarmak oldukça başarılı bir ürün.

    http://flask.pocoo.org/
  • yeni favori web framework'um, oncesinde java play framework kullaniyordum fakat django kadar kompleks degil ve on binlerce aktif kullaniciya acilmasini beklemediginiz ve en fazla birkac is yapan seyleri gonul rahatligiyla yazip gecebileceginiz bir yapisi var.

    api'si her noktada cok acik degil fakat isminin bolca bilinmesinin bir nedeni common case'i iyi handle etmesi. zaten incigini cincigini karistirip bisey yapmaya kalktiginizda takilip kalabiliyorsunuz ama gayet guzel.

    pymongo + heroku ile kullanilmasi onerilir.
  • python'ın en büyük sıkıntılarından birisi olan arayüz hazırlama meselesine güzel bir çare olabilecek olan framework. evet belki amacı web tabanlı uygulamalar geliştirmek ancak etcher ve benzeri uygulamalar gibi html arayüz kullanmak da teoride mümkün. pek tabii ki pratikte de.

    kullanımı aşırı basit -uzmanlaşmayı kastetmiyorum-, youtube'da güzel türkçe dersleri de var.

    python sevdalıları bir baksın derim.
  • bir python web çerçevesidir. çoğunlukla statik sayfalarla başlayan, karmaşık, veritabanı tabanlı web siteleri oluşturmak için kullanılabilir. web siteleri ve web uygulamalarını oldukça hızlı ve kolay bir şekilde oluşturmanıza olanak sağlar, gerçekten iyi ve hafiftir.
  • python bilen herkesin bu işe bulaşmasını öneriyorum.
    gui yapacagım diye tkinter ile falan uğraşacağınıza, eğer biraz html bilginiz varsa anında çok daha rahat guiler oluşturabilirsiniz.
  • birden fazla flask projeniz varsa ve tek server üzerinde deploy etmek istiyorsanız:
    https://aienthusiasts.com/…iple-flask-applications/

    tabii *nix altında screen ile beraber dev server olarak da yapabilirsiniz ancak yukardaki esas çözüm.
  • penisin sönük hali yahut ereksiyonun tersi değildir.*
    zira o flaccid'dir.

    flask ise ing. içecekleri sıcak veya soğuk tutmaya yarayan bir tür şişe ya da termosa verilen isimdir.

    aynı zamanda içinde alkol de muhafaza edilir,
    türkçede matara olarak da kullanılır.
hesabın var mı? giriş yap