Python 3.6’da Gelen Yenilikler Ve Geliştirmeler

Python, gelişmeye ve modern yazılım dili olmaya devam ediyor. Python 3.6.0 versionu 23 Aralık 2016 tarihinde kullanıma sunuldu. Fakat bu aşamada henüz Final sürüme ulaşmadı. Kısa süre içerisinde tam stabil konuma ulaşacaktır. Bu makalemizde 3.6.0 ile neler yeni geldi ve daha çok 3.5.0 ile karşılaştırma yaparak sizlere elimden ve dilim döndüğü kadar anlatmaya çalışağım.

Secrets

Python kütüphanelerine, yeni olarak “secrets” kütüphanesi eklendi. Gelmesinin amacı, kriptografik açıdan güçlü ve rastgele değerler üretmek için oluşturuldu. Random kütüphanesine göre, biraz daha yavaş çalışıyor fakat güvenlik açısından çok önemli rol alıcaktır. Secrets kütüphanesini rastgele rakam üretmek için kullanmak mantıklı olmayabilir. Bunun için random kütüphanesi kullanmak daha mantıklı olucaktır, kısaca uygun yerlerde kullanılması gerekiyor örneğin, burada secrets’in asıl rol alacağı nokta ise şifreler, hesap kimlik doğrulama ve güvenlik şifreleri gibi yerlerde rol alacaktır.

Kişisel bir eleştiri yapayım, böyle bir kütüphaneye ihtiyacım oldu. Çünkü crypto adlı kütüphanesi ile AES işlemleri yapiyordum. AES’de belirlediğiniz anahtar ile veriler şifrelenir, çözülürken de bu anahtar ile çözülür. Secrets kütüphanesi ile her veri için farklı anahtar oluşturulabilir.

Örnek Kullanımı

Çıktıya bakalım;

Merak edenler için, detaylı bilgi : Secrets

CPython Gelişimleri

  • Dict(Sözlük) yapısı geliştirilmiş ve 3.5 versiyona göre %20 – %25 arası daha az bellek kullanmakta ve daha hızlı sonuçlar vermektedir.
  • Yeni bir metod ile alt sınıf oluşturma özelliği geldi. Bu metod “__init_subclass__” isminde ve @classmethod kullanım tarzındadır. Ayrıca sonradan oluşturulan classların Ana class’a haber vermesini sağlıyor. Bu konuyu biraz açalım çünkü gerçekten hoşuma giden bir özellik. Kodların daha iyi okunması ve daha iyi yazılmasını sağlıyor.

__init_subclass__ Kullanımı

Bu class’ın amacı, temel bir sınıfı “__init_subclass__” ile çağırdıktan sonra bu class’a bağlı alt sınıflar oluşturmamazı sağlar.

Örnek Kullanımı

Çıktıya bakalım;

Merak edenler için detaylı bilgi : __init_subclass__

  • PYTHONMALLOC adlı ortam değişkeni kullanarak yorumlama ve hata bulma konusunda yardımcı olacak.

Standart Kütüphanelerde Gelişme

Python içerisinde standart olarak kabul görmüş gömülü olarak gelen yapılar bulunmaktadır. Örneğin str(), int(), random() gibi örnekler verilebilir.

  • asyncio adlı kütüphanede, yeni özellikler, anlamsal hatalar  ve performans iyleştirilmeleri yapıldı. Python 3.6 ile asyncio kütüphanesi stabilir konuma erişeceği belirtildi. asyncio adlı modül, eş zamanlı işlemler ve socket işlemleri için kullanılmaktadır.
  • Pathlib ile os.path uyumlu hale getirildi.
  • Yerel saat ayırımı için datetime modülü desteği sağlandı.
  • typing modülünde iyleştirmeler yapıldı. Artık değişkenlerin türlerinide belirtebilceğiz. Zorunlu değil isteğe göre kullanabilmektedir. Örnek kullanımı için : Typing

Güvenlik Geliştirmeleri

  • Secrets kütüphanesin eklenmesi, yukarıda bahsettik.
  •  hashlib modülleri artık OpenSSL 1.1.0 destekliyor.

Genel Yeni Özellikler

  • Fstring ile yeni cümle biçimleme özelliği geldi.

.format özelliği ile kıyasla daha net ve anlaşılır.

  • Uzun sayılarda “_” kullanabilme. Yazımı ve okunabilirliği artırmak için getirilmiş bir özelliktir.

Genel bir özet olarak, bu bilgileri size aktardım umarım faydalı olmuş.

Çok kapsamlı şekilde bilgi almak için : Python 3.6 ile neler yeni?

 

Oyun Oynayarak Python Öğren! – CodeCombat

code.org tarafından geliştirilen CodeCombat oyunu,  Python, JavaScript ve Lua dillerinin öğretimi için hazırlanmış web tabanlı bir strateji oyunudur. Türkçe dil desteği de bulunan oyun öğrencilere “Oyun oynayarak kodlamayı öğren” sloganıyla kodlamada gösterilecek başarılı bir platformdur.

Oyun ilk başlarda 9 yaşındaki çocukları hedeflesede, şuanki gelişme aşamasında ki her yaşa uygun hale getirilmiş ve seviyelere ayırılmıştır.

 

Karakterimizi Seçelim

Oyuna ilk giriş yaptığımızda, “ön tanımlı” dil seçmemizi isteyecektir. Ön tanımlı dil seçtikten sonra karakterinizi belirleyin.

Kaç Yaşındasın?


Yaşınızı doğru belirmenizde fayda var, seviyenize göre sorular sizi sıkmayacaktır.

Basit Bir Yürüyüş…

Size verilen ip uçlarını kullanarak, elmaslarını kullanabilirsiniz.

Bu kodlarda, hero sınıfına ait fonksiyonlarını çağırıyorum. Önce “sağ” sonra “aşşağı” ve tekrar sağa gitsin.

Biraz Daha Zorlaştıralım…

Oyunun Temel Mantığı Nedir?

OOP(Object Oriented Programming) ve fonksiyonel programlama iki yapı, codecombat eğitimin temel mantığını oluşturmaktadır.

 

Örneğin;

Python’da bu çalışan kodların arka planda nasıl işlediğine bakalım.

Fonksiyon olarak

Çıktı;

Nesnel Olarak

Çıktı ;

Django Framework ve Güvenlik

Merhaba arkadaşlar bu yazımda Django Framework ve Güvenlik konusunu ele alacağız. Bildiğiniz üzre Django, python programlama dili ile yazılmış olan bir web uygulaması geliştirme çatısıdır. Biz geliştiricilere sağladığı esneklik, kolaylıklığı ve hızı eklediğimiz de bizim için önemli olan bir web uygulaması geliştirme çatısıdır. Geliştiriciler için tercih edilmesinin en büyük nedeni yapmış olduğumuz web uygulamalarını daha kısa sürede bitirmemizdir. Evet geliştiriciler için bu kadar kolaylıklar sağlayan Django, sizce ne kadar güvenli ? Hiç sorduk mu kedimize bu soruyu ? İsterseniz bu sorunun cevabına birlikte bakalım 🙂

MITM Saldırıları

Man in the Middle diye tabir ettiğimiz MITM saldırıların amacı sunucu ve kullanıcı arasındaki veri trafiğine girerekistediği bilgileri ele geçirmesindir. MITM saldırılarından korunmak için sitenizi HTTPS arkasında almak güzel bir çözüm olacaktır. Bu güvenlik önlemi olmadan olmadan, kötü niyetli ağ kullanıcılarının kimlik doğrulama bilgilerini veya istemci ile sunucu arasında aktarılan diğer bilgileri ele geçirme ve değiştirme olasılığı vardır. Django, bu tür saldırılara karşı önlem alınmışdır.

XSS Zafiyeti

Öncelikle isterseniz XSS zafiyetinin ne olduğuna deginelim. XSS zafiyeti kelime anlamı olarak Cross Site Scripting anlamını taşımaktadır. Anlamından da anlayabileceğiniz gibi web uygulaması üzerinde javascript komutları çalıştırmayı sağlamakdır. XSS çoğunlukla tarayıcıda saklanan bilgiler olan cookielere saldırı amacı ile kullanılmaktadır. Django’nun şablon motoru ekrana basılan değişkenleri otomatik olarak “escape” ediyor.  Adres satırından bir veri alıp şablon dosyanızda direkt olarak kullansanız bile XSS diye bir problem kalmıyor.

SQL Enjeksiyon Zafiyeti

Django ile web uygulaması geliştirirken SQL Enjeksiyon açığı var mı ? yok mu ? acaba hatamı yaptım kodlarken veritabanı güvenliğinde bir zafiyete sebep oldum mu demenize gerek yok. Veritabanı sürücüleri, veritabanı türüne göre otomatik olarak filtrelemeler ve escape işlemleri yapıyor. Django’nun veritabani sürücüsü yeterince güvenli bir şeklide kontrollerini yapmaktadır. Kendiniz elle sorgu yazmak zorunda değilsiniz tabikide karmaşık işler yapmadığınız sürece diyebilirim. El ile sorgular yazdığınızda SQL Enjeksiyon açığına karşı önlemleri geliştiricinin alması gerekiyor. Her şeyide Django’dan beklemeyin 🙂

CSRF Zafiyeti

CSRF, kelime anlamı olarak siteler arası istek sahteciliği anlamına gelir. Bir web uygulamasına giriş yapmış olan bir kullanıcının haberi olmadan web uygulamasında onun yetkilerine eş değer kritik işlemler yaptırılmasıdır. Bir CSRF saldırısıyla kullanıcı istekleri değiştirilebilir ve/veya bilgileri çalınabilir. Django, CSRF zafiyet saldırılarına karşı oldukça kullanışlı bir ara uygulama kullanıyor. Projenizin ayar dosyasında settings.py middleware kısmına django.contrib.csrf.middleware.CsrfMiddleware satırını eklediğimde otomatik olarak CSRF saldırılarına karşı koruma almış oluyorsunuz.

Django Framework ve Güvenlik Hakkındaki Sonucum

Django, web uygulama güvenliği açısından geliştiriciye güvenli web uygulaması geliştirmesi açısından kolaylık sağlamakta, fakat django framework’ün güvenlik çözümleri sistemin her yerinde etkin olamayacağından dolayı, iş geliştiriciye düşmektedir. Başta dediğim gibi her şeyi Django’dan beklemeyin 🙂 Her uygulama gibi Django’da da belirli aralıklarla güvenlik açıkları ortaya çıkıyor ve bu açıklar yayınlanıp kısa zamanda kapatılır. Nasıl python’da, php’de, javascript’te veya başka bir programlama dilinde  güvenlik açığı çıkıyor ve kısa süre içinde kapatılıyorsa bunu da benzer bir durum olarak görebiliriz. Bu noktada uygulama geliştiricisinin düzenli olarak Django projesini takip edip, yayınlanan güvenlik güncellemeleriyle web uygulamasını güncel tutmalıdır. Bunun dışında gelişirdiği web uygulamasına zafiyet tarama ve sızma testini düzenli olarak uzman kişilere yaptırmalıdır. Unutulmamalıdır ki hiç bir zaman %100 güvenlik yoktur. Önemli olan en güvenli hale getirmeye çalışmakdır.

Bir sonraki yazımda görüşmek dileği ile kendinize iyi bakın..

Django AbstractUser ile Genişletme

User Modelini Genişletme

Merhabalar, OneToOneField ile user modelini genişlettik. Fakat AbstractUser kullanarak genişletmek daha akıllıca bir hareket olacaktır.

Yeni bir proje başlatıyorsanız, varsayılan Kullanıcı Modeli sizin için yeterli olsa bile özel bir kullanıcı modeline bir şekilde ihtiyaç duyacaksınız. AbstractUser model, varsayılan kullanıcı modeliyle aynı şekilde davranıyor, ancak ihtiyaç ortaya çıkarsa kullanmanız yeterlidir.

  • Model.py giriş yapalım.

User adında bir oluşturduk. User modelini default olarak django’nun algılaması için settings.py’e AUTH_USER_MODEL” değişkeni ile belirtmemiz gerekiyor.

  • Settings.py giriş yapalım.

Admin panele girdiğimizde “kullanıcılar” bölümü silinmiş olacaktır. Yeni user modelini, admin panele ekliyelim.

  • admin.py giriş yapalım.

fieldsets üzerinden yeni alanlar, list_display üzerinden yeni göküzücek alanlar ekleyebiliriz.

Ek olarak;

Örneğin, yeni eklediğiniz alanların aranma yaparkende çıkmasını istiyorsanız, list_display altına şöyle ekleyin.

Son olarak, veritabanını oluşturalım.

  • Yeni Modelin oluşması için;

  • Veritabanına göç işlemleri

  • Kullanıcı oluşturma

Admin paneline giriş yapalım ;

 

List_display alanına “Avatar” alanı eklenmiş.

Kullanıcı ekleme bölümüne “Avatar” eklenmiş.

User Kayit Form Genişletme

Kullanıcı kayit işlemleri için “UserCreationForm” kullaniyoruz. Fakat yeni eklediğimiz alanlar kayıt ekranına gelmeyecektir.

Örneğin “Avatar” alanını eklemek için ;

Form’u çağırırsak eğer şöyle bir görüntü gelecektir.

User modelini A’dan z’ye genişlettik diye düşünüyorum 🙂 umarım faydalı olmuştur.

Python 3.5.0 ile Nasil Twitter Botu Yapılır?

Gerekli program ve moduller

1- Python 3.5.0

2- Tweepy modulu

3- Time modulu

  • #Ben pycharm kullaniyorum o yuzden pycharm uzerinden anlaticam
  • #Ayarlar kisimindan proje ayarlarina girip ordan istediginiz modulu indirebilirsiniz

Bize lazim olan sey twitter hesabinizi bu programa nasil koyabilecegimiz oncelikle api.twitter.com sitesinden giris yapin program eklemek icin orada consumer keyler access tokenler bulunuyor kodlarin icerisinde bulunan

Bu bolgeye keylerinizi yazin

Uyari: eger telefon numarasi eklemediyseniz keyleri alamazsiniz

Bu program baska birinin hesabindaki takipcileri takip eder

BU program baska birinin hesabindaki takipcileri takip eder bu yuzden

buraya kodlarin en sonundaki yer Kimin takipcilerini takip etmek istiyorsaniz basina @ isareti koymadan yazin

Calistirdiginizda tomatik olarak takip edecektir Gayet basit bir program

http://www.tweepy.org

https://www.python.org/downloads/release/python-350/