Flask-এ User Registration এবং Login System তৈরি করা খুবই সহজ। এটি সাধারণত Flask-WTF (Web Forms) এবং Flask-Login ব্যবহার করে করা হয়। Flask-WTF ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন করতে সাহায্য করে, এবং Flask-Login ব্যবহারকারীর সেশন পরিচালনা করার জন্য ব্যবহৃত হয়।
এখানে আমরা Flask-এ একটি সিম্পল User Registration এবং Login System তৈরি করার পদ্ধতি ব্যাখ্যা করব।
প্রয়োজনীয় প্যাকেজ ইনস্টলেশন
প্রথমে আপনাকে কয়েকটি প্যাকেজ ইনস্টল করতে হবে:
pip install flask flask-sqlalchemy flask-wtf flask-login werkzeug
- Flask-SQLAlchemy: ডাটাবেস ইন্টিগ্রেশন।
- Flask-WTF: ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশন।
- Flask-Login: ইউজার সেশন ম্যানেজমেন্ট।
- Werkzeug: সিকিউর পাসওয়ার্ড হ্যাশিং।
১. প্রজেক্ট সেটআপ
প্রথমে, Flask অ্যাপ্লিকেশন তৈরি করুন এবং Flask-SQLAlchemy, Flask-WTF, এবং Flask-Login কনফিগার করুন।
app.py ফাইল তৈরি করা:
from flask import Flask, render_template, redirect, url_for, request, flash
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from flask_login import UserMixin, login_user, login_required, logout_user, LoginManager, current_user
from werkzeug.security import generate_password_hash, check_password_hash
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, Email
app = Flask(__name__)
# Flask কনফিগারেশন সেটিংস
app.config['SECRET_KEY'] = 'আপনার-গোপন-কী'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# ডাটাবেস ইনিশিয়ালাইজ
db = SQLAlchemy(app)
# Flask-Login ইনিশিয়ালাইজ
login_manager = LoginManager(app)
login_manager.login_view = 'login'
# ইউজার মডেল
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(200), nullable=False)
def __repr__(self):
return f"User('{self.username}', '{self.email}')"
# ফর্ম ডেফিনিশন
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired()])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired()])
class LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
# Home Route
@app.route('/')
def home():
return render_template('index.html')
# User Registration Route
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm()
if form.validate_on_submit():
hashed_password = generate_password_hash(form.password.data, method='sha256')
user = User(username=form.username.data, email=form.email.data, password=hashed_password)
db.session.add(user)
db.session.commit()
flash('Your account has been created!', 'success')
return redirect(url_for('login'))
return render_template('register.html', form=form)
# User Login Route
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = User.query.filter_by(email=form.email.data).first()
if user and check_password_hash(user.password, form.password.data):
login_user(user)
flash('You have been logged in!', 'success')
return redirect(url_for('dashboard'))
else:
flash('Login Unsuccessful. Please check email and password', 'danger')
return render_template('login.html', form=form)
# Dashboard Route (Protected)
@app.route('/dashboard')
@login_required
def dashboard():
return f'Hello, {current_user.username}! Welcome to your dashboard.'
# Logout Route
@app.route('/logout')
def logout():
logout_user()
return redirect(url_for('home'))
# User Loader for Flask-Login
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
if __name__ == "__main__":
app.run(debug=True)
২. HTML টেমপ্লেট তৈরি করা
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Registration</title>
</head>
<body>
<h2>Register</h2>
<form method="POST">
{{ form.hidden_tag() }}
<div>{{ form.username.label }} {{ form.username() }}</div>
<div>{{ form.email.label }} {{ form.email() }}</div>
<div>{{ form.password.label }} {{ form.password() }}</div>
<div>{{ form.confirm_password.label }} {{ form.confirm_password() }}</div>
<button type="submit">Register</button>
</form>
<p>Already have an account? <a href="{{ url_for('login') }}">Login</a></p>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form method="POST">
{{ form.hidden_tag() }}
<div>{{ form.email.label }} {{ form.email() }}</div>
<div>{{ form.password.label }} {{ form.password() }}</div>
<button type="submit">Login</button>
</form>
<p>Don't have an account? <a href="{{ url_for('register') }}">Register</a></p>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome</title>
</head>
<body>
<h1>Welcome to the Flask App!</h1>
<a href="{{ url_for('register') }}">Register</a> | <a href="{{ url_for('login') }}">Login</a>
</body>
</html>
৩. ডাটাবেস তৈরি এবং Flask চালানো
এখন Flask অ্যাপ্লিকেশন চালানোর আগে ডাটাবেস তৈরি করতে হবে:
python
>>> from app import db
>>> db.create_all()
এটি site.db নামের একটি SQLite ডাটাবেস তৈরি করবে এবং আপনার মডেল অনুযায়ী টেবিল তৈরি করবে।
৪. অ্যাপ্লিকেশন চালানো
এখন Flask অ্যাপ্লিকেশন চালাতে পারেন:
python app.py
এটি আপনার অ্যাপ্লিকেশন চালু করবে এবং আপনার ব্রাউজারে http://127.0.0.1:5000/ URL ওপেন করলে আপনি হোম পেজ দেখতে পাবেন।
৫. ব্যবহারকারীদের লগইন এবং রেজিস্ট্রেশন ফিচার
- Registration Page: নতুন ব্যবহারকারীদের রেজিস্ট্রেশন করতে সহায়তা করবে এবং তাদের তথ্য ডাটাবেসে সংরক্ষণ করবে।
- Login Page: ব্যবহারকারীদের লগইন করার সুযোগ দিবে, এবং সঠিক তথ্য দেওয়ার পর তাদের সেশন চালু করবে।
- Dashboard: লগইন করার পর ব্যবহারকারীকে তাদের ড্যাশবোর্ডে পাঠানো হবে।
Flask-এ User Registration এবং Login System তৈরি করা খুবই সহজ এবং সুরক্ষিত। আমরা Flask-SQLAlchemy ব্যবহার করে ডাটাবেস পরিচালনা করেছি, Flask-WTF ব্যবহার করেছি ফর্ম হ্যান্ডলিং এবং ভ্যালিডেশনের জন্য, এবং Flask-Login ব্যবহার করে সেশন ম্যানেজমেন্ট করেছি। এই সিস্টেমটি আরো উন্নত এবং সুরক্ষিত করতে আপনি ফর্ম ভ্যালিডেশন, পাসওয়ার্ড হ্যাশিং, এবং ফ্ল্যাশ মেসেজ ব্যবহার করতে পারেন।
Read more