Flask-WTF হলো Flask-এ ফর্ম তৈরি এবং ভ্যালিডেট করার জন্য একটি শক্তিশালী এক্সটেনশন। এটি Flask অ্যাপ্লিকেশনে WTForms লাইব্রেরির একটি সহজ ইন্টারফেস সরবরাহ করে, যা ফর্ম হ্যান্ডলিং, ভ্যালিডেশন এবং CSRF (Cross-Site Request Forgery) সুরক্ষা প্রদান করে।
Flask-WTF ব্যবহার করে আপনি খুব সহজেই ফর্ম তৈরি, ডেটা গ্রহণ এবং ভ্যালিডেট করতে পারবেন। এতে ডাইনামিক ফর্ম এবং ইউজার ইনপুট ভ্যালিডেশনের কাজ আরও সহজ হয়ে ওঠে।
Flask-WTF ইনস্টলেশন
প্রথমেই Flask-WTF ইনস্টল করতে হবে:
pip install flask-wtf
Flask-WTF এর সাথে ফর্ম তৈরি এবং ভ্যালিডেট করা
ধাপ ১: Flask অ্যাপ তৈরি
from flask import Flask, render_template, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, EqualTo
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
# ফর্ম ক্লাস
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
password = PasswordField('Password', validators=[DataRequired()])
submit = SubmitField('Login')
@app.route("/", methods=["GET", "POST"])
def home():
form = LoginForm()
if form.validate_on_submit(): # ফর্মটি সাবমিট হলে ভ্যালিডেশন চালানো হবে
username = form.username.data
password = form.password.data
# এখানে ডাটাবেস চেক বা সেশন স্টোরেজ যুক্ত করা যেতে পারে
return redirect(url_for('welcome', username=username)) # সফল লগিন হলে রিডাইরেক্ট
return render_template('login.html', form=form)
@app.route("/welcome/<username>")
def welcome(username):
return f"স্বাগতম, {username}!"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
LoginForm: এটি Flask-WTF এর একটি ফর্ম ক্লাস যাusername,password, এবংsubmitফিল্ডের সাথে তৈরি করা হয়েছে।validate_on_submit(): এটি ফর্মের ডেটা ভ্যালিডেশন করে এবং যদি সমস্ত ইনপুট ভ্যালিড থাকে, তখন তা প্রসেস করা হয়।redirect(url_for(...)): ফর্ম সফলভাবে সাবমিট হলে ইউজারকে অন্য একটি পেজে রিডাইরেক্ট করা হয়।
ধাপ ২: HTML টেমপ্লেট তৈরি
Flask-WTF ফর্ম রেন্ডার করতে Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করা হয়। এখন login.html নামে একটি HTML টেমপ্লেট তৈরি করি।
<!-- templates/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 Form</title>
</head>
<body>
<h2>Login Form</h2>
<form method="POST" action="/">
{{ form.hidden_tag() }} <!-- CSRF Protection -->
<div>
<label for="username">Username:</label>
{{ form.username(class="form-control") }}
{% for error in form.username.errors %}
<p style="color: red;">{{ error }}</p>
{% endfor %}
</div>
<div>
<label for="password">Password:</label>
{{ form.password(class="form-control") }}
{% for error in form.password.errors %}
<p style="color: red;">{{ error }}</p>
{% endfor %}
</div>
<div>
{{ form.submit(class="btn btn-primary") }}
</div>
</form>
</body>
</html>
এখানে:
form.hidden_tag(): এটি CSRF সুরক্ষা হ্যান্ডল করে, যা Flask-WTF দ্বারা স্বয়ংক্রিয়ভাবে যোগ করা হয়।{{ form.username(...) }}: এটি Flask-WTF ফর্ম ফিল্ডগুলি রেন্ডার করতে ব্যবহার করা হয়।{% for error in form.username.errors %}: এটি ফর্ম ফিল্ডের জন্য কোনো ত্রুটি থাকলে তা দেখাবে।
Flask-WTF Validation
Flask-WTF ফর্মে সাধারণত কিছু সাধারণ ভ্যালিডেশন ব্যবহার করা হয়, যেমন:
DataRequired: ইনপুট ফিল্ডটি ফাঁকা থাকতে পারবে না।Length(min=4, max=20): ইনপুটের দৈর্ঘ্য একটি নির্দিষ্ট পরিসরে থাকতে হবে।EqualTo('password'): দুটি ফিল্ডের মান একে অপরের সমান হতে হবে (যেমন পাসওয়ার্ড কনফার্মেশন)।
উদাহরণ:
from wtforms.validators import DataRequired, Length, EqualTo
class RegistrationForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6)])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Register')
সাধারণ Validation Error Handling
ফ্লাস্ক ফর্মের মধ্যে ট্রান্সলেটেবল ত্রুটি বার্তা দেখানো সম্ভব। উদাহরণস্বরূপ, যদি ইউজার নামের জন্য Length(min=4) ত্রুটি ঘটে, তবে এর বার্তা এমন হবে:
{% for error in form.username.errors %}
<p style="color: red;">{{ error }}</p>
{% endfor %}
এটি ত্রুটির বার্তা দেখাবে, যেমন "Username must be at least 4 characters."
Flask-WTF এর অন্যান্য বৈশিষ্ট্য
- CSRF Protection: Flask-WTF CSRF সুরক্ষা প্রদান করে, যা আপনার ফর্মগুলিকে নিরাপদ রাখে।
- File Uploads: ফাইল আপলোডের জন্য সহজ ইন্টারফেস।
- Custom Validators: আপনি নিজের কাস্টম ভ্যালিডেটর তৈরি করতে পারেন।
- Form Rendering: Flask-WTF ফর্ম রেন্ডারিং সরল করে এবং HTML ফর্মের সাথে Flask ফর্মগুলি একত্রিত করতে সহজ করে তোলে।
Flask-WTF দিয়ে ফর্ম তৈরি এবং ভ্যালিডেট করা খুবই সহজ এবং শক্তিশালী। Flask-WTF ফর্ম প্রক্রিয়াগুলি সংক্ষেপ করে, ফর্ম ডেটা ভ্যালিডেশন, সুরক্ষা এবং কাস্টমাইজেশন সহজ করে তোলে। এটি আপনার অ্যাপ্লিকেশনে ফর্ম হ্যান্ডলিংকে একটি পরিষ্কার এবং নিরাপদ পদ্ধতিতে কার্যকর করার জন্য একটি অত্যন্ত কার্যকর উপায়।
Read more