Django, AngularJS, Ajax

Bir fikir kapsamında Django Web Framework ile geliştirmeye yapmaya başladım. Daha önceden Python ile herhangibir geliştirme yapmadığımdan dolayı öncelikle Python öğrenmem ondan sonrada Django öğrenmem gerekti. Doğruyu söylemek gerekirse ilk başlarda oldukça itici geldi. Ama bir süre kullandıktan sonra hızlı ve kolay geliştirme ortamı ve içerisinde gelen özellikleri hoşuma gitti.

Konu web olunca benim için artık vazgeçilmez olan AngularJS kullanmak isteiğimde bazı sıkıntılar yaşamaya başladım. Öncelikli olarak binding kısımları çalışmıyordu. Ne yaptıysam çalışmadı. Kısa bir araştırma sonucunda html içerisinde veri gösteriminde kullandığım süslü parantezlerin template kısmında binding için kullanıldığını öğrendim. Angular kısmında bu tarz şeyler için bazı ayarlamalar yapılabiliyor.

Daha sonra verileri POST etme aşamasında csrf güvenlik hatası almaya başladım. csrf hatası için template ve AngularJS kısmında düzenlemeler yapmak zorunda kaldım. Tabi bunu decorator(attribute) ilede yapmak mümkün ama bunu yapmak güvenliği bir nebze bile olsa azaltacağından dolayı AngularJS tarafında çözüm bulmak istedim. Bu arada template kısmında {% csrf_token %} komutunu kullanmamız şart.

Son olarak Ajax ile gönderdiğim verileri okumakta sorun yaşadım. Sunucu tarafında gelen istediğin Ajax mı yoksa normal bir istek mi olduğunu request.is_ajax() ile sorguladığım zaman sürekli olarak False yanıtını aldım. Tabi bunun içinde AngularJS kısmında bir çözüm mevcut.

Sonuç olarak henüz projenin başındayım. İlerleyen süreçte daha ne gibi sürprizler ile karşılaşacağımı bilmiyorum ama ilginç olanları burada yazmaya niyetliyim. Bu arada AngularJS kısmında kullandığım düzenlemeler aşağıda mevcut. Umarım sizede bir faydası dokunur.

 

angular.module('ProejectApp', ['ngRoute', 'ngCookies']
.config(['$httpProvider', '$interpolateProvider', function ($httpProvider, $interpolateProvider) {

    /* template içerisinde bind işlemini yapmak için {$ BunuEkranaBas $} */
    $interpolateProvider.startSymbol('{$');
    $interpolateProvider.endSymbol('$}');

    
    /* csrf çerezi için gerekli olan kodumuz */
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    
    /* Sunucu tarafında Ajax sorgunu tanımlamak ve veriyi okumak için kullandığım kod */
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}])

Fazlasını Oku