Django’da ortam dosyalarını kullanmak

Güvenlik, bir yazılım projesine başladığınızda aklınızın bir köşesinde devamlı tutmanız gereken şeylerden biri. Özellikle de projenizi açık kaynak olarak Github ya da Gitlab gibi platformlarda insanlara sunuyorsanız. Farklı projelerin farklı güvenlik önlemleri olabilir ancak ben bu yazımda Django ile çalışanlar için proje geliştirmeye başlamadan hemen önce yapmanız gereken ilk adımı ele almak istiyorum : ortam belgelerini kullanmak.

Her projenin ihtiyaçları farklıdır. Bu yüzden her projeye ayrı bir sanal ortam yaratmak önemli. Böylece o proje için kullandığınız program versiyonlarını, kütüphaneleri, özelleştirmeleri ana sisteminizden ayırabilirsiniz. Bu size daha sonra projenizi Docker gibi araçlarla deploy etme aşamasında büyük kolaylık sağlayacak, versiyonlar ya da teknolojiler arası çakışmaları önleyecektir. Yazılma yeni başladıysanız, henüz öğrenme aşamasındaysanız ve projenizi herhangi bir yerde yayınlamayacaksanız bile bu pratiği erkenden kazanmanızı öneririm. Böylece ileride daha büyük projelerde kolaylıkla uygulayabilirsiniz. O halde projeden önce sanal ortamımızı kurarak başlayabiliriz. Ben bunun için virtualenvkütüphanesini kullanıyorum. Siz başka bir kütüphaneyi de kullanabilirsiniz. Eğer sisteminizde virtualenv kütüphanesi yoksa aşağıdaki komutla yükleyebilirsiniz.

Projeniz için bir klasör oluşturun ve terminal ile bu klasörün içinde aşağıdaki komutu çalıştırarak sanal Python ortamınızı kurun. Ben sanal ortamımın adına myvenv dedim ancak siz istediğiniz ismi koyabilirsiniz.

Ortam hazırlandıktan sonra proje klasörünüzü kontrol ederseniz içerisinde sanal ortamınızın hazır olduğunu görebilirsiniz.

Şimdi de sanal ortamımızı aktif hale getirmeliyiz. Unutmayın sanal ortamınız sisteminizde siz açmadığınız sürece pasif haldedir. Bu yüzden projeniz üzerinde her çalıştığınızda aktifleştirmeniz ve çalışmanız bittikten sonra yeniden pasifleştirmeniz gerekir.

Artık projemize özel aktif bir Python sanal ortamımız var ve bu küçük sistem için ihtiyacımız olan şeyleri yükleyebiliriz. Bu bir Django projesi olduğuna göre öncelikle onu yüklemeliyiz.

Eğer projemizdeki sanal ortamın klasörünü tekrar kontrol edersek site-packages klasörüne Django’nun eklendiğini görebiliriz. Bu sanal ortamımızın düzgün çalıştığı ve Django’nun sorunsuz şekilde yüklendiğini gösterir.

Sırada bir Django projesi oluşturmak var. Ben projeye envsample adını verdim siz istediğiniz gibi değiştirebilirsiniz.

Proje klasörümüze bir göz atarsak Django’nun projemizi oluşturduğunu görebiliriz.

Projenin sorunsuz şekilde başlatıldığını test etmek için Django sunucusunu çalıştıralım. Bunun için öncelikle terminalinizde envsample klasörünün içinde aşağıdaki komutu çalıştırmanız gerekiyor.

Komutun ardından terminalde aşağıdaki gibi bir geribildirim ve tarayıcımızda http://127.0.0.1:8000/ açtığımızda ekran görüntüsünü görüyorsanız her şey yolunda demektir.

Şimdi projemizin ayarlar scriptini açalım ve bir iki önemli detaya göz atalım. envsample/envsample/settings.pybelgesini açtığınızda aşağıdaki gibi SECRET_KET bölümünü göreceksiniz. Secret Key her proje için Django tarafından üretilen sadece o projeye özgü bir güvenlik anahtarıdır. Bu anahtarı Github'ta yayınlamak ya da deploy ederken bu şekilde açık halde kullanmak istemezsiniz çünkü bu projenizde ciddi bir güvenlik açığı oluşturur.

Hemen her projenin bir de veritabanı vardır. Belgedeki DATABASES bölümüne bakarsanız Django'nun varsayılan veritabanı olarak SQLite kullandığını görebilirsiniz.

SQLite sade ve basit bir veritabanıdır ve ufak projeler için, öğrenme aşaması için idealdir. Ancak biz verilerimizi Postgres gibi daha gelişmiş bir veritabanında tutmak istersek bu bölümü aşağıdaki gibi düzenlememiz gerekir.

Ve diyelim ki projenizde bir email backend kurmanız gerekti. Bu durumda ayarlarınıza bir de email bilgileriniz aşağıdaki gibi eklenecek.

Buradaki sorunu görebiliyor musunuz? Projeniz açık kaynak kodlu olarak geliştirebilirsiniz, Heroku ya da DigitalOcean gibi alanlarda deploy edebilirsiniz ancak veritabanınızın ve diğer size özel olan bilgilerinizin bu şekilde görünmesini, ulaşılabilmesini istemezsiniz. Bu yüzden bu bilgileri proje dışında bir yerden servis etmemiz gerekir. Bunu da ortam dosyaları ile yapabiliriz.

Ortam dosyalarının ne olduğunu, ne işe yaradıklarını anladığımıza göre bunları nasıl kullanacağımıza geçebiliriz. Ben ortam dosyaları oluşturmak için dotenv kütüphanesini kullanıyorum. Terminalinize dönün ve en son çalışır halde bıraktığımız Django sunucusunu CONTROL-C ya da COMMAND-C ile durdurun. Aşağıdaki komutu çalıştırarak dotenvkütüphanesini kurun.

Proje klasörünüze gidin ve settings.py ile aynı yerde .env adında bir belge oluşturun.

Bu belgenin içerisinde projemiz için hassas olan bilgileri tanımlayacağız. Az önceki örneklerden yola çıkarak bu proje için Django secret key, veritabanı yönetici bilgileri ve email kullanıcı bilgileri olacak. .env belgesinde bunları şu şekilde tanımlayabiliriz.

Gördüğünüz gibi aslında yaptığımız şey kritik bilgileri birer değişken gibi tanımlamak. Şimdi Django ayarlarını yeniden düzenlememiz gerekiyor. Bunun için öncelikle settings.py belgesinin başında kullandığımız kütüphaneyi çağırmamız ve yükleme komutunu çalıştırmamız gerekiyor.

Ardından .env belgesi üzerinden gelecek bilgileri uygun yerlerde tanımlıyoruz. Burada temel prensip os.getenv("YOUR_ENV_VARIABLE") ile .env belgesindeki variableları içe aktarmak.

Projeniz artık daha güvenli. Projenizi açık kaynak olarak Github’a yüklerken .env dosyalarını yüklememeniz gerektiğini unutmayın. Bunun yerine aşağıdaki gibi ayrı bir .env_example belgesi oluşturabilir ve projenizi kullanacak kişilerin hangi bilgileri gireceğine dair bir format paylaşabilirsiniz.

Bu yazıda anlatılan projenin kaynak kodlarını görmek isterseniz buradan inceleyebilirsiniz.

--

--

📜 kurmacakafa. fictionhead. blue 🎥 film. code. creative arts. 🎬 filmmaker. developer. entrepreneur. 📌 Parazit Film & Digital Workz. Kısa İyidir. Tabby Cat.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Heval Hazal Kurt

📜 kurmacakafa. fictionhead. blue 🎥 film. code. creative arts. 🎬 filmmaker. developer. entrepreneur. 📌 Parazit Film & Digital Workz. Kısa İyidir. Tabby Cat.