মজার ও সহজ প্রোগ্রামিং, পাইথন প্রোগ্রামিং [পর্ব-১৮] :: পাইথনে ওয়েব ডেভলপমেন্ট এর ৭ কাহন

মজার ও সহজ পাইথন প্রোগ্রামিং

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

মূলত এই কাজগুলো করতে হলে আপনাকে HTML সম্পর্কে হালকা পাতলা ধারণা রাখতে হবে । কারণ এই কাজটা করতে হবে মূলত HTML ও PYTHON এর সমন্বিত কাজের মাধ্যমে । আমাদের এই কাজের কনসেপ্ট হল বিভিন্ন কাজের জন্য একটা পাইথনের প্রোগ্রাম লিখে নেওয়া ও পরবর্তীতে HTML এর মাধ্যমে এটাকে ওয়েব সাইটের বিভিন্ন কাজে লাগানো ।

দেখূন , প্রথমে আমরা খুবই সহজ একটা পাইথনের ওয়েব স্ক্রিপ্ট লিখে ফেলি । সবাই লিখূন :

print ("Content-type:text/html\r\n\r\n")
print( '<html>')
print('<head>')
print('<title>Hello Word - First CGI Program</title>')
print( '</head>')
print( '<body>')
prin ('<h2>Hello Word! This is my first CGI program</h2>')
print( '</body>')
print('</html>')

এবং এর আউটপুট হবে নিচের মত :

Hello Word! This is my first CGI program
আর এর টাইটেল হবে নীচের মত ;
Hello Word - First CGI Program

দেখুন , যারা HTML জানেন তারা আশা করি বিষয়টা বুঝতে পেরেছেন । আর যারা জানেন না তারা দয়া করে HTML এর যেকোন টিউটোরিয়াল থেকে এর বেসিক কনসেপ্ট টা নিয়ে আসুন । না হলে এখানে HTML কোডগুলো বিস্তারিতভাবে ব্যাখ্যা করা সম্ভব না ।

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

import cgi, cgitb
form = cgi.FieldStorage()
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')
print( "Content-type:text/html\r\n\r\n")
print( "<html>")
print ("<head>")
print ("<title>Hello - Second CGI Program</title>")
print( "</head>")
print( "<body>")
print( "<h2>Hello %s %s</h2>" % (first_name, last_name))
print ("</body>")
print ("</html>")

দেখুন , এখানে আমরা প্রথমে মডিউল ইমপোর্ট করে নিয়েছি । তারপর form = cgi.FieldStorage() কোডের মাধ্যমে আমরা এখানে ফর্মের জন্য ফিল্ড স্টোরেজ তৈরী করেছি । তারপরের ২ টা কোডের মাধ্যমে আমরা HTML ফর্মের থেকে ব্রাউজারের ইনপুট দেওয়া ডাটা নিয়েছি । এরপর HTML কোডগুলি লিখে ২য় হেডারের মধ্যে আমাদের ইনপুট নেওয়া ডাটা প্রিন্ট দিয়েছি । এখঅনে %s এর মান পরে ব্রাকেটের মধ্যে বলে দেওয়া হয়েছে যে তা উপরের ইনপুট নেওয়া ডাটা হবে । এবার এটাকে .py বা .cgi ফরম্যাটে সেভ করুন । তারপর এইটাকে ওয়েবসাইটে ইউজ করার জন্য আমাদের যে HTML কোড লাগবে তা দেখে নিই । HTML কোড দ্বারা আমরা মূলত একটা ডাটা ইনপুট ফিল্ড ক্রিয়েট করব , যার action এ দেওয়া থাকবে আমাদের উপরের প্রোগ্রামটি ।

<form action="/cgi-bin/hello_get.py" method="get">
First Name: <input type="text" name="first_name">  <br />
Last Name: <input type="text" name="last_name" />
<input type="submit" value="Submit" />
</form>

এবার দেখুন পাইথনের মাধ্যমে কীভাবে রেডিও বাটন , ড্রপ ডাউন মেনু বা টেক্সট ফিল্ড থেকে ডাটা নিতে হয় ।

রেডিও বাটন :

সবাই প্রথমে রেডিও বাটন তৈরী করার জন্য নিচের HTML কোডগুলি লিখুন :

<form action="/cgi-bin/radiobutton.py" method="post" target="_blank">
<input type="radio" name="subject" value="maths" /> Maths
<input type="radio" name="subject" value="physics" /> Physics
<input type="submit" value="Select Subject" />
</form>

দেখুন , এখানে একশনে আমরা একটা পাই ফাইলের কথা বলে দিয়েছি । উপরের কোডগুলো ২ টা রেডিও বাটন তৈরী করবে Maths ও Physics নামে । এবার দেখুন , এই রেডিও বাটন থেকে ডাটা নেবার জন্য আমাদের পাইথন স্ক্রিপ্ট :

import cgi, cgitb
form = cgi.FieldStorage()
if form.getvalue('subject'):
   subject = form.getvalue('subject')
else:
   subject = "Not set"
print( "Content-type:text/html\r\n\r\n")
print ("<html>")
print ("<head>")
print ("<title>Radio - Fourth CGI Program</title>")
print ("</head>")
print ("<body>")
print ("<h2> Selected Subject is %s</h2>" % subject)
print( "</body>")
print ("</html>")

দেখুন , এখান আমরা

if form.getvalue('subject'):
   subject = form.getvalue('subject')
else:
   subject = "Not set"

এই কোডের মাধ্যমে বলেছি যে ফর্ম থেকে যে রেডিও বাটনের ডাটা ইনপুট পাবে তা subject নামের ভ্যারিয়েবল এর মধ্যে সংরক্ষন করতে , আর ডাটা না পাওয়া গেলে subject হবে Not set । অর্থাৎ এটাই প্রিন্ট করবে পরে । তারপর আমরা ২য় হেডারে গিয়ে আমাদের সাবজেক্ট প্রিন্ট করেছি ।

ড্রপ ডাউন মেনু :
প্রথমে দেখে নিই আমাদের ড্রপ ডাউন মেনুর জন্য তৈরী HTML কোড । সবাই নিচের কোড গুলি লিখূন :

<form action="/cgi-bin/dropdown.py" method="post" target="_blank">
<select name="dropdown">
<option value="Maths" selected>Maths</option>
<option value="Physics">Physics</option>
</select>
<input type="submit" value="Submit"/>
</form>

এবার এর ভ্যালিডেশন হল উপরের রেডিও বাটনের মতই একই । শূধূ HTML কোড অনুযায়ী ভ্যারিয়েবলের নাম গুলি পাল্টে দিন ।

টেক্সট এরিয়া :
সবাই এর জন্য HTML কোড গুলি লিখূন :

<form action="/cgi-bin/textarea.py" method="post" target="_blank">
<textarea name="textcontent" cols="40" rows="4">
Type your text here...
</textarea>
<input type="submit" value="Submit" />
</form>

এর পাইথন স্ক্রিপ্ট ও রেডিও বাটনের মতই একই । তবুএও এটা দিয়ে দিলাম :

# Import modules for CGI handling
import cgi, cgitb

# Create instance of FieldStorage
form = cgi.FieldStorage()

# Get data from fields
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = "Not entered"

print( "Content-type:text/html\r\n\r\n")
print ("<html>")
print( "<head>")
print( "<title>Text Area - Fifth CGI Program</title>")
print ("</head>")
print( "<body>")
print( "<h2> Entered Text Content is %s</h2>" % text_content)
print( "</body>)

ওয়েব সাইটে ফাইল আপলোড :

এবার আমরা দেখব পাইথন স্ক্রিপ্ট দিয়ে কীভাবে একটা ওয়েবসাইটে ফাইল আপলোড করতে হয় । এই কাজের জন্য সবার প্রথমে নিচের HTML কোড গুলি লিখে নিন ।

<html>
<body>
   <form enctype="multipart/form-data"
                     action="save_file.py" method="post">
   <p>File: <input type="file" name="filename" /></p>
   <p><input type="submit" value="Upload" /></p>
   </form>
</body>
</html>

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

import cgi, os
import cgitb
 cgitb.enable()
form = cgi.FieldStorage()
fileitem = form['filename']
if fileitem.filename:
   fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())
   message = 'The file "' + fn + '" was uploaded successfully'
else:
   message = 'No file was uploaded'

print( """\
Content-Type: text/html\n
<html>
<body>
   <p>%s</p>
</body>
</html>
""" % (message,))

দেখূন , এখান আমরা প্রথমে fileitem = form['filename'] কোডের দ্বারা এই নামের কোন ফাইল আছে কিনা তা চেক করেছি । তারপর if fileitem.filename কোড দ্বারা আমরা চেক করেছি যে ফাইলটি আপলোড হয়েছে কিনা । এখন তার পরের অংশটুকু দেখূন :

  fn = os.path.basename(fileitem.filename)
   open('/tmp/' + fn, 'wb').write(fileitem.file.read())
   message = 'The file "' + fn + '" was uploaded successfully'
else:
   message = 'No file was uploaded'

প্রথমে আমরা ১ম কোডের মাধ্যমে ইউজার যে প্যাথ টা তে ফাইল দেখিয়ে দিয়েছে সেখানে গিয়েছি । এরপর open ফাংশনের মাধ্যমে ফাইলটা পড়ার ও লেখার জন্য ওপেন করেছি । এরপর write(fileitem.file.read()) কোডের মাধ্যমে আমরা ফাইলটা ওয়েব সার্ভারে আপলোড করে পড়েছি । এখন যদি এই প্রক্রিয়া সাকসেসফুল হয় , তাহলে প্রোগ্রামটা আমাদের message ভ্যারিয়েবলের মধ্যের লেখাটি সো করবে । আর কোন কারণে যদি এ প্রক্রিয়া সম্পন্ন না হয় তাহলে 'No file was uploaded' লেখাটি প্রিন্ট করবে ।

তারপরের অংশটুকু আমরা লিখেছি এই সমস্ত প্রক্রিয়াটিকে ওয়েবসাইটে HTML এর মাধ্যমে প্রকাশ করার জন্য ।

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

print ("Set-Cookie:UserID=XYZ;\r\n")
print ("Set-Cookie:Password=XYZ123;\r\n")
print ("Set-Cookie:Expires=Tuesday, 31-Dec-2007 23:12:40 GMT";\r\n")
print ("Set-Cookie:Domain=www.techtunes.io;\r\n")
print ("Set-Cookie:Path=/perl;\n")
print( "Content-type:text/html\r\n\r\n")

দেখূন , print( "Content-type:text/html\r\n\r\n") লাইনটি যেখানে সব সময় HTML কোডের প্রথমে থাকে সেটা কিন্তু এ ক্ষেত্রে এই কোডের পরে থাকবে ।

প্রথমে আমরা Set-Cookie কোড দ্বারা ইউজার নেম ও পাসওয়ার্ড সেট করে দিয়েছি । তার পরের লাইনে আমরাএই কুকি কত দিন বা সময় পর্যন্ত কার্যকর থাকবে তা সেটা করেছি । তারপর ডোমেইনের নাম সেট করেছি। তারপর কুকির প্যাথ বলে দিয়েছি
। এভাবে, যেকোন ওয়েবসাইটের কুকি সেট করা যায় পাইথন দ্বারা ।

আজ এই পর্যন্তই । আর লিখলাম না । আজকের লেখাটা একটু বড়ই হয়ে গেল । কিছূ মনে কইরেন না।

আবার দেখা হবে । সমস্যা হলে বইলেন । চেষ্টা করব । আর পাইথনের বিভিন্ন সমস্যার ও রিসোর্স এর জন্য এই গ্রুপে জয়েন করতে পারেন ।
সবাই ভাল থাকবেন । ধন্যবাদ ।

Level 2

আমি অরিন্দম পাল। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 11 বছর 10 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 81 টি টিউন ও 316 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 20 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।

মানসিক ভাবে দূর্বল । কোন কাজই কনফিডেন্টলি করতে পারি না , তবুও দেখি কাজ শেষ পর্যন্ত হয়ে যায় । নিজের সম্পর্কে এক এক সময় ধারণা এক এক রকম হয় । আমার কোন বেল ব্রেক নেই । সকালে যে কাজ করব ঠিক করি , বিকালে তা করতে পারি না । নিজের...


টিউনস


আরও টিউনস


টিউনারের আরও টিউনস


টিউমেন্টস

সত্যি ভাই আপনার জবাব নেই……… চমৎকার পোস্টের জন্য ধন্যবাদ

ধন্যবাদ সজল ভাই । আপনারও কোন জবাব নেই ।

    @অরিন্দম পাল: ভাই এই ধরনের কার্যালয় ইউনিকোড কি ভাবে লিখব ও পড়ব? ধন্যবাদ।

অনেক অনেক ধন্যবাদ আপনার জন্য ভাই। আমিও ওয়েব ডেভেলপমেন্টের কাজ করি; জানতাম পাইথন দিয়ে ওয়েব ডেভেলপের কাজ করা যায়, কিন্তু কিভাবে তা জানতাম না। তাই আবারো ধন্যবাদ ভাই।

    @রাজ্: ভাই , আপনাকেও ধন্যবাদ । এটাতো শুধু ওয়েব এর প্রাথমিক ধারণা । আরও অনেক আছে । নিজে নিজে শিখতে চেষ্টা করুন ।

Level 0

ভাই আপনি কিভাবে পারেন এত ধৈর্য সহকারে টিউন করা। সত্যিই অবাক লাগে। আবারও অনেক ধন্যবাদ মূল্যবান পোস্টের জন্য।

    @monir99: ভাই , আপনাকে অনেক ধন্যবাদ এই সত্যটা উপলব্ধি করার জন্য । আসলে বেশীরভাগ মানুষই এই কষ্ট টার মর্ম বুঝে না ।

great !