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

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

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

پیش‌نیازها

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

  • پایتون (نسخه 3.6 یا بالاتر)
  • Flask: می‌توانید با استفاده از pip آن را نصب کنید: pip install Flask
  • یک ویرایشگر کد (مانند VS Code، PyCharm یا Sublime Text)

مرحله اول: ایجاد ساختار پروژه

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

  • app.py: فایل اصلی برنامه Flask
  • templates/register.html: قالب HTML برای صفحه ثبت‌نام
  • templates/login.html: قالب HTML برای صفحه ورود
  • templates/profile.html: قالب HTML برای صفحه پروفایل کاربر (پس از ورود)

مرحله دوم: کدنویسی فایل app.py

فایل app.py را باز کرده و کد زیر را در آن قرار دهید:

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

app = Flask(__name__)
app.secret_key = 'super secret key' # کلید امنیتی برای session

# یک دیکشنری ساده برای ذخیره اطلاعات کاربران (در یک برنامه واقعی از پایگاه داده استفاده کنید)
users = {}

@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']

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

        # بررسی وجود کاربر با نام کاربری مشابه
        if username in users:
            return render_template('register.html', error='نام کاربری قبلاً ثبت شده است.')

        # ذخیره اطلاعات کاربر
        users[username] = hashed_password

        return redirect(url_for('login'))

    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()

        # بررسی اعتبار کاربر
        if username in users and users[username] == hashed_password:
            session['username'] = username
            return redirect(url_for('profile'))
        else:
            return render_template('login.html', error='نام کاربری یا رمز عبور اشتباه است.')

    return render_template('login.html')

@app.route('/profile')
def profile():
    if 'username' in session:
        username = session['username']
        return render_template('profile.html', username=username)
    else:
        return redirect(url_for('login'))

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('login'))

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

در این کد:

  • Flask را وارد کرده و یک نمونه از آن ایجاد می‌کنیم.
  • app.secret_key را برای امنیت session تنظیم می‌کنیم.
  • یک دیکشنری به نام users برای ذخیره اطلاعات کاربران ایجاد می‌کنیم (در یک برنامه واقعی از پایگاه داده استفاده می‌شود).
  • مسیرهای (routes) مختلف را تعریف می‌کنیم: / (صفحه اصلی)، /register (ثبت‌نام)، /login (ورود)، /profile (پروفایل) و /logout (خروج).
  • در مسیر /register، اطلاعات کاربر را دریافت کرده، رمز عبور را هش می‌کنیم و در دیکشنری users ذخیره می‌کنیم.
  • در مسیر /login، اطلاعات کاربر را دریافت کرده، رمز عبور را هش می‌کنیم و با رمز عبور ذخیره شده مقایسه می‌کنیم. در صورت صحت، نام کاربری را در session ذخیره می‌کنیم و به صفحه پروفایل هدایت می‌کنیم.
  • در مسیر /profile، بررسی می‌کنیم که کاربر وارد شده باشد (وجود نام کاربری در session). در صورت ورود، صفحه پروفایل را نمایش می‌دهیم.
  • در مسیر /logout، نام کاربری را از session حذف می‌کنیم و به صفحه ورود هدایت می‌کنیم.

مرحله سوم: کدنویسی فایل‌های HTML

فایل templates/register.html را باز کرده و کد زیر را در آن قرار دهید:

<!DOCTYPE html>
<html>
<head>
    <title>ثبت‌نام</title>
</head>
<body>
    <h1>ثبت‌نام</h1>
    <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>

    {% if error %}
        <p style="color: red;">{{ error }}</p>
    {% endif %}

    <p>قبلاً حساب کاربری دارید؟ <a href="{{ url_for('login') }}">ورود</a></p>
</body>
</html>

فایل templates/login.html را باز کرده و کد زیر را در آن قرار دهید:

<!DOCTYPE html>
<html>
<head>
    <title>ورود</title>
</head>
<body>
    <h1>ورود</h1>
    <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>

    {% if error %}
        <p style="color: red;">{{ error }}</p>
    {% endif %}

    <p>حساب کاربری ندارید؟ <a href="{{ url_for('register') }}">ثبت‌نام</a></p>
</body>
</html>

فایل templates/profile.html را باز کرده و کد زیر را در آن قرار دهید:

<!DOCTYPE html>
<html>
<head>
    <title>پروفایل</title>
</head>
<body>
    <h1>پروفایل شما</h1>
    <p>سلام، {{ username }}!</p>
    <a href="{{ url_for('logout') }}">خروج</a>
</body>
</html>

همچنین یک فایل templates/index.html ساده ایجاد کنید:

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

مرحله چهارم: اجرای برنامه

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

python app.py

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

نکات مهم

  • امنیت: در این آموزش، از یک دیکشنری ساده برای ذخیره اطلاعات کاربران استفاده کردیم. در یک برنامه واقعی، باید از یک پایگاه داده امن و روش‌های قوی‌تری برای هش کردن رمز عبور (مانند bcrypt) استفاده کنید.
  • اعتبارسنجی: اعتبارسنجی ورودی‌های کاربر (مانند نام کاربری و رمز عبور) برای جلوگیری از حملات تزریقی (injection attacks) ضروری است.
  • Session Management: مدیریت session به درستی برای حفظ امنیت اطلاعات کاربر مهم است.
  • طراحی رابط کاربری: رابط کاربری (UI) را به گونه‌ای طراحی کنید که کاربرپسند و جذاب باشد.

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

بدون دیدگاه

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

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