Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Views

Views

Django তে Views কি?

Django তে Views কি?

Django তে, “view” হল একটি Python function যা একটি web request নেয় এবং একটি web response প্রদান করে। ভিউ হল Django এর HTTP requests এবং responses গুলি পরিচালনার কেন্দ্রবিন্দু।

আমরা যখন কোন একটা ইউআরএল এ রিকোয়েস্ট পাঠায় তখন Django এর নিয়মে সে আমাদের ওই ইউআরএল অনুযায়ী একটি ভিউ তে পাঠিয়ে দেয় যেখানে এই ইউআরএল এর জন্য কোন html পেজ শো করবে বা অন্য কিছু যেমন জেসন রেসপন্স শো করবে তা ডেভেলপার একটি পাইথন ফাইলে ওই রিকোয়েস্টের জন্য লিখে রাখে এবং লিখে রাখার যে নিয়ম সেটাই হলো Django এর ভাষায় ভিউ

Django তে Views কত ধরণের?

Django তে Views গুলো মূলত দুই ধরণের:

  • function-based views (FBVs)
  • class-based views (CBVs)

function-based views ভিউ আমরা বানাই নিচের মতো করে

from django.http import HttpResponse


def my_view(request):
    if request.method == "GET":
        # <view logic>
        return HttpResponse("result")

urls.py

from django.urls import path
from myapp.views import MyView
urlpatterns = [
    path("about/", MyView.my_view,name="my_view"),
]

class-based views আমরা বানাই নিচের মতো করে

from django.http import HttpResponse
from django.views import View


class MyView(View):
    def get(self, request):
        # <view logic>
        return HttpResponse("result")

urls.py

from django.urls import path
from myapp.views import MyView

urlpatterns = [
    path("about/", MyView.as_view()),
]

function-based views

function-based views (FBVs) কি?

function-based views (FBVs) হল একজন Django Developer একেকটি View এর জন্য একেকটি Python Function ব্যবহার করবে, যা একটি argument কে HttpRequest object হিসাবে গ্রহণ করে এবং একটি HttpResponse object return করে।

from django.http import HttpResponse
 
def hello(request):
    return HttpResponse("Hello, world!")

এই view টি কেবল একটি plain text “Hello, world!” কে HTTP response হিসাবে রিটার্ন করবে।

 function-based views (FBVs) অতিরিক্ত arguments ও গ্রহণ করতে পারে, যেমন URL parameters বা ইউজারের সাবমিট দেওয়া ফর্ম থেকে ডেটা। উদাহরণস্বরূপ, এখানে একটি view যা URL-এ একটি “name” প্যারামিটার আশা করে এবং এটি একটি ব্যক্তিগত অভিবাদন তৈরি করতে ব্যবহার করে:

from django.http import HttpResponse
 
def greet(request, name):
    return HttpResponse(f"Hello, {name}!")

Note:উপরের দুটি উদাহরণের (যথাক্রমে http://localhost:8000/hello এবং http://localhost:8000/greet/Masud ) আউটপুট ব্রাউজারে দেখতে চাইলে আপনার app folder এর মধ্যে অবস্থিত urls.py তে নিম্নোক্ত কোড গুলো যুক্ত করে দিতে হবে :

from django.urls import path
from . import views
 
urlpatterns = [
    path('hello/', views.hello, name='hello'),
    path('greet/<str:name>/', views.greet, name='greet'),
]

class-based views

class-based views (CBVs) কি?

class-based views (CBVs) ফাংশনের পরিবর্তে একজন Django Developer একেকটি View এর জন্য একেকটি Python Class ব্যবহার করবে, 

from django.shortcuts import render
from django.views import View
from django.http import HttpResponse

class HelloView(View):
    def get(self, request):
        return HttpResponse("Hello, World!")

class HelloNameView(View):
    def get(self, request, name):
        return HttpResponse(f"Hello, {name}!")

urls.py

# myapp/urls.py
from django.urls import path
from .views import HelloView, HelloNameView

urlpatterns = [
    path('hello/', HelloView.as_view(), name='hello'),
    path('hello/<str:name>/', HelloNameView.as_view(), name='hello_name'),
]

আমরা চাইলে একটা ভিউ এর মধ্যে দুইটা ইউআরএল প্যারামিটার ছাড়া ও প্যারামিটার সহ ব্যবহার করতে পারি।

# myapp/views.py
from django.shortcuts import render
from django.views import View
from django.http import HttpResponse

class HelloView(View):
    def get(self, request, name=None):
        if name:
            return HttpResponse(f"Hello, {name}!")
        else:
            return HttpResponse("Hello, World!")

urls.py

# myapp/urls.py
from django.urls import path
from .views import HelloView

urlpatterns = [
    path('hello/', HelloView.as_view(), name='hello'),
    path('hello/<str:name>/', HelloView.as_view(), name='hello_name'),
]

You can test it with the same URLs as before:

http://localhost:8000/myapp/hello/YourName/ for the “Hello, YourName!” view.

http://localhost:8000/myapp/hello/ for the “Hello, World!” view.

Django ভিউ তে Decorator কি

Django ভিউ তে Decorator কি

এমন ফাংশন যা অতিরিক্ত ফাঙ্কশনালিটি যোগ করার জন্য ব্যবহৃত হয়। অন্য কথায়, ডেকোরেটর হল একটি function এর আচরণ পরিবর্তন বা উন্নত করার একটি উপায়।

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

Function-Based View with Login Decorator:

# views.py
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
from django.http import HttpResponse

@login_required
def hello_world_functional(request):
    return HttpResponse("Hello, World!")

Class-Based View with Login Decorator:

# views.py
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views import View
from django.http import HttpResponse

@method_decorator(login_required, name='dispatch')
class HelloWorldClassView(View):
    def get(self, request):
        return HttpResponse("Hello, World!")

name=’dispatch’ প্রতিটি http রিকোয়েস্ট এর জন্য dispatch কল করা হয়েছে যেখানে লগইন চেক করবে

urls.py

# urls.py
from django.urls import path
from .views import hello_world_functional, HelloWorldClassView

urlpatterns = [
    path('hello-functional/', hello_world_functional, name='hello_functional'),
    path('hello-class/', HelloWorldClassView.as_view(), name='hello_class'),
]

কিছু ডেকোরেটর এর উদাহরণ

@login_required

@permission_required

@user_passes_test

@csrf_exempt

@cache_page

@require_http_methods

@login_required: নিশ্চিত করে যে ব্যবহারকারী ভিউ অ্যাক্সেস করার আগে লগ ইন করেছেন। ব্যবহারকারী প্রমাণীকৃত না হলে লগইন পৃষ্ঠায় পুনঃনির্দেশ করে।

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    # Your view logic here

@permission_required: ব্যবহারকারীর অনুমতির উপর ভিত্তি করে ভিউতে অ্যাক্সেস সীমাবদ্ধ করে। ব্যবহারকারীর প্রয়োজনীয় অনুমতি না থাকলে লগইন পৃষ্ঠায় বা একটি নির্দিষ্ট ভিউতে পুনঃনির্দেশ করে।

from django.contrib.auth.decorators import permission_required

@permission_required('myapp.change_mymodel')
def my_view(request):
    # Your view logic here

কিভাবে পারমিশন বানাতে হয় এ সম্পর্কে আরেকটি টিউটোরিয়াল সামনে দেয়া হবে এখানে বলা হয়েছে myapp এর mymodel এর change পারমিশন apply হবে এই ভিউটির জন্য আমরা এ সম্পর্কে সামনে জানবো বিস্তারিত।

@user_passes_test: একজন ব্যবহারকারী ভিউ অ্যাক্সেস করতে পারে কিনা তা নির্ধারণ করতে আপনাকে একটি কাস্টম পরীক্ষা ফাংশন সংজ্ঞায়িত করার অনুমতি দেয়।

from django.contrib.auth.decorators import user_passes_test

def test_func(user):
    return user.is_staff

@user_passes_test(test_func)
def my_view(request):
    # Your view logic here

@csrf_exempt: CSRF (ক্রস-সাইট অনুরোধ জালিয়াতি) সুরক্ষা থেকে দৃশ্যকে ছাড় দেয়। এই ডেকোরেটর ব্যবহার করার সময় সতর্ক থাকুন, কারণ এটি আপনার view কে নিরাপত্তার ঝুঁকিতে ফেলতে পারে।

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_view(request):
    # Your view logic here

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

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)  # Cache for 15 minutes
def my_view(request):
    # Your view logic here

@require_http_methods: দেখার জন্য অনুমোদিত HTTP পদ্ধতি সীমাবদ্ধ করে।

from django.views.decorators.http import require_http_methods

@require_http_methods(["GET", "POST"])
def my_view(request):
    # Your view logic here

Django তে আরো অনেক ডেকোরেটর আছে

Articles

How can we help?