ওয়েব প্রোগ্রামিং

ওয়েব প্রোগ্রামিং

ওয়েব প্রোগ্রামিংকে আমরা দুই ভাগে ভাগ করতে পারি— প্রথমটি হচ্ছে, ফ্রন্টেন্ড (Frontend) বা ক্লায়েন্ট সাইড প্রোগ্রামিং এবং দ্বিতীয়টি ব্যাকেন্ড (Backend) বা সার্ভার সাইড প্রোগ্রামিং।

একটা ওয়েবসাইট বা ওয়েব অ্যাপের যে অংশটুকু আমরা চোখে দেখতে পারি বা ইউজার যার সাথে ইন্টার-অ্যাক্ট করে তাই ফ্রন্টেন্ড আর যা দেখতে পারি না অথবা যা ইউজারের বিভিন্ন রিকোয়েস্টে রেসপন্স করে তা ব্যাকেন্ড। ফ্রন্টেন্ডে আমরা HTML5, CSS3, Javascript-এর মতো ল্যাঙ্গুয়েজগুলো ব্যবহার করতে পারি। এই তিনটির মধ্যে Javascript ক্লায়েন্ট সাইড প্রোগ্রামিং ল্যাঙ্গুয়েজ হলেও HTML5 ও CSS3 কোনো প্রোগ্রামিং ল্যাঙ্গুয়েজ নয়; বরং এগুলো হলো মার্ক-আপ ল্যাঙ্গুয়েজ। যেমন- XML একটা মার্ক-আপ ল্যাঙ্গুয়েজ। ক্লায়েন্ট সাইড প্রোগ্রামিং ল্যাঙ্গুয়েজগুলো সাধারণত ইউজারের ব্রাউজারে রান করে।

সার্ভার সাইড ল্যাঙ্গুয়েজগুলোর মধ্যে রয়েছে PHP, Ruby, Python, Go, C#, Visual Basic, Java, Perl ইত্যাদি। NodeJS এর কল্যাণে এখন অবশ্য জাভাস্ক্রিপ্টও সার্ভারে রান করানো যায়। নোডজেএস হলো ক্রোমের V8 ইঞ্জিনের ওপর নির্মিত জাভাস্ক্রিপ্ট রানটাইম। তবে আমাদের আলোচনার টপিক, পাইথন নিয়ে।

পাইথন দিয়ে খুব সহজেই আমরা ওয়েবসাইট বা ওয়েব অ্যাপ তৈরি করতে পারি। আচ্ছা, ওয়েবসাইট ও ওয়েব অ্যাপের মধ্যে পার্থক্য কী? প্রাথমিকভাবে ওয়েবসাইট তথ্যমূলক হয়। আর ওয়েব অ্যাপে ইউজার বিভিন্ন অ্যাকশন পারফর্ম করতে পারে। অন্য কথায়, ওয়েবসাইট হলো সুপারসেট এবং ওয়েব অ্যাপ হলো ওয়েবসাইটের একটি সাবসেট। একটি ওয়েবসাইট একটি ওয়েব অ্যাপকে ধারণ করতে পারে। যাহোক, সাধারণ পাইথন কোড লিখেই আমরা ওয়েব সাইট বা ওয়েব অ্যাপ তৈরি করতে পারি। কিন্তু ডেভেলপাররা বা প্রোগ্রামাররা তাদের কাজকে সহজ ও গতিশীল করার জন্য বিভিন্ন ওয়েব ফ্রেমওয়ার্ক ব্যবহার করে থাকে।

এখন প্রশ্ন হলো, ওয়েব ফ্রেমওয়ার্ক কী? পাইথনের ভাষ্যমতে-

ওয়েব ফ্রেমওয়ার্ক এমন একটা কোড লাইব্রেরি যা রিলায়াবল, স্কালাবল ও মেইনটেইনেবল ওয়েব অ্যাপ্লিকেশন তৈরি করার ক্ষেত্রে একজন ডেভেলপারের লাইফকে সহজতর করে তোলে।

মূলত ওয়েব ফ্রেমওয়ার্ক ডেভেলপারদের অনেকগুলো API অফার করে যার মাধ্যমে কাস্টম কোড লিখে খুব সহজেই ওয়েব অ্যাপ্লিকেশন তৈরি করা যায়। একটা ওয়েব অ্যাপ্লিকেশনে URL ম্যাপি (রাউটিং), টেমপ্লেটিং, ডেটাবেস ম্যানিপুলেশন, ইউজার ম্যানেজমেন্ট (রেজিস্ট্রেশন ও লগইন) এবং সেশন স্টোরেজ কমনলি থাকে। এসব কাজের জন্য একজন ডেভেলপারকে প্রতিনিয়ত একই কোড বারবার লিখতে হয়। আর ফ্রেমওয়ার্ক হলো এসব ঝামেলা থেকে মুক্তির আশ্বাস। ফ্রেমওয়ার্কের নীতি হলো ‘Less code, more work’। ফ্রেমওয়ার্ক ব্যবহার করে আমরা ওপরের বিষয়গুলো অনেক সহজে হ্যান্ডেল করতে পারি।

পাইথনের অনেকগুলো ওয়েব ফ্রেমওয়ার্ক রয়েছে। কোনোটাই কোনোটার চেয়ে কম না। কিন্তু তারপরও কিছু ফ্রেমওয়ার্ক এদের স্বকীয়তার কারণে হয়ে উঠেছে অনন্য। এগুলো হলো-

এ ছাড়া আরও অনেক ফ্রেমওয়ার্ক রয়েছে। কিন্তু প্রশ্ন হলো এত এত ফ্রেমওয়ার্কের ভিড়ে আমরা শিখব কোনটা?

এতগুলো ফ্রেমওয়ার্কের ভেতরে সবচেয়ে জনপ্রিয় ফ্রেমওয়ার্ক দুটি হলো জ্যাঙ্গো ও ফ্লাস্ক। সুতরাং আমাদের এই দুটির মধ্যে যেকোনো একটি বেছে নিতে হবে। কিন্তু এ ক্ষেত্রে ভাবার মতো অনেক বিষয় আছে। প্রথমেই ভাবা যাক চাকরির কথা। মোটামুটি সব পাইথননির্ভর ওয়েব ডেভেলপমেন্ট কোম্পানিই তাদের নিত্যদিনের কাজে জ্যাঙ্গো ব্যবহার করে। মোটামুটি সব লোকাল বা ইন্টারন্যাশনাল জব পোস্টই (পাইথন ওয়েব প্রোগ্রামিং সংক্রান্ত) কিন্তু জ্যাঙ্গোকেন্দ্রিক। তবে ফ্লাস্ক নিয়েও অনেক কোম্পানি কাজ করে। কিন্তু ফ্লাস্কে তারা হালকাপাতলা কিছু রেস্টফুল এপিআই ইমপ্লিমেন্ট করা বাদে আর সব কাজ জ্যাঙ্গোতেই করে। এসব দিক বিবেচনা করলে জ্যাঙ্গো শেখাই অধিক যুক্তিসংগত।

এবার ভাবা যাক ফ্রেমওয়ার্ক দুটির উদ্দেশ্য ও দৃষ্টিভঙ্গির কথা। ফ্লাস্ক একটি মাইক্রো-ফ্রেমওয়ার্ক। মাইক্রো মানে ফ্লাস্কের কোর (Core)-কে যথাসম্ভব সিম্পল কিন্তু এক্সটেনসিবল রাখা হয়েছে। ফ্লাস্ক আমাদের জন্য নিজে কোনো ডিসিশন নেবে না (যেমন : কোনো ডেটাবেস ব্যবহার করতে হবে)। অন্যদিকে জ্যাঙ্গো হলো, ব্যাটারিজ-ইনক্লুডেড (batteries-included) ফ্রেমওয়ার্ক। ওয়েব ডেভেলপমেন্টের বেশির ভাগ ঝামেলাই জ্যাঙ্গো হ্যান্ডেল করে। তাই আমরা শুধু নিজেদের অ্যাপ তৈরিতে পূর্ণ মনোযোগ দিতে পারি। ফ্লাস্ক দিয়ে আমরা যদি একটা বড় প্রজেক্ট করতে চাই তখন আমাদের অনেকগুলো এক্সটেনশন ও থার্ড-পার্টি মডিউল ব্যবহার করতে হবে এবং নিজেদের অনেক ঝামেলা পোহাতে হবে। কিন্তু জ্যাঙ্গো আমাদের সবকিছু একটি প্যাকেজের মধ্যেই দিচ্ছে। অথেনটিকেশন, কন্টেন্ট ম্যানেজমেন্ট, সাইট ম্যাপ, আরএসএস ফিল্ড- সবকিছুই জ্যাঙ্গো হ্যান্ডেল করতে পারে। তা ছাড়া জ্যাঙ্গোর প্রচুর থার্ড-পার্টি প্যাকেজ রয়েছে, যা জ্যাঙ্গোকে করে তুলেছে অনন্য।

আমি নিজে যখন জ্যাঙ্গো শেখা শুরু করেছিলাম, তখন এর আর্কিটেকচার আমার খুব কঠিন মনে হতো। MTV (মডেল-ভিউ-টেমপ্লেট) ডিজাইন প্যাটার্ন আমার কাছে অনেক কনফিউজিং মনে হতো। তাই দিন শেষে আমার কাছে জ্যাঙ্গো ভয়াবহ রূপ ধারণ করে। সে জন্য আমি ফ্লাস্কে মুভ করি। ফ্লাস্ক মাইক্রো-ফ্রেমওয়ার্ক ও খুব সহজ হওয়ায় অল্পতেই ওয়েব ফ্রেমওয়ার্কের মৌলিক বিষয়গুলো শিখতে পারি। এরপর MTV ডিজাইন প্যাটার্ন অনুসরণ করে একটা URL শর্টেনার ও ব্লগ ইঞ্জিন তৈরি করি। তারপরে এক শুভদিনে আবার ফিরে আসি জ্যাঙ্গোর কাছে। কিন্তু অবাক করা বিষয় হলো, এবার জ্যাঙ্গোকে ‘জলবৎ তরলং’ অর্থাৎ পানির মতো সহজ মন হতে লাগল। ফলে অল্প দিনেই জ্যাঙ্গোতে হাত পেকে গেল।

এবার আশা করি আপনাদের সবার সিদ্ধান্ত নিতে সুবিধা হবে। তবে আমি বলব, জ্যাঙ্গো ও ফ্লাস্ক দুটোই শেখা উচিত। কারণ, ছোটখাটো প্রজেক্টে জ্যাঙ্গো ব্যবহার করা অনেকটা মশা মারতে কামান দাগার মতো। ওয়েবে স্ট্যাটিক সাইট জেনারেটর নামে আরেকটি ধারণা আছে। স্ট্যাটিক সাইট জেনারেটরগুলো সিম্পল HTML ফাইল তৈরি করে।

পাইথনের নামকরা কয়েকটি স্ট্যাটিক সাইট জেনারেটর হলো-

এবার চলুন, ফ্লাস্কের অফিশিয়াল ডক থেকে দুই-চার লাইন শিখি। প্রথমেই ফ্লাস্ক ইনস্টল করার জন্য টার্মিনালে কমান্ড দেব-

sudo pip3 install Flask

এবার hello.py নামে একটা ফাইল তৈরি করে তাতে নিচের মতো কোড লিখব-

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

এবার এই স্ক্রিপ্ট বা ফাইলটিকে চালানোর জন্য টার্মিনালে কমান্ড দেব-

python3 hello.py

দেখতে পাব টার্মিনালে * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) এ রকম একটি লেখা উঠেছে। তার মানে আমরা সাকসেসফুল। এই অবস্থায় টার্মিনাল বন্ধ না করেই ব্রাউজারটি ওপেন করব। এবার ব্রাউজারের অ্যাড্রেস বারে http://localhost:5000/ লিখে এন্টার চাপব। ব্যস! সাথে সাথে Hello World! লেখাটা দেখতে পাব।

ফ্লাস্কের সাথে ডেটাবেস ব্যবহার করার জন্য আমরা Flask-SQLAlchemy এক্সটেনশনটি ব্যবহার করতে পারি। এটি হলো SQLAlchemy নামের একটি বিখ্যাত পাইথন SQL টুলকিটের ফ্লাস্ক বাইন্ডিং। SQLAlchemy ব্যবহার করে আমরা যেকোনো পাইথন স্ক্রিপ্টেই ডেটাবেস ব্যবহার করতে পারি। যাহোক, প্রথমেই এটি ইনস্টল করে নেওয়া যাক।

sudo pip3 install Flask-SQLAlchemy

আমাদের পুরোনো সেই hello.py-তে এবার নিচের মতো করে কোড লেখা যাক-

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

if not os.path.exists('test.db'):
    db.create_all()

@app.route("/")
def hello():
    return"Hello World!"

if __name__ == "__main__":
    app.run()

এবার ফাইলটিকে রান করলে দেখব hello.py এর সাথে একই ডিরেক্টরিতে test.db নামে নতুন একটি ফাইল তৈরি হয়েছে। আসলে এটি হলো ডেটাবেস। ওপরের প্রোগ্রামে আমরা ডেটাবেস হিসেবে SQLite-এর ব্যবহার করেছি। SQLite হলো একটি সহজ-সাধারণ ডেটাবেস। আমরা চাইলে SQLite বাদ দিয়ে MySQL বা PostgreSQL-কে ব্যবহার করতে পারি।

SQLAlchemy-এর অফিশিয়াল ডকুমেন্টেশনের ওয়েবলিংক- http://docs.sqlalchemy.org/en/rel_1_1/ এবং Flask-SQLAlchemy-এর অফিশিয়াল ডকুমেন্টেশনের ওয়েবলিংক- http://flask-sqlalchemy.pocoo.org/2.1/

comments powered by Disqus