মনেকরি আমরা api তে নিচের মতো করে রিকোয়েস্ট দেব যেখানে userid,মডেল ও অবজেক্ট এর id থাকবে এবং পারমিশন সেট হবে
Postman দিয়ে ডেটা পাঠানো
এখন আপনি Postman এর মাধ্যমে ডেটা পাঠাতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:
Body (JSON Format):
Method: POST
URL: http://127.0.0.1:8000/api/assign-permissions/
{
"user_id": 1,
"documents": [
{
"id": 101,
"permissions": ["documents.view_document", "documents.change_document"]
},
{
"id": 102,
"permissions": ["documents.view_document", "documents.delete_document"]
}
]
}
Serializers তৈরি করা
documents/serializers.py ফাইলে ডকুমেন্টের জন্য সিরিয়ালাইজার তৈরি করুন:
from rest_framework import serializers
from .models import Document
class DocumentSerializer(serializers.ModelSerializer):
class Meta:
model = Document
fields = ['id', 'title', 'content', 'company']
Views তৈরি করা
এবার API এর জন্য view তৈরি করতে হবে যা আমাদের ফ্রন্টএন্ড থেকে পাঠানো ডেটা প্রসেস করবে।
documents/views.py:
from guardian.shortcuts import assign_perm, remove_perm, get_perms
# 'guardian' লাইব্রেরি থেকে assign_perm, remove_perm, এবং get_perms ফাংশন ইমপোর্ট করা হচ্ছে
# assign_perm: নির্দিষ্ট ইউজারকে নির্দিষ্ট অবজেক্টের ওপর পারমিশন অ্যাসাইন করতে ব্যবহার হয়
# remove_perm: ইউজার থেকে নির্দিষ্ট অবজেক্টের পারমিশন রিমুভ করে
# get_perms: ইউজারের নির্দিষ্ট অবজেক্টে কোন কোন পারমিশন আছে তা বের করে
from rest_framework.response import Response
# 'Response' ক্লাসটি ইমপোর্ট করা হচ্ছে যা API রিকোয়েস্টের রেসপন্স হিসেবে ডেটা পাঠাতে ব্যবহৃত হয়
from rest_framework.views import APIView
# 'APIView' ক্লাসটি ইমপোর্ট করা হচ্ছে, যা Django Rest Framework এ API ভিউ তৈরি করতে ব্যবহৃত হয়
from rest_framework import status
# 'status' ইমপোর্ট করা হচ্ছে, যা বিভিন্ন HTTP status কোডের জন্য ব্যবহৃত হয় (যেমন 200, 404 ইত্যাদি)
from django.contrib.auth.models import User
# Django এর বিল্ট-ইন ইউজার মডেল ইমপোর্ট করা হচ্ছে, যাতে আমরা ইউজার সম্পর্কিত কাজ করতে পারি
from .models import Document
# 'Document' মডেলটি ইমপোর্ট করা হচ্ছে, যা সম্ভবত আমাদের ডাটাবেসে ডকুমেন্ট সংরক্ষণ করে
class AssignDocumentPermissions(APIView):
# 'AssignDocumentPermissions' নামে একটি ক্লাস তৈরি করা হয়েছে যা APIView এর ইনহেরিটেড ক্লাস
# এই ক্লাসে POST মেথড ব্যবহার করে পারমিশন অ্যাসাইন, রিমুভ বা চেক করা হবে
def post(self, request):
# POST রিকোয়েস্টের জন্য একটি মেথড তৈরি করা হলো
user_id = request.data.get('user_id')
# রিকোয়েস্ট থেকে user_id বের করা হচ্ছে
documents = request.data.get('documents', [])
# রিকোয়েস্ট থেকে documents তালিকা বের করা হচ্ছে, ডিফল্ট হচ্ছে একটি খালি তালিকা
action = request.data.get('action', 'assign')
# রিকোয়েস্ট থেকে action বের করা হচ্ছে, ডিফল্ট হচ্ছে 'assign'
# ইউজার খুঁজে বের করা
try:
user = User.objects.get(id=user_id)
# user_id দিয়ে ইউজার খুঁজছি
except User.DoesNotExist:
# যদি ইউজার না পাওয়া যায়
return Response({"detail": "User not found"}, status=status.HTTP_404_NOT_FOUND)
# 404 স্ট্যাটাস সহ 'User not found' বার্তা পাঠাচ্ছি
# প্রতিটি ডকুমেন্ট এবং তার পারমিশন অ্যাসাইন বা ডিলিট করার জন্য প্রস্তুতি নিচ্ছি
result = {}
# পারমিশনের ফলাফল সংরক্ষণ করার জন্য একটি ডিকশনারি তৈরি করছি
for doc_data in documents:
# প্রতিটি ডকুমেন্ট ডেটার জন্য লুপ
doc_id = doc_data.get('id')
# ডকুমেন্টের আইডি নিয়ে আসছি
permissions = doc_data.get('permissions', [])
# ডকুমেন্টের পারমিশনগুলো নিয়ে আসছি
try:
document = Document.objects.get(id=doc_id)
# doc_id দিয়ে ডকুমেন্ট খুঁজছি
except Document.DoesNotExist:
# যদি ডকুমেন্ট না পাওয়া যায়
return Response({"detail": f"Document with ID {doc_id} not found"}, status=status.HTTP_404_NOT_FOUND)
# 404 স্ট্যাটাস সহ ডকুমেন্ট না পাওয়ার বার্তা পাঠাচ্ছি
# পারমিশন অ্যাসাইন, ডিলিট বা চেক করার জন্য
if action == 'assign':
# যদি অ্যাকশন 'assign' হয়
for perm in permissions:
# প্রতিটি পারমিশনের জন্য লুপ
assign_perm(perm, user, document)
# ইউজার এবং ডকুমেন্টের জন্য পারমিশন অ্যাসাইন করছি
elif action == 'remove':
# যদি অ্যাকশন 'remove' হয়
for perm in permissions:
# প্রতিটি পারমিশনের জন্য লুপ
if perm in get_perms(user, document):
# ইউজারের কাছে পারমিশন আছে কিনা তা চেক করছি
remove_perm(perm, user, document)
# ইউজারের কাছ থেকে পারমিশন রিমুভ করছি
elif action == 'check':
# যদি অ্যাকশন 'check' হয়
user_perms = get_perms(user, document)
# ইউজারের ডকুমেন্টের পারমিশন চেক করা
result[doc_id] = user_perms
# ফলাফল ডিকশনারিতে সংরক্ষণ করছি
# যদি অ্যাকশন 'check' হয়
if action == 'check':
return Response({"detail": "Permissions fetched successfully!", "permissions": result}, status=status.HTTP_200_OK)
# 200 স্ট্যাটাস সহ পারমিশনস পাঠাচ্ছি
else:
return Response({"detail": f"Permissions {action}ed successfully!"}, status=status.HTTP_200_OK)
# 200 স্ট্যাটাস সহ সফলতার বার্তা পাঠাচ্ছি
URLs সেটআপ করা
documents/urls.py:
from django.urls import path
from .views import AssignDocumentPermissions
urlpatterns = [
# অ্যাসাইন/রিমুভ/চেক করার জন্য API URL
path('permissions/', AssignDocumentPermissions.as_view(), name='assign_permissions'),
]
এখানে permissions/ নামে একটি URL রেজিস্টার করা হয়েছে, যা AssignDocumentPermissions ভিউ-এ রিকোয়েস্ট পাঠাবে।
রিকোয়েস্ট তৈরি করুন
আপনার API-এর URL প্রবেশ করান। যেমন:
HTTP মেথড নির্বাচন করুন:
POST নির্বাচন করুন। এটি API-তে নতুন ডেটা পাঠাতে ব্যবহৃত হয়।
URL প্রবেশ করান:
http://localhost:8000/api/assign-permissions/ - (এটি আপনার Django সার্ভারের ঠিকানা হতে পারে। নিশ্চিত করুন যে সার্ভার চলমান আছে।)
Headers সেট করুন:
- Headers ট্যাব নির্বাচন করুন এবং নতুন একটি header যোগ করুন:
- Key:
Content-Type - Value:
application/json
- Key:
Body সেট করুন:
- Body ট্যাব নির্বাচন করুন এবং
rawনির্বাচন করুন। তারপর JSON ফরম্যাটে আপনার ডেটা প্রবেশ করান। যেমন:
{
"user_id": 1,
"documents": [
{
"id": 101,
"permissions": ["document.view_document", "document.change_document", "document.delete_document"]
},
{
"id": 102,
"permissions": ["document.view_document"]
}
],
"action": "assign"
}
-
- খানে
user_id,documents, এবংactionএর মান আপনার প্রয়োজন অনুযায়ী পরিবর্তন করুন।
- খানে
পদক্ষেপ ৪: রিকোয়েস্ট পাঠান
- সবকিছু ঠিকমত পূরণ করার পর,
Sendবোতামে ক্লিক করুন।
পদক্ষেপ ৫: রেসপন্স পরীক্ষা করুন
- রিকোয়েস্ট সফল হলে, আপনি রেসপন্সে একটি JSON অবজেক্ট পাবেন যা বলবে “Permissions assigned successfully!” অথবা যদি কোনো সমস্যা হয় তবে আপনি তাও দেখতে পাবেন।
উদাহরণ রেসপন্স
সফল হলে রেসপন্সটি এরকম হতে পারে:
{
"detail": "Permissions assigned successfully!"
}
এভাবে আপনি পোস্টম্যান ব্যবহার করে আপনার Django API তে রিকোয়েস্ট পাঠাতে পারবেন। যদি কোনো প্রশ্ন থাকে, বা কিছু বুঝতে অসুবিধা হয়, তাহলে জানাতে পারেন!