Komponent stok takip sistemi için veritabanı tasarımı

  1. categories Many-to-One
  2. component_document_links Many-to-Many
  3. components Many-to-One
  4. location_types ve locations One-to-Many
  5. manufacturers, packages, purchases, ve suppliers One-to-One

doğrumu abi like atsan yeter doğruysa :D
 
Son düzenleme:
normalde MVC mimarisi kullanılıyor ben M den sonra sorunlar yaşıyacağım için html kısmında models.py dosyamı sağam yapıyım
 
  1. categories Many-to-One
  2. component_document_links Many-to-Many
  3. components Many-to-One
  4. location_types ve locations One-to-Many
  5. manufacturers, packages, purchases, ve suppliers One-to-One

doğrumu abi like atsan yeter doğruysa :D

Yav sen şimdi benim orada yaptığımı kesin doğrudur diye varsayma. Sen bu işlere daha hakimsin. Orada önemli olan hem tabloların normalize edilmiş olması, hem de mantığın doğru olması. Ben DbSchema kullanarak tabloların normalize olduğunu gördüm, ama her normalize tablo da olması gereken doğru tablo değil.

Veri yapısı anlamında bizim işimizi göreceğine önce sen de bir kanaat getir. Bana göre işimizi görüyor.
 
  • Beğen
Reactions: nt
veri tabanı işinii bitirdim MVC nin m si tamam yalnız bir sorum olucak bu projeyi githubdan paylaşıp her kullanıcının iindirip local olarak kullanmasınımı istiyoruz yoksa biz www de paylaşıcağızmı (user) kısmında ona göre ayarlamalar yapıcağım

lokal olarak kullansalar bile şifre ile griş ekranı falan ekliyeceğim buda db için hash demek

www ise user lara active false yapıcagım admin onaylamadan giremiyecek

birini seçersek bazı şeyleri false yapmam gerekli

ayrıca barcode konusuda işlemek istiyorum modele QR kodları, Data Matrix, EAN-13, vb. hangisi kullanılacak :)

**ekstra eklediklerim modele : ekleme editleme tarih damgası [eklendi]
her component için benzersiz uzantı bu şekilde daha kolay ulaşılabilir [eklendi]
veeee süpriz her kullanıcının ayarsayfası olucak orda atıyorum 1 yada 100 gibi bir değer belirleyip componentler için bu değerin altına düşünce uyarı sistemi bunu user mail ilede bağlıya bilirim 5 adet şundan kaldı gibi bir uyarı maili hoş olur

user kısmı bu ama nasıl ilerliyeceğimize göre değiştiricem
Python:
class CustomUserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('The Email field must be set')
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password=None, **extra_fields):
        extra_fields.setdefault('is_staff', True)#burda yetki veriyoruz
        extra_fields.setdefault('is_superuser', True)#bu tam yetki için
        return self.create_user(email, password, **extra_fields)
:)
 
Son düzenleme:
Peki, nasıl çalıştıracağız bu uygulamayı?
Django yüklü...
Prosedür neredeydi bende yükleyeyim :)
örnek bir blog oluşturmak için bir rehber paylaştım
 
www. ye göre yapıyorum 6 hanelli kod yollama sistemide ekledim barkod olayını araştırıyım onuda ekledikmi views kısmını geçicem
 
:p
how to write a code x5
 

Ekler

  • Ekran Kaydı - 08-12-2023 09:35:53.webm
    318.4 KB
Bence ilk başta lokal olarak çalışacak şekilde tasarlamak daha mantıklı. Sonradan isteyen onu bir hosting'e de yükler.

Hemen ilave özellik moduna girdin, barkod, multiuser, daha neler neler :D Başlangıç için en önemlisi çekirdek yapının iyi çalışması. Yani hızlı veri girilebilmesi, veri silinince veya taşınınca veya düzenlenince veritabanının tutarlı kalmaya devam etmesi. Zor olan bu, yoksa barkod işi bir şekilde hallolur.
 
  • Haha
Reactions: nt
Şu örneği vereyim. Saklama yerleri ekledin diyelim:

Atölye - Dolap A - Raf 1
Atölye - Dolap A - Raf 2
Atölye - Dolap A - Raf 3

Sonra da bir sürü komponent ekledin bu saklama yerlerini kullanan. Sonra da Dolap A saklama yerini sildin. Ne yapılması lazım? Dolap A ve altındaki hiyerarşiyi kullanan bütün komponentlerden bu saklama yerinin uzaklaştırılması lazım ve onun yerine SADECE Atölye kalmalı.
 
  • Beğen
Reactions: nt
@taydin
Dolap A'nın ve altındaki hiyerarşinin kullanıldığı tüm komponentleri kaldırmak ve yerine sadece Atölye'yi bırakmak istiyorsak
location component sınıfının altına ekliyeceğiz daha sonra views da buna uygun hiyerarşi eklememiz gerekecek
bizde location ve locationtype olarak var şuanda bunu güncelliyebilir alt kategoriler ekliyebilriz ama ben daha çok genel duruma odaklanıp olabildiğince eksiksiz şekilde bir web uygulaması tasarlamak istiyorum başlangıç olarak şuanda delete yok ama ekleriz abi :)
 
Son düzenleme:
1. çok dildesteği kim nerden bağlanırsa o dil -ispanyadan bağlanan ispanyolca -afrikadan bağlanan afrikaça görücek siteyi (ayrıca türkçesie ingilizceden çeviri olucak)
2. detaylı raporlama-nezaman ne oldu
3. arama-filtreleme (component,manufacturer,pakage,location gibi)
4. gelişmiş izleme analiz stok hareketleri icin- yerdeğişimi oldumu neti nezaman ekledik nezaman sildik
5. gelişmiş admin paneli
6. bazı kücük olabilecek hataları arıyorum (örnek aynı üreticiyi bir sefer kaydetmek falan)
bunarın ardından test yazıp views ve templates e geçiyorum

@taydin başka bir geliştirme varsa ekliyim abi ben bunları ekledim
 
Son düzenleme:
Projenin temelini attım djangonun ORM tabanlı düşünürsek M-V-C kısmının M kısmı tamam tabiki sorunlar çıkacaktır. Daha önce açık kaynaklı projeler geliştirdim ama bunlar birer sayfalık kodlardı ve hassas bilgiler içermiyordu.

benim asıl sorunum:

özellikle settings.py dosyasında bulunan kritik bilgileri (örneğin, sunucu şifreleri, secret key, media root ayarları, mail gönderme işlemleri için mail adresi ve şifre) nasıl güvenli bir şekilde yönetebilirim?

Projemdeki bu bilgileri paylaşmadan ve güvende tutarak açık kaynak bir şekilde geliştirmek istiyorum.

Henüz django-decouple veya benzeri bir kütüphane kullanmadan, basit bir yapıda bu hassas bilgileri nasıl saklayabilirim?

Bu konuda önerileriniz ve tecrübeleriniz nelerdir?


Dosya örneği bu şekilde anlamanız için
Python:
#settings.py
SERVER_HOST = 'host'
SERVER_PORT = 'port'
SERVER_USERNAME = 'username'
SERVER_PASSWORD = 'password'

SECRET_KEY = 54654688668468

DEBUG = True

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'your-smtp-server.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-email@example.com'
EMAIL_HOST_PASSWORD = 'your-email-password'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

proje yapım bu şekilde ve olabildiiğince güvenli şekilde yüklemek istiyorum
Bash:
~/Masaüstü/mekatronik_org$ tree
.
└── envanter
    ├── envanter
    │   ├── asgi.py
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-310.pyc
    │   │   ├── settings.cpython-310.pyc
    │   │   └── urls.cpython-310.pyc
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py
    ├── openstockmate
    │   ├── admin.py
    │   ├── apps.py
    │   ├── forms.py
    │   ├── __init__.py
    │   ├── migrations
    │   │   └── __init__.py
    │   ├── models.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-310.pyc
    │   │   ├── apps.cpython-310.pyc
    │   │   ├── forms.cpython-310.pyc
    │   │   ├── __init__.cpython-310.pyc
    │   │   ├── models.cpython-310.pyc
    │   │   ├── urls.cpython-310.pyc
    │   │   └── views.cpython-310.pyc
    │   ├── templates
    │   │   ├── component_list.html
    │   │   └── index.html
    │   ├── tests.py
    │   ├── urls.py
    │   └── views.py
    └── openstockmate_algoritma.py

7 directories, 28 files
html kısmına geçiyorum o sebeble soruyorum


Ekran Görüntüsü - 2023-12-09 03-49-54.png

ilk görüntüsü ♥

Ekran Görüntüsü - 2023-12-09 03-58-25.png
 
Son düzenleme:
180 gün şifre kullanım süresi 8 karakter büyük küçük harf ve bu kategory silme işinide ekledim senin dediğin gibi abi

Ekran Görüntüsü - 2023-12-09 09-39-29.png
 
Son düzenleme:
projenin yapısı bu şekilde şuanda:
└── envanter
    ├── envanter
    │   ├── asgi.py
    │   ├── __init__.py
    │   ├── __pycache__
    │   │   ├── __init__.cpython-310.pyc
    │   │   ├── settings.cpython-310.pyc
    │   │   └── urls.cpython-310.pyc
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py
    ├── openstockmate
    │   ├── admin.py
    │   ├── apps.py
    │   ├── forms.py
    │   ├── __init__.py
    │   ├── migrations
    │   │   └── __init__.py
    │   ├── models.py
    │   ├── __pycache__
    │   │   ├── admin.cpython-310.pyc
    │   │   ├── apps.cpython-310.pyc
    │   │   ├── forms.cpython-310.pyc
    │   │   ├── __init__.cpython-310.pyc
    │   │   ├── models.cpython-310.pyc
    │   │   ├── urls.cpython-310.pyc
    │   │   └── views.cpython-310.pyc
    │   ├── templates
    │   │   ├── add_component.html
    │   │   ├── base.html
    │   │   ├── component_list.html
    │   │   ├── home.html
    │   │   ├── index.html
    │   │   ├── login.html
    │   │   ├── password_reset.html
    │   │   ├── profile.html
    │   │   ├── register.html
    │   │   ├── stock_table.html
    │   │   └── view_feedback.html
    │   ├── tests.py
    │   ├── urls.py
    │   └── views.py
    └── openstockmate_algoritma.py
 
Henüz django-decouple veya benzeri bir kütüphane kullanmadan, basit bir yapıda bu hassas bilgileri nasıl saklayabilirim?

Database bilgilerini plain text olacak sakla gitsin. Xenforo bile bunları bir php dosyasında plain text olarak saklıyor.

Kullanıcı şifresi bile şu anda plain text saklanabilir, bence bir sıkıntı yok :)
 
  • Beğen
Reactions: nt
Bu arada şemayı biraz daha derli toplu hale getirdim. public_documents tablosuna primary key ekledim.

1702112351787.png
 
  • Beğen
Reactions: nt
Database bilgilerini plain text olacak sakla gitsin. Xenforo bile bunları bir php dosyasında plain text olarak saklıyor.

Kullanıcı şifresi bile şu anda plain text saklanabilir, bence bir sıkıntı yok :)
yok onlarda sorun yok abi bizim database şifrelerimiz ve atıyorum register kısmında mail gonderen mailimiz falan gibi hassas
Bu arada şemayı biraz daha derli toplu hale getirdim. public_documents tablosuna primary key ekledim.
bizdeki models yani database ile ilişkili hali bu şekilde çözmüştüm:
class StokPage(models.Model):
    user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    total_stock_count = models.IntegerField(default=0)
    def __str__(self):
        return f"{self.user.username}'s Stok Page"
 
stok altert :D bomist de varmı bu beee:)
Python:
def send_alert_email(self):
        subject = 'Stock Alert'
        message = f"The stock for {self.component.name} is below the threshold ({self.threshold})."
        from_email = 'noreply@openstockmate.org' 
        to_email = [self.user.email]

        send_mail(subject, message, from_email, to_email)
 
Birşey değişmedi database'de yav. Sadece şemada kutuları biraz hizaladım. Bir de public_documents tablosunun id si primary key olması lazım, daha önce düz key idi.
 
  • Beğen
Reactions: nt

Çevrimiçi personel

Forum istatistikleri

Konular
6,953
Mesajlar
118,778
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top