ساخت سیستم مدیریت کاربران با پایتون و Flask

ساخت سیستم مدیریت کاربران با پایتون و Flask

در این مقاله، به آموزش ساخت یک سیستم مدیریت کاربران (User Management System) با استفاده از زبان برنامه‌نویسی پایتون و فریم‌ورک وب Flask خواهیم پرداخت. این سیستم شامل قابلیت‌های ثبت‌نام، ورود، خروج و مدیریت پروفایل کاربر خواهد بود. هدف از این آموزش، آشنایی شما با مفاهیم پایه‌ای توسعه وب با پایتون و ایجاد یک برنامه کاربردی است.

پیش‌نیازها

قبل از شروع، اطمینان حاصل کنید که موارد زیر را در سیستم خود نصب دارید:

  • پایتون (نسخه 3.6 یا بالاتر)
  • Flask
  • SQLite (به عنوان پایگاه داده)

برای نصب Flask می‌توانید از دستور زیر استفاده کنید:

pip install Flask

مراحل ساخت سیستم

1. ایجاد ساختار پروژه

ابتدا یک پوشه برای پروژه خود ایجاد کنید و سپس فایل‌های زیر را در آن قرار دهید:

  • app.py: فایل اصلی برنامه Flask
  • templates/: پوشه‌ای برای فایل‌های HTML
  • static/: پوشه‌ای برای فایل‌های CSS، JavaScript و تصاویر
  • database.db: فایل پایگاه داده SQLite

2. طراحی پایگاه داده

برای ذخیره اطلاعات کاربران، از پایگاه داده SQLite استفاده می‌کنیم. جدول users را با ستون‌های زیر ایجاد می‌کنیم:

  • id: شناسه یکتا (کلید اصلی)
  • username: نام کاربری
  • password: رمز عبور (به صورت هش شده)
  • email: ایمیل

می‌توانید از یک ابزار مدیریت پایگاه داده SQLite مانند DB Browser for SQLite برای ایجاد جدول استفاده کنید. دستور SQL برای ایجاد جدول به شرح زیر است:

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL
);

3. پیاده‌سازی برنامه Flask (app.py)

فایل app.py را با کد زیر جایگزین کنید:

from flask import Flask, render_template, request, redirect, url_for
import sqlite3
import hashlib

app = Flask(__name__)

# تابع برای ایجاد اتصال به پایگاه داده
def get_db_connection():
    conn = sqlite3.connect('database.db')
    conn.row_factory = sqlite3.Row
    return conn

# مسیر اصلی (صفحه اصلی)
@app.route('/')
def index():
    return render_template('index.html')

# مسیر ثبت‌نام
@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        email = request.form['email']

        # هش کردن رمز عبور
        hashed_password = hashlib.sha256(password.encode()).hexdigest()

        conn = get_db_connection()
        try:
            conn.execute('INSERT INTO users (username, password, email) VALUES (?, ?, ?)',
                         (username, hashed_password, email))
            conn.commit()
            return redirect(url_for('login'))
        except sqlite3.IntegrityError:
            return render_template('register.html', error='نام کاربری یا ایمیل قبلاً ثبت شده است.')
        finally:
            conn.close()

    return render_template('register.html')

# مسیر ورود
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        # هش کردن رمز عبور وارد شده
        hashed_password = hashlib.sha256(password.encode()).hexdigest()

        conn = get_db_connection()
        user = conn.execute('SELECT * FROM users WHERE username = ? AND password = ?',
                            (username, hashed_password)).fetchone()
        conn.close()

        if user:
            # در صورت ورود موفقیت‌آمیز، اطلاعات کاربر را در session ذخیره کنید (در اینجا ساده شده است)
            return render_template('profile.html', user=user)
        else:
            return render_template('login.html', error='نام کاربری یا رمز عبور اشتباه است.')

    return render_template('login.html')

# مسیر خروج (در اینجا ساده شده است)
@app.route('/logout')
def logout():
    # حذف اطلاعات کاربر از session (در اینجا ساده شده است)
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

4. ایجاد فایل‌های HTML (templates/)

فایل‌های HTML زیر را در پوشه templates/ ایجاد کنید:

index.html

<!DOCTYPE html>
<html>
<head>
    <title>صفحه اصلی</title>
</head>
<body>
    <h1>به سیستم مدیریت کاربران خوش آمدید!</h1>
    <p><a href="{{ url_for('register') }}">ثبت‌نام</a> | <a href="{{ url_for('login') }}">ورود</a></p>
</body>
</html>

register.html

<!DOCTYPE html>
<html>
<head>
    <title>ثبت‌نام</title>
</head>
<body>
    <h1>ثبت‌نام</h1>
    {% if error %}
        <p style="color: red;">{{ error }}</p>
    {% endif %}
    <form method="post">
        <label for="username">نام کاربری:</label>
        <input type="text" id="username" name="username" required><br>

        <label for="password">رمز عبور:</label>
        <input type="password" id="password" name="password" required><br>

        <label for="email">ایمیل:</label>
        <input type="email" id="email" name="email" required><br>

        <button type="submit">ثبت‌نام</button>
    </form>
    <p><a href="{{ url_for('login') }}">ورود</a></p>
</body>
</html>

login.html

<!DOCTYPE html>
<html>
<head>
    <title>ورود</title>
</head>
<body>
    <h1>ورود</h1>
    {% if error %}
        <p style="color: red;">{{ error }}</p>
    {% endif %}
    <form method="post">
        <label for="username">نام کاربری:</label>
        <input type="text" id="username" name="username" required><br>

        <label for="password">رمز عبور:</label>
        <input type="password" id="password" name="password" required><br>

        <button type="submit">ورود</button>
    </form>
    <p><a href="{{ url_for('register') }}">ثبت‌نام</a></p>
</body>
</html>

profile.html

<!DOCTYPE html>
<html>
<head>
    <title>پروفایل کاربری</title>
</head>
<body>
    <h1>پروفایل کاربری</h1>
    <p>نام کاربری: {{ user.username }}</p>
    <p>ایمیل: {{ user.email }}</p>
    <p><a href="{{ url_for('logout') }}">خروج</a></p>
</body>
</html>

اجرای برنامه

برای اجرای برنامه، فایل app.py را با استفاده از دستور زیر اجرا کنید:

python app.py

سپس می‌توانید با مراجعه به آدرس http://127.0.0.1:5000/ در مرورگر خود، به سیستم مدیریت کاربران دسترسی پیدا کنید.

نکات تکمیلی

  • برای امنیت بیشتر، از کتابخانه‌هایی مانند Flask-Login برای مدیریت session و احراز هویت استفاده کنید.
  • رمزهای عبور را به صورت ایمن‌تر (مانند استفاده از bcrypt) هش کنید.
  • از اعتبارسنجی ورودی‌ها برای جلوگیری از حملات تزریق SQL و XSS استفاده کنید.
  • برای ذخیره اطلاعات کاربران در مقیاس بزرگتر، از پایگاه داده‌های قوی‌تری مانند PostgreSQL یا MySQL استفاده کنید.
  • طراحی رابط کاربری را با استفاده از CSS و JavaScript بهبود بخشید.

این آموزش یک نقطه شروع برای ساخت سیستم مدیریت کاربران با پایتون و Flask است. با استفاده از این مبنا، می‌توانید قابلیت‌های بیشتری را به سیستم خود اضافه کنید و آن را برای نیازهای خاص خود سفارشی‌سازی کنید.

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *