Python ve Flask Framework ile Web Uygulaması Geliştirelim

Herkese merhaba bu makalede Python serisinin devamı niteliğinde bilgiler vereceğim. Python web teknolojilerinde henüz çok yaygın kullanılmasa da yavaş yavaş bu alanda kayda değer gelişmeler yaşanıyor. Python ve Web deyince akla ilk Django gelir gelişmiş bir framework olmasına rağmen bana karmaşık geldi ve bu sebeple alternatifleri araştırmaya başladım. Seçeneklerin arasından basitliği ve işlevselliği açısından en uygunu Flask Framework hoşuma gitti ve bunun üzerine eğilmeye başladım. Bu makalede bu framework ile basit bir web uygulaması geliştireceğiz bunun için bir web server’a gerek yok çünkü dahili web server yazılımı ile localhost’ta da çalışabiliyorsunuz.

2004 yılında Pocoo, uluslararası bir grup Python meraklısı tarafından kurulan bir topluluktur. Flask Framework, Bu topluluğun üyelerinden  Armin Ronache tarafından bir nisan şakası olarak kurulan daha sonra ciddi gelişmeler kaydeden bir Framework’tür. BSD lisansına sahiptir. Sitesinde yer alan tanımı ile Werkzeug üzerinde çalışan Jinja template engine kullanan python tabanlı bir web uygulama microframework’tür. Tanım içerisinde bir çok farklı kavram görmüş olabilirsiniz. Bunlardan kısaca bahsetmek gerekirse; 
Werkzeug python için WSGI yardımcı kütüphanesidir yani PHP’deki FastCGI gibi sunucu ve uygulama arasında daha hızlı iletişim kurulmasını sağlayarak performans artırır. Jinja ise python için bir template engine kütüphanesidir yani Html dosyaları içerisine yazılan özel etiketler ile dinamik görünümler oluşturmanızı sağlar. 2016 yılının ortalarından itibaren Github’daki en popüler web framework’üydü. Son kararlı sürümü olan 0.12 Aralık 2016 tarihinde yayınlandı

Bazı Özellikleri Aşağıdaki Gibidir

  • Geliştirme sunucusu ve hata ayıklayıcıyı içerir
  • Birim testi için entegre destek sağlar.
  • RESTful istek gönderimi
  • Jinja2 şablonu kullanır
  • Güvenli çerezleri destekler
  • % 100 WSGI 1.0 uyumlu
  • Unicode tabanlı
  • Kapsamlı dökümantasyon
  • Google App Engine uyumluluğu
  • İstenen özellikleri geliştirmek için kullanılabilen uzantılar

Bazı popüler uzantıları şöyledir. Flask-Cache, Flask-CouchDB, Flask-HTMLBuilder, Flask-LessCss, Flask-PonyWhoosh, Flask-Rest-JSONAPI diğer uzantılar için burayı ziyaret edebilirsiniz.

Kurulumu oldukça basittir. İlk önce bilgisayarınızda python kurulu olması gerekir değilse Python Dersleri ve Kurulum isimli makalemi okuyarak kurulum adımlarını takip edebilirsiniz.  Ardından komut satırından “pip install Flask” komutunu çalıştırarak kurulumun bitmesini bekleyin. Ardından application isimli bir klasör oluşturun bu şart değildir fakat düzenli proje yönetimi için tercih edilir daha sonra app.py isimli bir dosya oluşturun ilk uygulama için aşağıdaki gibi düzenleyin

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__": 
    app.run()

Daha sonra bu dosyayı çalıştırın console ekranında

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

gibi bir mesaj görüyorsanız herşey yolundadır tarayıcınızdan 127.0.0.1:5000 adresine gittiğinizde ekranda “Hello World!” içeriğini görmelisiniz.

URL Routing Mekanızması

Url routing mekanızmasını kullanmak için aşağıdaki örneği inceleyin

@app.route('/hello')
def hello():
    return 'Hello, World'

@app.route('/product/<product_id>')
def show_product_detail(product_id):
    # show product detail
    return 'Product ID %s' % product_id

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

Template Kullanımı (Rendering Template)

Gelişmiş web uygulamaları geliştirmek için template kullanabilirsiniz. Template engine olarak Jinja Library kullanılıyor. bunun için application klasörünün altına templates isimli bir klasör oluşturun bu özel bir klasördür ismini değiştiremezsiniz. Bu klasör altına index.html isimli bir html dosyası ekleyin. Dosya içeriğini aşağıdaki gibi güncelleyin.

<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello, World!</h1>
{% endif %}

App.py dosyanızın içeriğini aşağıdaki gibi düzenleyin

from flask import render_template

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('index.html', name=name)

Bu uygulama ile Url’den gönderilen name parametresini eğer dolu ise html içerisine yazıyoruz.

Layout-Child (Master Page) Kullanımı

Layout özelliği ile Asp.Net MVC’deki LayoutPage veya Asp.Net WebForms’daki MasterPage gibi yapıları kullanabilirsiniz. Bunun için templates klasörünün altına layout.html ve child.html dosyalarını ekleyin

Layout.html

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}{% endblock %} - My Webpage</title>
</head>
<body>
    <div id="content">{% block content %}{% endblock %}</div>
    <div id="footer">
        &copy;Copyright 2017
    </div>
</body>
</html>

Child.html

{% extends "layout.html" %}
{% block title %}Child Page{% endblock %}
{% block content %}

    <h1>Child Page</h1>
    <p class="important">
      Welcome to child homepage.
    </p>

{% endblock %}

App.py

from flask import Flask
from flask import render_template

@app.route("/child")
def ChildPage():
    return render_template('child.html')

Sonuç aşağıdaki gibi olacaktır

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>Child Page - My Webpage</title>
</head>
<body>
  <div id="content">
    <h1>Child Page</h1>
    <p class="important">
      Welcome to child page homepage.
    </p>
</div>
    <div id="footer">
        &copy;Copyright 2017
    </div>
</body>
</html>

Statik Dosya Kullanımı (CSS ve Javascript)

Web siteleri geliştirirken vazgeçilmez client-side uygulamalarından css ve javascript dosyalarını servis edebilmek için proje klasörüne “static” isminde bir klasör oluşturun bu özel bir klasördür ve ismini değiştiremezsiniz. css, javascript, images dosyalarınızı ve klasörlerinizi buraya kopyalayın. Ardından html dosyanız içerisindeki tüm statik linklerini “/static” ile başlayacak şekilde güncelleyin. örnek;

<link href="/static/css/style.css" rel="stylesheet">
<script src="/static/js/jquery.js"></script>

Querystring ve Form Değerlerine Ulaşmak

<h1>Index 2</h1>
  <p class="important">
	Key value : {{ request.args.get('key') }}
  </p>

Tarayıcıdan http://127.0.0.1:5000/child?key=test adresine girdiğinizde key değerinin ekranda olduğunu göreceksiniz. 

username = request.form['username']

Gibi bir kullanım ile POST methodundan gönderilen değerlere ulaşabilirsiniz.

Daha sonraki makalelerimde fırsat buldukça File Upload, Sessions, Cookies, Redirection, Http Errors, Includes konularını anlatacağım. Umarım faydalı olmuştur.

Mustafa Tayyip Yetiş
Yazılım Geliştirme Uzmanı

4.0 Ort. (83% puan) - 1 oy

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir