বাংলায় জ্যাঙ্গো

Uncategorized

Virtual environment এর ব্যবহার

by
, on
January 9, 2018

আস্সালামুআলাইকুম ,আজকের পর্বে আপনাদের সবাইকে স্বাগতম ।

আজকে আমরা জ্যাংগো প্রজেক্ট এর একটা গুরুত্তপূর্ণ বিষয় “ভার্চুয়াল এনভায়রনমেন্ট ” নিয়ে আলোচনা করবো।শুরুতে আমরা “ভার্চুয়াল এনভায়রনমেন্ট ” কি এবং কেন এটা বব্যবহার করা উচিৎ তা নিয়ে সংক্ষিপ্ত আলোচনা করবো ।

“ভার্চুয়াল এনভায়রনমেন্ট ” কি?
“ভার্চুয়াল এনভায়রনমেন্ট ” হচ্ছে এমন একটা টুল যা ব্যবহার করে ভিন্ন ভিন্ন পাইথন পরিরেবেশ তৈরী করা হয় ।এই এনভায়রনমেন্ট এর নিজস্ব ইনস্টলেশন ডিরেক্টরি রয়েছে যার লাইব্রেরিগুলি অন্য “ভার্চুয়াল এনভায়রনমেন্ট ” এর সাথে শেয়ার করে না এবং গ্লোবালি ইনস্টল করা লাইব্রেরিগুলি অ্যাক্সেস করে না।

কেন “ভার্চুয়াল এনভায়রনমেন্ট ” বব্যবহার করা উচিৎ?
ধরুন আপনি আপনার কম্পিউটার এ পাইথন ২ এবং জ্যাংগো ১.১০ ইনস্টল করেছিলেন এখন আপনি যদি কোনো প্রজেক্ট করেন তাহলে আপনার প্রজেক্ট পাইথন ২ এবং জ্যাংগো ১.১০ এ হবে কিছুদিন পরে আপনি পাইথন ৩ এবং জ্যাংগো ২ ইনস্টল করলেন এখন যদি আপনি আপনার আগের প্রজেক্ট এ কোনো আপডেট কিছু করতে চান তাহলে কিভাবে করবেন? বর্তমানে তো আপনার কম্পিউটার এ পাইথন ৩ এবং জ্যাংগো২ ইনস্টল করা আর আপনার প্রজেক্ট জ্যাংগো ১.১০ এ করা এখন কি আবার লেটেস্ট ভার্সন রিমুভ করে পাইথন২ এবং জ্যাংগো ১.১০ ইনস্টল করবেন? কখনোই না কারণ তাহলে আমাদের প্রতিটি প্রজেক্ট এর জন্য এভাবে প্রতিবার ইনস্টল এন্ড আনইনস্টল করে যেতে হবে যা খুব কি বিরক্তিকর একটা ব্যাপার । আর এই সমস্যা সমাধানের জন্য ই আমরা “ভার্চুয়াল এনভায়রনমেন্ট ” নিয়ে কাজ করবো যাতে করে আমাদের প্রতিটি প্রজেক্ট এর জন্য আলাদা আলাদা “ভার্চুয়াল এনভায়রনমেন্ট ” এক্টিভ করে কাজ করতে পারি।এভাবে আপনার কম্পিউটার এ একাধিক “ভার্চুয়াল এনভায়রনমেন্ট ” থাকতে পারে যখন আপনার যেটা দরকার হবে সেই “ভার্চুয়াল এনভায়রনমেন্ট ” এক্টিভ করে কাজ করবেন।

চলুন তাহলে শুরু করা যাক :
আপনার টার্মিনাল ওপেন করে নিচের কমান্ড গুলো দিন:

sudo apt-get install python-pip
sudo pip install virtualenv
virtualenv tenenv
source tenenv/bin/activate

এখানে tenenv হচ্ছে আমাদের “ভার্চুয়াল এনভায়রনমেন্ট ” এর নাম ।সবশেষে source tenenv/bin/activate দিয়ে আমরা আমাদের “ভার্চুয়াল এনভায়রনমেন্ট ” এক্টিভ করলাম। “ভার্চুয়াল এনভায়রনমেন্ট ” এক্টিভ থাকলে টার্মিনালের লাইনগুলোর শুরুতে প্রথম ব্র্যাকেটের ভিতর ভার্চুয়াল এনভায়র্নমেন্টের নাম দেখা যাবে
এখন আমরা এই ভার্চুয়াল মেশিনে জ্যাংগো ইনস্টল করবো এ জন্য নিচের কমান্ড অনুসরণ করি
pip install django~=1.10.2
“ভার্চুয়াল এনভায়রনমেন্ট ” এ জ্যাংগো ভার্সন চেক করার জন্য pip freeze দিন তাহলে জ্যাংগো এর ইনস্টলড ভার্সন দেখাবে।

উল্লেখ্য আমরা যদি “ভার্চুয়াল এনভায়রনমেন্ট ” এ পাইথন ৩ ব্যবহার করতে চাই তাহলে আমাদের নিচের কমান্ড অনুসরণ করতে হবে :

sudo apt-get install python3
sudo pip install virtualenv
virtualenv --python=python3 tenenv
source tenenv/bin/activate

এভাবে আমরা “ভার্চুয়াল এনভায়রনমেন্ট ” তৈরী করে কাজ করতে পারি ।
কাজ শেষে “ভার্চুয়াল এনভায়রনমেন্ট ” ডিএক্টিভ করতে চাইলে terminal এ deactivate দিলে ই কাজ হয়ে যাবে ।

“ব্লগ পোস্টের ব্যপারাে আপনার যে কোনো মতামত কমেন্টে জানাতে পারেন। ভুল ত্রুটি পেলে সংশোধন করে দিলে চির কৃতজ্ঞ থাকিব “

Uncategorized

Html Form ব্যাবহার করে ইউজার ইনপুট নেয়া

by , on
January 1, 2018

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

প্রথম পর্বে আমরা Html ফর্ম ব্যাবহার করে ইউজারের কাছ থেকে ডাটা নিব। ২য় পর্বে জ্যাঙ্গো ফর্ম ব্যাবহার করে ইউজারের কাছ থেকে ডাটা নিব এবং ডাটা প্রসেস করে ইউজারকে দেখাব।

App তৈরী

user_info নামে নতুন একটু এপ তৈরী করি।

python manage.py startapp user_info

settings.py এ user_info যুক্ত করি।

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog_post',
    'cost_management',
    'information',
    'user_info'
]

Views তৈরী

এই কাজটি করার জন্য প্রথমে আমরা একটি ভিউ তৈরী করি।  যেই ভিউ এর মাধ্যমে আমরা একটি html ফর্ম দেখাব।

user_info/views.py

from django.shortcuts import render


def show_user_info(request):
    """
    A django view to show user's Information
    """
    return render(request, 'user_info/user_info.html')

Templates/user_info এর মধ্যে user_info.html তৈরী করি । এই ভিউকে দেখার জন্য url তৈরী করি। user_info/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('info/', views.show_user_info, name='user-info'),

]

Base urls ( banglaidj/urls.py) এ user_info কে ইনক্লুড করে দেয়

urlpatterns = [
   -------------
   -------------
    path('user/', include('user_info.urls'), name='user'),

]

এখন ব্রাউজারে http://localhost:8000/user/info/ দিলে একটি ফাকা পেজ দেখতে পাবেন কারন আমরা user_info.html এ কিছুই এখনো লিখিনি।

user_info.html এ একটি HTML ফর্ম লিখিঃ

{% extends 'base.html' %}

{% block content %}
<h1>খরচ খুজুন </h1>

<form action="/user/info/" method="post">
        {% csrf_token %}
        তোমার নাম কি ? <input type="text" name="user_name">
        <input type="submit" value="ঠিক আছে">

</form>

{% endblock %}

আমাদের এই ভিউ এর প্রকৃত ইউআরএল ছিল localhost:8000/user/info । ব্রাউজারে প্রবেশ করালে একটি ফর্ম দেখতে পারব।এখন আমরা ফর্মের মাধ্যমে কিছু ডাটা show_user_info ভিউ এর মধ্যে পাঠাতে চাই এবং এই ডাটা নিয়ে আমরা চমৎকার কিছু কাজ করব।

csrf_token কি ?

একটা ফর্ম দিয়ে আসলে সার্ভারে POST রিকুয়েষ্ট পাঠানো হয়। ধরুন আপনার একটি ফর্ম আছে mysite.com/sell/ এ । ফর্ম এর কাজ হচ্ছে এই url এ POST রিকুয়েষ্টের মাধ্যমে কিছু ডাটা পাঠাবে। একজন ক্র্যাকার চাইলে ওই ইউআরএল এ আপনার ফর্ম ব্যাবহার না করে cUrl বা postman ব্যাবহার করে POST রিকুয়েষ্ট পাঠাতে পারে এবং ডাটার মধ্যে তার হ্যাকিং এর ডাটা পাঠিয়ে দিতে পারে।

এই বিপদ থেকে রেহায় পেতে জ্যাঙ্গো তার ফর্মের মধ্যে গোপনে একটি টোকেন জেনারেট করে দেয় এবং ফর্ম সাবমিট করা হলে ডাটার সাথে ওই টোকেনও পাঠিয়ে দেয় এবং টোকেনটি চেক করে। বিস্তারিত

HTTP Request কি?

যখন আমাদের ব্রাউজার আমাদের সামনে কোন ওয়েব পেজ দেখায় তখন ব্রাউজার আসলে কি করে? ব্রাউজার আসলে একটা ওয়েব সার্ভারের কাছে request করে। ভাই তুমি আমাকে প্লিজ একটা পেজ দেখাও। সার্ভার তখন ব্রাউজারের রিকুয়েষ্ট কে নিয়ে পরীক্ষা নিরীক্ষা করে দেখে ব্রাউজার কি ধরনের রিকুয়েষ্ট করেছে এবং সেই অনুযায়ী একটা response পাঠায় যেমন: “Hello browser”।

যখন ব্রাউজারে  localhost:8000/cost/search প্রবেশ করানো হয় তখন ব্রাউজার সার্ভারের কাছে request পাঠাচ্ছে যার টাইপ GET কারন ব্রাউজার তখন সার্ভারের কাছ থেকে কিছু গ্রহন করছে এবং সার্ভারে response হিসেবে user_info.html ব্রাউজেরর কাছে পাঠিয়ে দিচ্ছে।

পরীক্ষা করার জন্য show_user_info ভিউ এর মধ্যে লিখুন                               print(“request type: “, request.method) এবং ব্রাউজার refresh করুন। টার্মিনালে লক্ষ করুন।

যেহেতু আমরা ফর্মের মাধ্যমে কিছু ডাটা সার্ভারের কাছে পাঠাচ্ছি তখন সার্ভারের  request এর ধরন হবে POST। ফর্মে কিছু লিখে submit বাটনে ক্লিক করে আবারও টার্মিনালে লক্ষ করি।

অর্থাৎ এখন আমরা যেহেতু কিছু ডাটা সার্ভারের কাছে পাঠাচ্ছি তাই আমাদের রিকুয়েষ্ট টাইপ POST ।

ডাটা নিয়ে খেলা করুনঃ

আচ্ছা, আমরা ফর্মে যে ডাটা পাঠালাম এটা পাব কিভাবে ? একটু অপেক্ষা করুন । আগে দেখে নিই সার্ভারে আসলে কি কি ডাটা পোষ্ট হয়েছে। view এর মধ্যে আবার লিখুন print(“request data”, request.POST)

def show_user_info(request):
    print("request data: ", request.POST)
    context = {}
    return render(request, 'user_info/user_info.html', context)

ফর্মে hello লিখে সাবমিট করুন এবং টার্মিনালে লক্ষ করুন

GET  রিকুয়েষ্টের ক্ষত্রে request data: <QueryDict: {}>কোন ডাটা নেই কারন আমরা কিছু পোষ্ট করি নি। POST রিকুয়েষ্টের ক্ষেত্রে QueryDict এর মধ্যে আমরা csrfmiddlewaretoken ও user_name এর ভ্যালু পেয়েছি।

user_name এর ভ্যালু আমরা পেতে পারি এভাবে

user_name_value = request.POST["user_name"]

লক্ষ করুন, এই কোডটি শুধু পোষ্ট রিকুয়েষ্টেই ডাটা দেবে। তাই আমরা লিখতে পারি , যদি রিকুয়েষ্ট POST হয় তাহলে ফিল্ডের ডাটা নাও ।

def show_user_info(request):
    if request.method == 'POST':
        user_name_value = request.POST["user_name"]
        print("Your name is: ", user_name_value)

    context = {}
    return render(request, 'user_name/user_name.html', context)

এখন ফর্মটি পুরন করে টার্মিনালে লক্ষ করলে দেখবেন Your name is: হারুন লেখা উঠছে।

এখন একটা ছোট্ট খেলা করি। আমরা ইউজারের কাছ থেকে নাম ইনপুট নেব এবং ইউজারকে বলবঃ আসসালামুয়ালাইকুম বন্ধু অমুক , তুমি কেমন আছ ?

views.py

from django.shortcuts import render


def show_user_info(request):
    """
    A django view to show user's Information
    """
    print("request data: ", request.POST)
    if request.method == 'POST':
        user_name = request.POST["user_name"]
        context = {"name": user_name}
        return render(request, 'user_info/user_info.html', context)
    return render(request, 'user_info/user_info.html')

 

user_info/user_info.html

{% extends 'base.html' %}

{% block content %}
<h1>স্বাগতম বন্ধু !! </h1>

<form action="/user/info/" method="post">
        {% csrf_token %}
        তোমার নাম কি ? <input type="text" name="user_name">
        <input type="submit" value="ঠিক আছে">

</form>
    {% if name %}
       <p> আসসালামুয়ালাইকুম বন্ধু {{ name }}, তুমি কেমন আছ ?</p>
    {% endif %}

{% endblock %}

বাংলায় জ্যাঙ্গো টিউটোরিয়াল সিরিজের আগামী পর্বে  আমরা ইউজারের কাছ থেকে আরো কিছু তথ্য নিয়ে ইউজারকে দেখাবো।

<< সূচিপত্র