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

بدون دیدگاه