User Registration এবং Login System তৈরি

Flask এবং Authentication - ফ্লাস্ক (Flask) - Web Development

301

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 ব্যবহার করে সেশন ম্যানেজমেন্ট করেছি। এই সিস্টেমটি আরো উন্নত এবং সুরক্ষিত করতে আপনি ফর্ম ভ্যালিডেশন, পাসওয়ার্ড হ্যাশিং, এবং ফ্ল্যাশ মেসেজ ব্যবহার করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...