تقنيات نور التعليمية تقنيات نور التعليمية

آخر الأخبار

جاري التحميل ...

الدرس 17: ربط نظام تسجيل الدخول والصلاحيات بقاعدة بيانات SQLite

📌 الفكرة

بدل ما نخزن بيانات المستخدمين بشكل ثابت في الكود، هنعتمد على قاعدة بيانات SQLite بحيث:

  • كل مستخدم له اسم مستخدم (username)، كلمة مرور (password)، ودور (role: Admin / User).
  • عند تسجيل الدخول نتحقق من البيانات من قاعدة البيانات مباشرة.
قاعدة بيانات SQLite


🖌️ خطوات العمل في Qt Designer

1- نستخدم نفس نافذة تسجيل الدخول (login.ui) من الدرس السابق:
  • QLineEdit لاسم المستخدم.
  • QLineEdit لكلمة المرور (echoMode = Password).
  • QPushButton لتسجيل الدخول.

2- نستخدم نفس الواجهات:

  • admin.ui (واجهة المسؤول).
  • user.ui (واجهة المستخدم العادي).


💻 الكود (باستخدام SQLite)

import sys
import sqlite3
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QDialog, QMessageBox, QMainWindow


# نافذة المسؤول (Admin)
class AdminWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("admin.ui", self)


# نافذة المستخدم (User)
class UserWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("user.ui", self)


# نافذة تسجيل الدخول
class LoginWindow(QDialog):
    def __init__(self):
        super().__init__()
        uic.loadUi("login.ui", self)

        # عناصر واجهة المستخدم
        self.login_button = self.findChild(type(self.findChild(object, "QPushButton")), "loginButton")
        self.username_input = self.findChild(type(self.findChild(object, "QLineEdit")), "usernameLineEdit")
        self.password_input = self.findChild(type(self.findChild(object, "QLineEdit")), "passwordLineEdit")

        # ربط الزر
        self.login_button.clicked.connect(self.check_login)

        # إنشاء قاعدة البيانات
        self.create_db()

    def create_db(self):
        """إنشاء قاعدة بيانات وإضافة مستخدمين تجريبيين إذا لم يكونوا موجودين"""
        conn = sqlite3.connect("users.db")
        cursor = conn.cursor()
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                username TEXT UNIQUE,
                password TEXT,
                role TEXT
            )
        """)
        # إضافة مستخدمين افتراضيين
        try:
            cursor.execute("INSERT INTO users (username, password, role) VALUES (?, ?, ?)", ("admin", "1234", "Admin"))
            cursor.execute("INSERT INTO users (username, password, role) VALUES (?, ?, ?)", ("user", "0000", "User"))
            conn.commit()
        except sqlite3.IntegrityError:
            pass  # المستخدمون موجودون بالفعل
        conn.close()

    def check_login(self):
        username = self.username_input.text()
        password = self.password_input.text()

        conn = sqlite3.connect("users.db")
        cursor = conn.cursor()
        cursor.execute("SELECT role FROM users WHERE username=? AND password=?", (username, password))
        result = cursor.fetchone()
        conn.close()

        if result:
            role = result[0]
            self.accept()
            if role == "Admin":
                self.admin_window = AdminWindow()
                self.admin_window.show()
            elif role == "User":
                self.user_window = UserWindow()
                self.user_window.show()
        else:
            QMessageBox.warning(self, "خطأ", "اسم المستخدم أو كلمة المرور غير صحيحة")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    login = LoginWindow()
    login.show()
    sys.exit(app.exec_())

✅ شرح الفكرة

1- عند أول تشغيل، يتم إنشاء قاعدة بيانات users.db وجدول users إذا لم يكن موجودًا.

2- يتم إضافة مستخدمين افتراضيين:

  • admin / 1234 بدور Admin.
  • user / 0000 بدور User.

3-عند تسجيل الدخول يتم التحقق من البيانات:

  • إذا كان الدور Admin → تفتح نافذة admin.ui.
  • إذا كان الدور User → تفتح نافذة user.ui.
  • إذا لم تتطابق → يظهر خطأ.


📌 بهذا الشكل عندك نظام دخول متكامل مع قاعدة بيانات SQLite باستخدام PyQt Designer.

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

إذا أعجبك محتوى مدونتنا نتمنى البقاء على تواصل دائم ، فقط قم بإدخال بريدك الإلكتروني للإشتراك في بريد المدونة السريع ليصلك جديد المدونة أولاً بأول ، كما يمكنك إرسال رساله بالضغط على الزر المجاور ...

جميع الحقوق محفوظة

تقنيات نور التعليمية