Mesaj sistemi için Sqlite3 uygun mudur?

Mesajı açık bi şekilde göndereceğin için ağ trafiğini izleyen biri bütün mesaj içeriğini okuyabilir ve değiştirebilir bununla ilgili ne yapmayı düşünüyosun?

Onu yaptıktan sonra düşünürüm :slight_smile:

1 Beğeni

@aib @coderistan Hocalarım,

2 - İstekler ve yanıtlar - Django REST çerçevesi (django-rest-framework.org)
Django Rest Framework – An Introduction – Real Python

Burası sanırım ihtiyacımı görecek. Fakat sizlerin daha iyi bir kaynak tavsiyesi varsa alabilirim.

Django Rest Framework zaten dahili yetkilendirme mekanizması içerdiği için sizin bir view yazmanıza gerek yok. Ben örnek olsun diye basit bir django/rest projesi oluşturup burada paylaşacağım. Nasıl istek atılacağını da göstereceğim gün içinde.

3 Beğeni

Tamamdır çok teşekkür ederim. Vallahi ben şu ana kadar, kodlama anlamında en çok yardımcı olan forum olarak buradan iyisini görmedim. Kusura bakmayın kafanızı patlattıysam. Beklemedeyim.

3 Beğeni

Şu django projesini indirin. Ve sonra proje ana dizininde sırayla aşağıdaki komutları çalıştırın

python -m pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser --username=grata
python manage.py runserver

Proje ana dizininde login_test.py dosyası var. Onu çalıştırın. Kullanıcı adı ve şifre soracaktır. Kullanıcı adınız grata(yukarıda belirledik) şifreniz de yukarıda kendi belirlediğiniz şifre(createsuperuser aşamasında yani). Eğer her şey yolunda giderse ekranda Hello, grata yazısını görmeniz gerekir.

import requests

username = input("Username: ")
password = input("Password: ")

# tokeni elde etmek için giriş yapmaya çalışıyoruz
response = requests.post(
    "http://localhost:8000/api/api-token-auth/",
    data={"username": username, "password": password}
)

# bilgilerimiz doğru ise
if response.status_code == 200:
    token = response.json()["token"]
    print("Tokeniniz: {}".format(token))

    # tokeni kullanarak sunucuya istek atılabilir

    response = requests.get(
        "http://localhost:8000/api/hello/",
        headers={"Authorization": "Token {}".format(token)}
    )
    
    print(response.content.decode())

Projede token temelli doğrulama kullandım. Bir kere giriş yaptıktan sonra token’i elde edersiniz, sonra bu tokeni kullanarak diğer istekleri gerçekleştirebilirsiniz. Doğru olan, belirli aralıklarla yenilenen token kullanmak ama ben hızlı ve pratik olsun, genel işleyişi göstereyim diye basit token kullandım.

Admin arayüzüne girerek kendiniz birkaç kullanıcı oluşturabilirsiniz.

<coderistan> python login_test.py
Username: deneme_kullanici
Password: deneme.1223
Tokeniniz: 5135076815bbfa646fd68f45e18c1a9748156527
"Hello, deneme_kullanici"
4 Beğeni


Hocam dediklerinizi yaptım. Kullanıcıyı vb. oluşturdum. Fakat böyle bir sorun alıyorum. Ayrıca:

1 Beğeni

Anasayfa için bir view yazmadık o yüzden hata alıyorsunuz. Browser üzerinden sadece http://localhost:8000/admin/ sayfasını kullanacaksınız zaten.

1 Beğeni

Teşekkürler. Kusura bakmayın biraz aklım ermedi. Bu sistemi, kayıt sistemi olarak tam olarak nasıl kullanacağım? Ben bu paneli ne için kullanacağım. Cidden kafam karıştı. Kusura bakmayın.

1 Beğeni

Hmm. Bence biraz web programlama çalışın. Temel konularda eksiklik var, onları tamamlamadan size anlatacaklarımı anlamanız biraz zor. Önce bir backend yol haritası oluşturun kendinize, temel konuları öğrenin. Sonra istediğiniz seviyeye yaklaşırsınız ve taşlar biraz daha yerine oturur.

1 Beğeni

Anladım, evet biraz geliştireceğim web programlama alanını. Şimdi benim bu kodlardan anladığım, baştaki kurulumda bir admin hesabı oluşturuyoruz. Bu admin hesabı her şeyi yönetiyor. Benim aklımdaki soru, bir kullanıcı bunu ne haliyle bilgisayarına indirecek? Bu sistem tam olarak nasıl işliyor? Cidden özür dilerim kafanızı patlattıysam.

1 Beğeni

Hayır kafa patlatmadınız ama dediğim gibi aslında bir romandaki bir harfin ne olduğunu sorduğunuz için size taa alfabeden anlatmam gerekecek. Buna vaktim yok maalesef. Ama yine de kısa bir cevap vereyim. Bu sadece sqlite veritabanını kullanan web framework. Kullanıcılar sadece sizin yazacağınız mobil, masaüstü veya başka bir platform programını indirip uygulamaya giriş yapacak. Siz de kullanıcı bilgilerini alıp bu framework’ün çalıştığı adrese (mesela grata.com) istek atacaksınız. Bilgiler doğruysa token dönecek, bilgiler yanlışsa bir şey dönmeyecek.

Yani konu buraya sqlite veritabanını taşımamanız gerektiğini anlatmak için örnek verilmesi üzerinden geldi. Bilmiyorum daha basit çözüm öneren varsa onu kullanın, ben biraz ileri gitmiş olabilirim…

1 Beğeni

Peki bir şey daha sormak istiyorum. Bu sistem anladığım kadarıyla; kullanıcı kayıt python dosyasında, kayıt oluyor ve bu panele bilgiler düşüyor.

Buraya kadar bir sıkıntı yok. Sonra ise, kullanıcı giriş yapmaya çalışıyor. Giriş yaparken, veri tabanına kayıt edilen kullanıcı adını + şifreyi sorguluyor. Ve bize özel bir token atanıyor. Bu tokenle site üzerinden bir URL’ye giriş yapılıyor. Bu URL’den olumlu bir dönüş yapılırsa ayrı, olumsuz dönüş yapılırsa ayrı yanıt veriyor. Token onayı True veya False oluyor.

Eğer bilgiler vs vs doğruysa artık sisteme giriş yapmış oluyor. Ve bu gösterdiğiniz sistem, sadece kayıt ve giriş sistemini sağlıyor.

Benim, kullanıcı eğer siteden token ile olumlu bir dönüş alırsa, veritabanı işlemlerine giriş yapma kısmını yapmam gerek. Zaten bilgiler yanlışsa bir işlem yapılmıyor.

Kısacası, siz sadece bana giriş ve kayıt sistemini verdiniz. Ben if sistemi ile giriş yapıldıysa, ona göre Veri tabanı işlemlerini yapacağım. Ek olarak, yapılan tüm işlemler, attığınız dosyada oluşturacağım yeni DB dosyasına kaydedilecek.

Doğru muyum?

1 Beğeni

Token alma kısmı doğru, evet kullanıcı giriş yaptıktan sonra sisteme giriş anahtarı elde etmiş olur. Artık buraya yapacağınız her sorguda anahtarı da göndermeniz gerekir.

Ben projeyi kayıt ve giriş sistemiyle verdim evet. Sistemi geliştirmek sizin django bilginize kalmış. if else ile yapmayacaksınız, zaten tokeniniz varsa rest_framework aşağıdaki decoratörlerle gerekli kontrolleri yapıp sizi ilgili view’a yönlendirir.

@api_view(["GET"])
@authentication_classes([TokenAuthentication])
@permission_classes([IsAuthenticated])
def hello(request):
    return Response("Hello, {}".format(request.user.username))

DB dosyası da projenizin ana dizinine oluşturuldu, görebilirsiniz. Dediğim gibi, gerisi sizi django bilginize kalmış.

1 Beğeni

Bu iş çok kafamı karıştıracak gibi görünüyor :grin: Tamamdır bu dosyaların ana olayını anladım gibi. Bundan sonra yapabilirim inşallah. Teşekkür ederim destekleriniz için :slight_smile:

2 Beğeni

Kafa karışıklığı iyidir, zorlandıkça öğrenirsiniz. Rica ederim, kolay gelsin.

3 Beğeni