Hacı güzel yazmışsın eline sağlık. Konuyu destekleyen arkadaşlarda sağolsunlar. Benim iki soru var şimdi. 1. Bootstrap + django yada web2py ile forum, szlük falan yaptın mı hiç? 2. Nie django değilde web2py seçtin? Hocam konunun başında yazdığım gibi, pek web tarafına dair bilgim yok. Geçen yaz ylesine basit php, js, css bakmıştım biraz. zellikle front end tarafında bilgim çok az. Bootstrap'i index'te çağırdım, şu şekilde:Edit: Ama bunun tesinde bir şey denemedim. Bootstrap'i en fazla bu kadar kullandım. Ancak, konuda verdiğim vimeo adresindeki video tutorial serisinde dilin geliştiricisinin bununla ilgili bir videosu da bulunuyor. https://vimeo.com/104823438Henüz ben de yeni başladım sayılır, bunun tesinde pek bir şey yapmadım açıkçası. Şu ara assembly çalışıyorum, canım sıkıldıkça buna geçiyorum. Django'dan nce flask'e başladım, microframework olduğundan kısa sürede bir şeyler yapabilirim diye. Ama pek sarmadı, syntax'i, işlerin genel olarak işleyişi vs. hiç doğru hissettirmedi. zellikle ilk mesajda bahsettiğim import olayları da beni rahatsız etti. Django'ya bi gz gezdirdim, flask'e çok benzediğini grdüm. Ayrıca ğrenmek için gereken yatırım da çok daha fazlaydı. O kadar vakit ayırmak istemediğimden başka alternatifleri aramaya başladım. Web2py'a baktım, %100 python syntax'i ile çalışması benim için ilk ve en büyük artı oldu. Ufak bir iki rneğe baktım, "işte bu" dedirtti bana :P MVC yapısını da daha nce hiç denememiştim, bu da güzel bir fırsat oldu. nceden web development tarafında tecrüben varsa sadece 1-2 saatini ayırıp bir bak, sonra gelip konuda teşekkür edersin :) pcdoktor636 tarafından 25/Haz/15 21:44 tarihinde düzenlenmiştir

Mulder 'i grdüm mutlu oldum. :D

@SkynetX bu californication'dan hocam :) @0x656e python olsun çamurdan olsun @J4x hocam senin mesaj gzükmüyor, sildin galiba. Merak ettim yorumunu :) O kadar yazdık bi up çekelim.

Burayı da alayım. return locals açıklamayı unutmuşum. Fonksiyon içinde oluşturduğunuz tüm değişkenleri return ediyor. View'da hepsine ulaşabiliyorsunuz bylece. 200x200'lük resmi tüm sayfaya yaydıran şeyh'i de buradan kınıyorum, resmi düzenlememe rağmen küçülmüyor.. Python kodunu insert etmem bir şey değiştirmedi, şeyhi ikinci kez kınıyorum :P Tüm kodlara buradan ulaşabilirsiniz, tek yapmanız gereken zip'i kendi web2py klasrünüzdeki oluşturduğunuz application'ın klasrüne eklemek. http://www.solidfiles.com/d/96c729afb7/ rnek web2py kod parçacıkları: http://www.web2py.com/init/default/examples Web2py'ın geliştiricisi tarafından çekilmiş video tutorial seti: https://vimeo.com/album/3016728/page:1/sort:preset/format:thumbnail Dkümantasyon: http://web2py.com/book pcdoktor636 tarafından 19/Haz/15 22:39 tarihinde düzenlenmiştir

Hacı güzel yazmışsın eline sağlık. Konuyu destekleyen arkadaşlarda sağolsunlar. Benim iki soru var şimdi. 1. Bootstrap + django yada web2py ile forum, szlük falan yaptın mı hiç? 2. Nie django değilde web2py seçtin?

Merhabalar müridler/mürideler. Web development tarafına biraz ynelmek istedim. İşe ilk başta PHP ile başladım, ancak pek sarmadı. En sevdiğimiz dil olan python bu konuda neler sunuyor biraz da ona bakmak istedim. Flask'e başladım, ama onu da pek beğenemedim. Syntax'i, işlerin yapılışı hiç "pythonic" gelmedi. Daha sonra Web2Py'a bir bakayım dedim. Beni en çok çeken syntax'in python'dan hiç farkı olmamasıydı, anlayamazsınız.. Ayrıca, flask ve django'da olduğu gibi ufacık bir şey yazmak için bile "from a, n, a, n import e, b, e, n" gibi onlarca importa gerek duymaması da çok büyük artı oldu. Farklı framework'lere bakan, python bilen müridlere kesinlike tavsiye ederim. Başladıktan bir kaç saat sonra ufak bir blog scripti, bir iki gün içerisinde de ufak bir szlük/reddit tarzı scripti kodlayabilirsiniz. Benim bu konuda paylaşacağım da, ufak bir "szlüğümsü" script. Atılan post'lara comment ekleme, upvote-downvote gibi olayları eklemedim, ancak o da tecrübeli iseniz 4-5 dakikada, tecrübesizseniz de 15-30 dakikada ekleyebileceğiniz bir şey. Kısa bir bilgilendirmeden sonra, artık kodlamaya başlayabiliriz. ncelikle database taslağımızı oluşturalım. Web2Py zaten web arayüzü üzerinden bir "database administration" sistemi sunuyor bize. Models kısmından create seçeneğine tıklıyoruz, "db1. py" ismi ile database'imizi oluşturuyoruz. Yazacağımız kodlar: # - - coding: utf-8 - - db. define_table('blog_post', Field('title', 'string', requires=IS_NOT_EMPTY , Field('body', 'text', requires=IS_NOT_EMPTY , auth. signature ) db. define_table('blog_comment', Field('made_for', requires=IS_NOT_EMPTY , Field('body', requires=IS_NOT_EMPTY , auth. signature ) Zaten python'ın syntax'i pek açıklamaya gerek bıraktırmıyor, ancak gene de ufak bir zet geçelim. db. define_table ile tablomuzu yaratıyoruz. 'blog_post' kısmı bu tablonun adı oluyor. Field ile de alanlarımızı oluşturuyoruz. rneğin burada, sikimsonik bir szlük klonu kopyaladığımız için sadece 'title' ve 'body' yeterli olacaktır. 'title' için 'string', 'body' için 'text' dememizin sebebi de, 'title' kısmına bir essay yazılmasını beklemediğimizden :) Ayrıca, requires=IS_NOT_EMPTY gibi ufacık bir fonksiyonla da bu alanların boş bırakılamayacağını, bırakılması durumunda da user'a ufak bir "error" mesajı ile "Right you are, motha fuckaaa" diyebileceğimizi belirtiyoruz. https://www.youtube.com/watch?v=PY0yN-i-RI4 Sonraki table ile de benzer yapıda 'blog_comment' isimli bir tablo oluşturuyoruz. Blog_comment yazdığıma bakmayın, sonradan bunu kullanıcı profillerine yapılan yorumlar için kullandım. 'made_for' alanını da bunun için kullandım, yapılan yorumun hangi kullanıcıya yapıldığını belirlemek için. Burada farklı bir şey daha grüyoruz, 'auth. signature' isimli, field içerisinde olmayan bir fonksiyon. Bu fonksiyon, yapılan her yorum için bir "signature" grevi grüyoruz. Yani, bu yorumun hangi tarihte yapıldığı, en son ne zaman modifiye edildiği, kim tarafından yapıldığı gibi bilgileri tutuyor. Evet, database kısmı sadece bu kadardı :) Artık "controller" kısmına geçebiliriz. ncelikle index fonksiyonumuza bakalım. def index : if auth. is_logged_in : logged=True username=auth. user. first_name userid=auth. user. id else: logged=False userlist=db . select return locals Evet, anasayfa bu kadar :) Şimdi bunun ne yaptığını açıklayalım. auth. is_logged_in fonksiyonunu kullanarak ziyaretçimizin giriş yapıp yapmadığını kontrol ediyoruz. Eğer giriş yapmış ise logged isimli değişkeni True yapıyoruz. Sonra da username isimli değişkene, bu giriş yapmış kullanıcının kayıt olurken sağladığı "first_name" isimli değişkeni atıyoruz. Daha sonra "view" kısmında kullanıcıya giriş yaptığı isimi gstereceğiz. userid ile de kullanıcının id'sini alıyoruz, bunu anasayfada kullanıcıyı profiline ynlendirmek için kullanacağız. userlist değişkenini de farklı bir grünüm denerken kullanmıştım, bunun burda bir işi yok. Şimdi de index'in view kısmına bakalım. } <link rel="stylesheet" href="../static/css/bootstrap-theme. min. css"> <h1> Welcome to my simple website. </h1> To view the list of current users, click <a href= }>here</a> } <p> To use some features like creating blog posts, you must sign up. You can find the signing form at upper-right corner. </p> } } <p> Welcome, }. Click <a href= }>here</a> to see your profile. </p> } <p> To create a post, click <a href= }>here</a>. </p> HTML kodlarımızın arasına } ile web2py kodlarımızı da ekleyebiliyoruz. İlk satırdaki } web2py default grünümünü sağlıyor bize. Sonraki satırda da bootstrap grünümünü denemek için eklemiştim. click <a href= }>here</a> ile de tüm kullanıcıların listesinin olduğu userlist sayfasına link vermiş oluyoruz. } <p> To use some features like creating blog posts, you must sign up. You can find the signing form at upper-right corner. </p> } controller'ın index fonksiyonunda tanımladığımız logged değişkenini burada kullanıyoruz. Syntax'ini yediğim python yine açıklamaya gerek bıraktırmıyor. if ile işimizin bittiği yeri de } kullanarak gsteriyoruz. } <p> Welcome, }. Click <a href= }>here</a> to see your profile. </p> } if logged diyerek, eğer login olunmuş ise, kullanıcımızı selamlıyor, profiline gitmesi için tıklayabileceği linki gsteriyoruz. burda args isimli yeni bir zelliği kullandık. Bunun yaptığı şey; linke tıklandığı zaman belirtilen argümanı linke yolluyor. Şyle ki, kullanıcıyı 'profile' linkine ynlendiriyoruz. Bunun tam adresi şyle olacaktır: http://127.0.0.1:8000/newclone/default/profile/3 Grdüğünüz üzere profile'den sonra "3" diye bir şey gndermişiz. İşte bu, benim o an giriş yaptığım kullanıcının id'si. Daha sonra greceğiz, profile fonksiyonu da link üzerinden bu değişkeni alarak kullanıcının kimliğini belirleyip ona gre bilgileri gsteriyor. En sona da bu satır kaldı: <p> To create a post, click <a href= }>here</a>. </p> Bu da, aynı yukarıdaki gibi, kullanıcıyı 'create' sayfasına ynlendiriyor. Index ile işimiz bitti :) Gelelim userlist fonksiyonuna. nce controller'daki kodlar: @auth. requires_login def userlist : userlist=db . select return locals ilk başta @auth. requires_login diye bir fonksiyon grüyoruz. Bunun yaptığı şey, eğer bu linke ulaşmaya çalışan kişi, siteye giriş yapmamış ise ona hata mesajı dndürüyor. Yani üyelere zel bir alan oluşturmak, web2py ile bu kadar kolay. Üstelik bunun için onlarca import da kullanmadık :) Sonrasında, userlist=db . select ile kullanıcı listesini, database'den alıyoruz. select kısmı içerisinde parantez içerisinde belirterek, sadece istediğimiz kısımları da alabiliriz. rneğin, select diyerek sadece kullanıcı adını da alabiliriz. Ayrıca, gene aynı alanada "orderby", "limitby" gibi SQL statementlar da kullanabiliriz. Fonksiyon bu kadardı, şimdi view'a geçelim. <h2> Here is the list of all users: </h2> } <p> Username: <a href=" }"> }</a> </p> } } diyerek, userlist'in bize getireceği her user için işlemleri tekrarlatıyoruz. İlk grdüğümde "bu kadar mı olabilir bu iş" demiştim. Evet, bu kadar kolaymış :) Daha sonra gelen her user için, onun username'ini display ediyor, ve profiline gidebileceğiniz bir link sağlıyoruz. Gene yukarıdaki gibi args yapısına dikkat :) Bir fonksiyonun daha sonuna geldik. Şimdi sıra profili gstermekte. @auth. requires_login def profile : info=db(db. auth_user. id request. args(0, cast=int)). select or redirect(URL('../../static/404.html')) db. blog_comment. made_for. default=request. args(0) db. blog_comment. made_for. writable=False db. blog_comment. made_for. readable=False form=SQLFORM . process comments=db(db. blog_comment. made_for request. args(0)). select return locals En uzunu ve zorlayacak olanı bu galiba. İlk satırda gene aynı @auth. requires_login yapısını kullanıyoruz. info=db(db. auth_user. id request. args(0, cast=int)). select or redirect(URL('../../static/404.html')) biraz uzun bir satır, tane tane açıklayalım :) ncelikle request. args'ı açıklayalım. Bu fonksiyon ile, URL'e daha ncesinde atadığımız userid değerini alıyoruz. Buradaki (0), alınacak değerin, ilk değer olduğunu sylüyor. cast=int ise, değerin integer olmak zorunda olduğunu sylüyor. Eğer bir hata çıkarsa da, or redirect(URL('../../static/404.html')) ile 404 sayfamıza ynlendiriyoruz. 404 sayfamıza da, acıklı bakan kedi resimlerimizi yerleştiriyoruz. http://fc. sharewa.com/upload_file/3/content/a8348d48-5319-0158-da73-a5048416650c. jpg db. auth_user. id request. args(0, cast=int) ile, user. id'sinin, url'de belirtilenle eşit olduğu row'u alıyoruz. db. blog_comment. made_for. default=request. args(0) database oluştururken made_for diye bir kısım oluşturmuştuk. Burada, bu değerin default olarak profiline bakılan kullanıcıya eşit olmasını sağlıyoruz. Bylece, bu profil üzerinde yapılacak tüm yorumlar, linkteki profil id'sine gidiyor. db. blog_comment. made_for. writable=Falsedb. blog_comment. made_for. readable=False Bu satırlarla da, bu değerin, oluşturacağımız yorum yapma formunda, kullanıcıya gzükmemesini, ve değiştirilememesini sağlıyoruz. Bazen, kullanıcıya belli bir değeri gstermek, ama kullanıcının modifiye etmesini de engellemek istediğiniz durumlar olabilir. Bu durumlarda, bu satırları kullanabilirsiniz. form=SQLFORM . process Yeni bir zellik daha. SQLFORM ile, belirttiğimiz tablo'yu bir form haline dnüştürüp kullanıcıya sunuyoruz. Profile yorum yapmak için bu formu kullanacaklar. Bu defa select yerine process kullandık, buna dikkat. Oluşturulan formu burada işliyoruz.comments=db(db. blog_comment. made_for request. args(0)). select burada da, daha nce yapılmış yorumları alıyoruz. Daha sonra view kısmında, bir for loop kullanıp her commenti ayrı ayrı gstereceğiz. Geldik profile view kısmına. } <br> } <p> Welcome to }'s profile. </p> <p> }'s email is: } </p> } <p> Make a comment for }: } </p> All comments for } is listed below. } <p> Comment made by: <i> }</i> <br> Comment: } </p> } Bir loop ile, info'da aldığımız bilgileri sırası ile gstertiyoruz. <p> Welcome to }'s profile.</p><p> }'s email is: }</p> nce, ziyaret ettiğimiz profilin sahibinin ismini, sonra da email adresini gsteriyoruz. <p> Make a comment for }: }</p> Daha nceden oluşturduğumuz form'u burada çağırıyoruz. Bu form aracılığı ile, kullanıcıya yorum yapılmasına izin veriyoruz. All comments for } is listed below. }<p> Comment made by: <i> }</i> <br> Comment: }</p> } nce yapılan her comment için bir loop oluşturuyoruz. Sonra, yapılan her commentin, kim tarafından yapıldığını ve içeriğini gsteriyoruz. Bunu da bitirdik, artık post atma kısmına geçebiliriz. @auth. requires_login def create : post=SQLFORM . process if post. accepted: response. flash= elif post. errors: response. flash= return locals Yine bir form oluşturuyoruz. Bu defa, bu form yorum yapmak için değil, konu açmak için kullanılacak. if post. accepted açıklamaya gerek bıraktırmayan bir ifade :) response. flash ile kullancıya ufak bir kutucuk ile işlemin başarılı veya başarısız olup olmadığını gsteriyoruz. View kısmına gelelim: } <link rel="stylesheet" href="../static/css/bootstrap. min. css"> <h1> Create awesome posts. </h1> } Gayet basit bir sayfa, tek yaptığı oluşturduğumuz form'u gstermek. def list : topics=db . select return locals Yine gayet basit bir fonksiyon. Tek yaptığı, şu ana kadar açılmış konuları listelemek. View: } } <a href= }> }</a> <br> } Burada da, açılmış her konuyu, başlıkları ile listeliyoruz. Başlığa tıklayarak da, konuya bakılmasını sağlıyoruz. Bunu da, daha nceden grdüğümüz args ile gerçekleştiriyoruz. Ve son fonksiyonumuz. def shitgotserious : rows=db(db. blog_post. id request. args(0, cast=int)). select return locals Farklı bir durum yok, yaptığımız şeyler :) } } <h3> Title: } </h3> <br> <p> } </p> <p> Posted by: <a href= }> }</a> </p> } nce h3 içerisinde başlığı gsteriyoruz. Sonra row. body ile içeriği, daha sonra da kim tarafından post edildiğini gsteriyoruz. http://au. reachout.com/-/media/images/get%20involved/how%20to%20vote/its%20over%20its%20finally%20over. jpg Evet tüm uygulamamız bu kadar :) Nasıl gründüğüne buradan bakabilirsiniz: https://imgur.com/a/R294f Bu framework'e ben de bir kaç hafta nce başladım. Dolayısıyla mutlaka hatalarım olmuştur, gsterirseniz sevinirim. Ayrıca, uyandıktan sonra yapacak bir şey bulamayınca bu konuyu yazdım, umarım birilerine yardımcı olur, veya web2py'a başlatır :) pcdoktor636 tarafından 19/Haz/15 22:41 tarihinde düzenlenmiştir

Bugün deneme fırsatım oldu da başarısız oldum. Sanırım daha nce byle bir framework kullanmadığımdan olsa gerek. Bi türlü çalıştıramadım. Nerede yanlış yaptım anlamadım da. ekleme: indirdiğimiz layoutları nereye atıyoruz bu arada? ekleme2: uykusuzluktan mıdır açlıktan mıdır 2 saattir yanlış sayfaya giriyormuşum kodları. İndex e yazmam gereken kodları default. py silip oraya girmişim yle olunca da bambaşka bir şey çıkmış ortaya hey allahım. Daha doğrusu ortaya bişeyin çıktığı yok. Mal gibi normal index sayfası gelmeye devam ediyor. 1049 tarafından 25/Haz/15 13:05 tarihinde düzenlenmiştir dudaklarına değen yağmur bir parça rujundan çalar. dudaklarına değen yağmur bile, bir parça rujundan çalar. benim değemediğim o dudaklarına değen yağmur, bir parça rujundan çalar. // bi gün buralarda yeni bir ağaç yeşerecek ve biz glgesinde mürekkepler tüketeceğiz //

Düzenleme hakkı elimden alınmış bu yüzden benim gibi bu konuyla hiç ilgisi olmayanlar için yazıyorum bu yazıyı. Konu içerisinde def ile başlayanları rneğin: def userlist, def profile gibi şeyleri controller altındaki default. py altına ekleyip kullanmaya başlayabiliyoruz. Tabii bunları kullanabileceğimiz bir sayfa da lazım bize. Bu sayfaları da şu şekilde oluşturup kullanıyoruz. Mesela def profile yi controller altındaki default. py içine gmdük diyelim, bize bir html sayfası lazım değil mi? O sayfayı da views içerisine default/profile.html ismiyle oluşturup içeriğini de } } Welcome to }'s profile. }'s email is: } } Make a comment for }: } All comments for } is listed below. } Comment made by: } Comment: } } şeklinde oluşturduğumuzda bu sayfaya erişebilir oluyoruz artık. Sırf bilale anlatır gibi anlatmış olmak için yazdım yanlış anlaşılmasın. Bu arada şunu da ekleyeyim mevcut konuda hazır bootstrap kullanılmışken https://bootswatch.com/ konusundan beğendiğimiz bir grünüm şeklini download diyip içindekileri kopyalayıp static altındaki css/bootstrap-theme-min. css içerisine kopyaladığımızda grünümü tamamen değiştirebiliyoruz. Alt tarafa bununla ilgili birkaç grsel ekleyeceğim. Ekleme: Yalnız şyle bir hata alıyorum: exposes: call, create, create, download, index, list, profile, shitgotserious, user, userlist altında sayfalara tıkladığımda açılsa da profile sayfası var olduğu halde gelmiyor 404 veriyor. Niye acaba? 1049 tarafından 25/Haz/15 14:08 tarihinde düzenlenmiştir dudaklarına değen yağmur bir parça rujundan çalar. dudaklarına değen yağmur bile, bir parça rujundan çalar. benim değemediğim o dudaklarına değen yağmur, bir parça rujundan çalar. // bi gün buralarda yeni bir ağaç yeşerecek ve biz glgesinde mürekkepler tüketeceğiz //

Hocam mesajı ilk yazdığında zel mesajla okula gitmem gerektiğini, geldiğimde bakabileceğimi sylemiştim. Gelene kadar halletmişsin zaten :) Bahsettiğin problem için istersen team ile bağlanıp bakabilirim. Ayrıca benim açıklamadığım yerleri de açıkladığın için çok teşekkürler :) Bazı eksiklikleri kapatmak için sıfırdan açıklayayım. ncelikle web2py'ın olduğu klasrde terminali açıyoruz. Sonra "python web2py. py" yazarak web2py'ı çalıştırıyoruz. Bu işlemin ardından bir gui gelecek, orada server ip port ve parola belirleyerek start diyoruz. Web2py otomatik olarak tarayıcıda default adresi açacaktır. Sonra sağda bulunan "admin" yazısına tıklayarak, az nceki gui'de belirlediğimiz parolayı yazıyoruz. Şu an uygulamaları düzenleyebileceğimiz arayüze erişimimizi sağlamış olduk. Sağdaki "new simple application" seçeneği ile yeni bir uygulama oluşturuyoruz. Mesela uygulamamızın adı "deneme" olsun. Tekrar web2py'ın olduğu klasrü açıyoruz. Oradan applications'a giriyoruz. Oradan "deneme" isimli klasre, ikinci postta verdiğim solidfiles linkinden indirdiğiniz dosyaları atarsanız, bu konuda yazılmış tüm kodlar, çalışır halde uygulamanızda olacaktır. Edit: müridin sorusu da teamviewer üzerinden çzüldü :) pcdoktor636 tarafından 25/Haz/15 19:32 tarihinde düzenlenmiştir

Mobilden hiçbir şey grünmüyor. Fav attım pc ye geçince bakarız artık. dudaklarına değen yağmur bir parça rujundan çalar. dudaklarına değen yağmur bile, bir parça rujundan çalar. benim değemediğim o dudaklarına değen yağmur, bir parça rujundan çalar. // bi gün buralarda yeni bir ağaç yeşerecek ve biz glgesinde mürekkepler tüketeceğiz //

Bizde nelerle uğraşak : #- -coding:utf-8- - author = 'ka1'import urllib. requestimport reimport bs4def getStack : sonuc = urller = ac = urllib. request. urlopen . read soup = bs4. BeautifulSoup for ara in soup. findAll : sonuc. append(ara. get_text p = re.compile('(\questions\/ \/ .+)".+data', re. MULTILINE) nest = re. findall(p, ac. decode if nest: for i in nest: urller. append varan1 = varan2 = urller = urller varan2 = varan2 for i, b in zip(varan2, urller): print("Baslik:%s, url:wwww.stackoverflow.com/%s" % getStack(" urllib2") IRC bot için yapılmıştır query kısmı değiştirilcek :)