ساخت سیستم مدیریت کاربران با پایتون و Flask
در این مقاله، به آموزش ساخت یک سیستم مدیریت کاربران (User Management System) با استفاده از زبان برنامهنویسی پایتون و فریمورک وب Flask خواهیم پرداخت. این سیستم شامل قابلیتهای ثبتنام، ورود، خروج و مدیریت پروفایل کاربر خواهد بود. هدف از این آموزش، آشنایی شما با مفاهیم پایهای توسعه وب با پایتون و ایجاد یک برنامه کاربردی است.
پیشنیازها
قبل از شروع، اطمینان حاصل کنید که موارد زیر را در سیستم خود نصب دارید:
- پایتون (نسخه 3.6 یا بالاتر)
- Flask
- SQLite (به عنوان پایگاه داده)
برای نصب Flask میتوانید از دستور زیر استفاده کنید:
pip install Flask
مراحل ساخت سیستم
1. ایجاد ساختار پروژه
ابتدا یک پوشه برای پروژه خود ایجاد کنید و سپس فایلهای زیر را در آن قرار دهید:
app.py: فایل اصلی برنامه Flasktemplates/: پوشهای برای فایلهای HTMLstatic/: پوشهای برای فایلهای 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 است. با استفاده از این مبنا، میتوانید قابلیتهای بیشتری را به سیستم خود اضافه کنید و آن را برای نیازهای خاص خود سفارشیسازی کنید.

بدون دیدگاه