folder Tahribat.com Forumları
linefolder Python
linefolder Web2py İle Ufak Sözlük Kodlamak [Döküman]



Web2py İle Ufak Sözlük Kodlamak [Döküman]

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pcdoktor636
    pcdoktor636's avatar
    Kayıt Tarihi: 12/Ocak/2010
    Erkek

    Merhabalar müridler/mürideler.

    Web development tarafına biraz yönelmek istedim. İşe ilk başta PHP(PreHistoric Programming) 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 sözlük/reddit tarzı scripti kodlayabilirsiniz.

     

    Benim bu konuda paylaşacağım da, ufak bir "sözlüğü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 sözlü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 görüyoruz, 'auth.signature' isimli, field() içerisinde olmayan bir fonksiyon.

    Bu fonksiyon, yapılan her yorum için bir "signature" görevi görü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. (MVC yapısı)

    Ö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(db.auth_user).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 göstereceğiz. userid ile de kullanıcının id'sini alıyoruz, bunu anasayfada kullanıcıyı profiline yönlendirmek için kullanacağız.

    userlist değişkenini de farklı bir görünüm denerken kullanmıştım, bunun burda bir işi yok.

    Şimdi de index'in view kısmına bakalım.

    {{extend 'layout.html'}}
    <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={{=URL('userlist')}}>here</a>
    
    {{if not logged:}}
    <p>
        To use some features like creating blog posts, you must sign up.
        You can find the signing form at upper-right corner.
    </p>
    {{pass}}
    
    {{if logged:}}
    
    <p>
        Welcome, {{=username}}. Click <a href={{=URL('profile', args=userid)}}>here</a> to see your profile.
    </p>
    {{pass}}
    
    <p>
        To create a post, click <a href={{=URL('create')}}>here</a>.
    </p>
    



    HTML kodlarımızın arasına {{ }} ile web2py kodlarımızı da ekleyebiliyoruz.

    İlk satırdaki {{extend 'layout.html'}} web2py default görünümünü sağlıyor bize. Sonraki satırda da bootstrap görünümünü denemek için eklemiştim.

    click <a href={{=URL('userlist')}}>here</a> ile de tüm kullanıcıların listesinin olduğu userlist sayfasına link vermiş oluyoruz.

    {{if not logged:}}
    <p>
        To use some features like creating blog posts, you must sign up.
        You can find the signing form at upper-right corner.
    </p>
    {{pass}}

     

    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 {{pass}} kullanarak gösteriyoruz.

     

    {{if logged:}}
    
    <p>
        Welcome, {{=username}}. Click <a href={{=URL('profile', args=userid)}}>here</a> to see your profile.
    </p>
    {{pass}}



    if logged diyerek, eğer login olunmuş ise, kullanıcımızı selamlıyor, profiline gitmesi için tıklayabileceği linki gösteriyoruz. 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 yönlendiriyoruz. Bunun tam adresi şöyle olacaktır: http://127.0.0.1:8000/newclone/default/profile/3

    Gördüğünüz üzere profile'den sonra "3" diye bir şey göndermişiz. İşte bu, benim o an giriş yaptığım kullanıcının id'si. Daha sonra göreceğiz, profile fonksiyonu da link üzerinden bu değişkeni alarak kullanıcının kimliğini belirleyip ona göre bilgileri gösteriyor.

     

    En sona da bu satır kaldı:

    <p>
        To create a post, click <a href={{=URL('create')}}>here</a>.
    </p>
    

     

    Bu da, aynı yukarıdaki gibi, kullanıcıyı 'create' sayfasına yönlendiriyor.

     

    ----------------------

    Index ile işimiz bitti :)

    Gelelim userlist fonksiyonuna. Önce controller'daki kodlar:

    @auth.requires_login()
    def userlist():
        userlist=db(db.auth_user).select()
        return locals()

     

    ilk başta @auth.requires_login() diye bir fonksiyon görüyoruz. Bunun yaptığı şey, eğer bu linke ulaşmaya çalışan kişi, siteye giriş yapmamış ise ona hata mesajı döndü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(db.auth_user).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(first_name) 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>
        {{for user in userlist:}}
        <p>
            Username: <a href="{{=URL('profile', args=user.id)}}">{{=user.first_name}}</a>
        </p>
        {{pass}}
    

     

    {{for user in userlist:}} diyerek, userlist'in bize getireceği her user için işlemleri tekrarlatıyoruz. İlk gördüğü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 göstermekte.

    @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(db.blog_comment).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 söylüyor. cast=int ise, değerin integer olmak zorunda olduğunu söylüyor. Eğer bir hata çıkarsa da, or redirect(URL('../../static/404.html')) ile 404 sayfamıza yönlendiriyoruz. 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. Böylece, bu profil üzerinde yapılacak tüm yorumlar, linkteki profil id'sine gidiyor.

    db.blog_comment.made_for.writable=False
    db.blog_comment.made_for.readable=False

    Bu satırlarla da, bu değerin, oluşturacağımız yorum yapma formunda, kullanıcıya gözükmemesini, ve değiştirilememesini sağlıyoruz. Bazen, kullanıcıya belli bir değeri göstermek, ama kullanıcının modifiye etmesini de engellemek istediğiniz durumlar olabilir. Bu durumlarda, bu satırları kullanabilirsiniz.

    form=SQLFORM(db.blog_comment).process() Yeni bir özellik daha.  SQLFORM ile, belirttiğimiz tablo'yu bir form haline dönüş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ı göstereceğiz.

     

    Geldik profile view kısmına.

    {{extend 'layout.html'}}
    
    <br>
    {{for line in info:}}
    <p>
        Welcome to {{=line.first_name}}'s profile.
    </p>
    <p>
        {{=line.first_name}}'s email is: {{=line.email}}
    </p>
    {{pass}}
    
    <p>
        Make a comment for {{=line.first_name}}:
        {{=form}}
    </p>
    
    All comments for {{=line.first_name}} is listed below.
    {{for comment in comments:}}
    <p>
        Comment made by: <i>{{=db.auth_user(id=comment.created_by).first_name}}</i>
        <br>
        Comment: {{=comment.body}}
    </p>
    {{pass}}
    

     

    Bir loop ile, info'da aldığımız bilgileri sırası ile göstertiyoruz.

    <p>
        Welcome to {{=line.first_name}}'s profile.
    </p>
    <p>
        {{=line.first_name}}'s email is: {{=line.email}}
    </p>

    Önce, ziyaret ettiğimiz profilin sahibinin ismini, sonra da email adresini gösteriyoruz.

    <p>
        Make a comment for {{=line.first_name}}:
        {{=form}}
    </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 {{=line.first_name}} is listed below.
    {{for comment in comments:}}
    <p>
        Comment made by: <i>{{=db.auth_user(id=comment.created_by).first_name}}</i>
        <br>
        Comment: {{=comment.body}}
    </p>
    {{pass}}

     

    Ö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 gösteriyoruz.

     

    ---------------------------------

    Bunu da bitirdik, artık post atma kısmına geçebiliriz.

    @auth.requires_login()
    def create():
        post=SQLFORM(db.blog_post).process()
        if post.accepted:
            response.flash=("Posted successfully")
        elif post.errors:
            response.flash=("Error, some fields are not valid.")
        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ı gösteriyoruz.

    View kısmına gelelim:

    {{extend 'layout.html'}}
    <link rel="stylesheet" href="../static/css/bootstrap.min.css">
    <h1>
        Create awesome posts.
    </h1>
    
    {{=post}}
    

     

    Gayet basit bir sayfa, tek yaptığı oluşturduğumuz form'u göstermek.

     

    -------------------------------------

    def list():
        topics=db(db.blog_post).select()
        return locals()
    

    Yine gayet basit bir fonksiyon. Tek yaptığı, şu ana kadar açılmış konuları listelemek.

     

    View:

    {{extend 'layout.html'}}
    {{for topic in topics:}}
    <a href={{=URL('shitgotserious', args=topic.id)}}>{{=topic.title}}</a>
    <br>
    {{pass}}
    

    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 gördüğü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 :)

    {{extend 'layout.html'}}
    {{for row in rows:}}
    <h3>
        Title: {{=row.title}}
    </h3>
    
    <br>
    <p>
        {{=row.body}}
    </p>
    
    <p>
        Posted by: <a href={{=URL('profile', args=row.created_by)}}>{{=db.auth_user(id=row.created_by).first_name}}</a>
    </p>
    
    
    {{pass}}
    

    Önce h3 içerisinde başlığı gösteriyoruz. Sonra row.body ile içeriği, daha sonra da kim tarafından post edildiğini gösteriyoruz.

    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 görü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, gösterirseniz 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
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pcdoktor636
    pcdoktor636's avatar
    Kayıt Tarihi: 12/Ocak/2010
    Erkek

    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 böylece.

    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 klasörünüzdeki oluşturduğunuz application'ın klasörü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

    Dökümantasyon:

    http://web2py.com/book

     

     

    pcdoktor636 tarafından 19/Haz/15 22:39 tarihinde düzenlenmiştir
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo

    Bizde nelerle uğraşak :

    #-*-coding:utf-8-*-
    __author__ = 'ka1'

    import urllib.request
    import re
    import bs4

    def getStack(sorgu):
    sonuc = []
    urller = []
    ac = urllib.request.urlopen("http://stackoverflow.com/search?q="+sorgu).read()
    soup = bs4.BeautifulSoup(ac)
    for ara in soup.findAll("div", class_="result-link"):

    sonuc.append(ara.get_text())

    p = re.compile('(\questions\/[0-9]{0,15}\/[a-z].+)".+data', re.MULTILINE)
    nest = re.findall(p,ac.decode())
    if nest:
    for i in nest:
    urller.append(i)


    varan1 = [i.replace('\n', '') for i in sonuc]
    varan2 = [i.strip(' ') for i in varan1]
    urller = urller[0:5]
    varan2 = varan2[0:5]

    for i,b in zip(varan2,urller):
    print("Baslik:%s , url:wwww.stackoverflow.com/%s" %(i,b))

    getStack("[python]urllib2")



    IRC bot için yapılmıştır query kısmı değiştirilcek :)

     

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SkynetX
    SkynetX's avatar
    Kayıt Tarihi: 06/Şubat/2015
    Erkek

    Mulder 'i gördüm mutlu oldum. :D

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pcdoktor636
    pcdoktor636's avatar
    Kayıt Tarihi: 12/Ocak/2010
    Erkek

    @SkynetX bu californication'dan hocam :)

    @0x656e python olsun çamurdan olsun

    @J4x hocam senin mesaj gözükmüyor, sildin galiba. Merak ettim yorumunu :)

     

    O kadar yazdık bi up çekelim.

     

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Meczup
    1049
    1049's avatar
    Kayıt Tarihi: 04/Ağustos/2005
    Homo

    Mobilden hiçbir şey görü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 gölgesinde mürekkepler tüketeceğiz //
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Meczup
    1049
    1049's avatar
    Kayıt Tarihi: 04/Ağustos/2005
    Homo

    Bugün deneme fırsatım oldu da başarısız oldum. Sanırım daha önce böyle 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 gölgesinde mürekkepler tüketeceğiz //
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Meczup
    1049
    1049's avatar
    Kayıt Tarihi: 04/Ağustos/2005
    Homo

    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 gömdü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

    {{extend 'layout.html'}}
    
    
    {{for line in info:}}

    Welcome to {{=line.first_name}}'s profile.

    {{=line.first_name}}'s email is: {{=line.email}}

    {{pass}}

    Make a comment for {{=line.first_name}}: {{=form}}

    All comments for {{=line.first_name}} is listed below.
    {{for comment in comments:}}

    Comment made by: {{=db.auth_user(id=comment.created_by).first_name}}
    Comment: {{=comment.body}}

     

    {{pass}}
     

    ş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 görünüm şeklini download diyip içindekileri kopyalayıp static altındaki css/bootstrap-theme-min.css içerisine kopyaladığımızda görünümü tamamen değiştirebiliyoruz. Alt tarafa bununla ilgili birkaç görsel ekleyeceğim.

     

     

     Ekleme: Yalnız şöyle bir hata alıyorum: exposes: callcreatecreatedownloadindexlistprofileshitgotserioususeruserlist  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 gölgesinde mürekkepler tüketeceğiz //
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pcdoktor636
    pcdoktor636's avatar
    Kayıt Tarihi: 12/Ocak/2010
    Erkek

    Hocam mesajı ilk yazdığında özel mesajla okula gitmem gerektiğini, geldiğimde bakabileceğimi söylemiş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 klasörde terminali açıyoruz.

    Sonra "python web2py.py" yazarak web2py'ı çalıştırıyoruz. Bu işlemin ardından bir gui gelecek, orada server ip(default localhost) 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 klasörü açıyoruz. Oradan applications'a giriyoruz. Oradan "deneme" isimli klasöre, 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
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    u235
    u235's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek

    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,sözlük falan yaptın mı hiç ?

    2.Nie django değilde web2py seçtin ?

  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pcdoktor636
    pcdoktor636's avatar
    Kayıt Tarihi: 12/Ocak/2010
    Erkek
    u235 bunu yazdı

    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,sözlü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: (Kodu kaldırdım, xss koruması vs. devreye girdi herhalde, kodu kaldırdı formatı bozdu :P)

    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/104823438

    Henü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 göz gezdirdim, flask'e çok benzediğini gördü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
Toplam Hit: 4347 Toplam Mesaj: 11
python web2py web framework