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
@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.
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.
Ş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"
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.
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.
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.
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.
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…
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?
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ış.
Bu iş çok kafamı karıştıracak gibi görünüyor Tamamdır bu dosyaların ana olayını anladım gibi. Bundan sonra yapabilirim inşallah. Teşekkür ederim destekleriniz için
Kafa karışıklığı iyidir, zorlandıkça öğrenirsiniz. Rica ederim, kolay gelsin.