এটি ক্লাসরুম অ্যাড-অন ওয়াকথ্রু সিরিজের চতুর্থ পর্ব।
এই নির্দেশিকায়, আপনি অ্যাটাচমেন্ট তৈরি করার জন্য গুগল ক্লাসরুম এপিআই (Google Classroom API) ব্যবহার করবেন। ব্যবহারকারীদের অ্যাটাচমেন্টের বিষয়বস্তু দেখার জন্য আপনি বিভিন্ন পথ বা রুট প্রদান করবেন। ক্লাসে ব্যবহারকারীর ভূমিকার উপর নির্ভর করে এই ভিউগুলো ভিন্ন ভিন্ন হয়। এই নির্দেশিকায় কন্টেন্ট-টাইপ অ্যাটাচমেন্ট নিয়ে আলোচনা করা হয়েছে, যেগুলোর জন্য শিক্ষার্থীর জমা দেওয়ার প্রয়োজন হয় না।
এই নির্দেশিকাটি অনুসরণ করার সময় আপনাকে নিম্নলিখিত কাজগুলো সম্পন্ন করতে হবে:
- নিম্নলিখিত অ্যাড-অন কোয়েরি প্যারামিটারগুলো পুনরুদ্ধার করুন এবং ব্যবহার করুন:
-
addOnToken: অ্যাটাচমেন্ট ডিসকভারি ভিউ-তে প্রেরিত একটি অনুমোদন টোকেন। -
itemId: যে কোর্সওয়ার্ক, কোর্সওয়ার্ক ম্যাটেরিয়াল বা অ্যানাউন্সমেন্টটি অ্যাড-অন অ্যাটাচমেন্ট গ্রহণ করে, তার একটি অনন্য শনাক্তকারী। -
itemType: হয় "কোর্সওয়ার্ক", "কোর্সওয়ার্ক উপকরণ" অথবা "ঘোষণা"। -
courseId: যে গুগল ক্লাসরুম কোর্সে অ্যাসাইনমেন্টটি তৈরি করা হচ্ছে, তার একটি অনন্য শনাক্তকারী। -
attachmentId: একটি অনন্য শনাক্তকারী যা গুগল ক্লাসরুম একটি অ্যাড-অন অ্যাটাচমেন্ট তৈরি করার পর সেটিকে প্রদান করে।
-
- কন্টেন্ট-টাইপ অ্যাটাচমেন্টের জন্য স্থায়ী স্টোরেজ বাস্তবায়ন করুন।
- অ্যাটাচমেন্ট তৈরি করার জন্য এবং টিচার ভিউ ও স্টুডেন্ট ভিউ আইফ্রেমগুলো পরিবেশন করার জন্য রুট প্রদান করুন।
- গুগল ক্লাসরুম অ্যাড-অন এপিআই-তে নিম্নলিখিত অনুরোধগুলি পাঠান:
- একটি নতুন সংযুক্তি তৈরি করুন।
- অ্যাড-অন কনটেক্সটটি সংগ্রহ করুন, যা শনাক্ত করে যে লগ-ইন করা ব্যবহারকারী একজন শিক্ষার্থী নাকি শিক্ষক।
কাজ শেষ হয়ে গেলে, শিক্ষক হিসেবে লগ ইন করে আপনি গুগল ক্লাসরুম ইউআই (UI) থেকে অ্যাসাইনমেন্টে কন্টেন্ট-টাইপ অ্যাটাচমেন্ট তৈরি করতে পারবেন। ক্লাসের শিক্ষক এবং শিক্ষার্থীরাও সেই কন্টেন্ট দেখতে পারবেন।
ক্লাসরুম এপিআই সক্রিয় করুন
এই ধাপ থেকে ক্লাসরুম এপিআই-তে কল করা শুরু করুন। এপিআই-তে কল করার আগে আপনার গুগল ক্লাউড প্রোজেক্টের জন্য এটি অবশ্যই সক্রিয় থাকতে হবে। গুগল ক্লাসরুম এপিআই লাইব্রেরি এন্ট্রিতে যান এবং ‘Enable’ নির্বাচন করুন।
অ্যাটাচমেন্ট ডিসকভারি ভিউ কোয়েরি প্যারামিটারগুলো পরিচালনা করুন
পূর্বে যেমন আলোচনা করা হয়েছে , গুগল ক্লাসরুম আইফ্রেমে অ্যাটাচমেন্ট ডিসকভারি ভিউ লোড করার সময় কোয়েরি প্যারামিটার পাস করে থাকে:
-
courseId: বর্তমান ক্লাসরুম কোর্সের আইডি। -
itemId: যে কোর্সওয়ার্ক, কোর্সওয়ার্ক ম্যাটেরিয়াল বা অ্যানাউন্সমেন্টটি অ্যাড-অন অ্যাটাচমেন্ট গ্রহণ করে, তার একটি অনন্য শনাক্তকারী। -
itemType: হয় "কোর্সওয়ার্ক", "কোর্সওয়ার্ক উপকরণ" অথবা "ঘোষণা"। -
addOnToken: ক্লাসরুমের নির্দিষ্ট কিছু অ্যাড-অন কার্যক্রম অনুমোদন করার জন্য ব্যবহৃত একটি টোকেন। -
login_hint: বর্তমান ব্যবহারকারীর গুগল আইডি।
এই নির্দেশিকায় courseId , itemId , itemType এবং addOnToken নিয়ে আলোচনা করা হয়েছে। Classroom API-তে কল করার সময় এগুলো সংরক্ষণ করুন এবং পাস করুন।
পূর্ববর্তী ওয়াকথ্রু ধাপের মতোই, পাস করা কোয়েরি প্যারামিটারের মানগুলো আমাদের সেশনে সংরক্ষণ করুন। অ্যাটাচমেন্ট ডিসকভারি ভিউ প্রথমবার খোলার সময় এটি করা গুরুত্বপূর্ণ, কারণ ক্লাসরুমের জন্য এই কোয়েরি প্যারামিটারগুলো পাস করার এটিই একমাত্র সুযোগ।
পাইথন
আপনার ফ্লাস্ক সার্ভার ফাইলে যান যেটি অ্যাটাচমেন্ট ডিসকভারি ভিউ-এর জন্য রাউট সরবরাহ করে (আপনি যদি আমাদের দেওয়া উদাহরণ অনুসরণ করেন তবে ফাইলটি হলো attachment-discovery-routes.py )। আপনার অ্যাড-অন ল্যান্ডিং রাউটের শুরুতে (আমাদের দেওয়া উদাহরণে /classroom-addon ), courseId , itemId , itemType এবং addOnToken কোয়েরি প্যারামিটারগুলো সংগ্রহ করে সংরক্ষণ করুন।
# Retrieve the itemId, courseId, and addOnToken query parameters.
if flask.request.args.get("itemId"):
flask.session["itemId"] = flask.request.args.get("itemId")
if flask.request.args.get("itemType"):
flask.session["itemType"] = flask.request.args.get("itemType")
if flask.request.args.get("courseId"):
flask.session["courseId"] = flask.request.args.get("courseId")
if flask.request.args.get("addOnToken"):
flask.session["addOnToken"] = flask.request.args.get("addOnToken")
এই মানগুলি সেশনে কেবল তখনই লিখুন যখন সেগুলি উপস্থিত থাকে; ব্যবহারকারী যদি আইফ্রেমটি বন্ধ না করে পরে অ্যাটাচমেন্ট ডিসকভারি ভিউতে ফিরে আসেন, তাহলে সেগুলি আর পাঠানো হয় না।
কন্টেন্ট-টাইপ অ্যাটাচমেন্টের জন্য স্থায়ী স্টোরেজ যোগ করুন
আপনার তৈরি করা যেকোনো অ্যাটাচমেন্টের একটি স্থানীয় রেকর্ড প্রয়োজন। এর মাধ্যমে আপনি ক্লাসরুম থেকে দেওয়া আইডেন্টিফায়ার ব্যবহার করে শিক্ষকের নির্বাচিত কন্টেন্ট খুঁজে বের করতে পারবেন।
একটি Attachment জন্য একটি ডাটাবেস স্কিমা সেট আপ করুন। আমাদের প্রদত্ত উদাহরণে এমন অ্যাটাচমেন্ট রয়েছে যেগুলিতে একটি ছবি এবং একটি ক্যাপশন দেখা যায়। একটি Attachment নিম্নলিখিত অ্যাট্রিবিউটগুলো থাকে:
-
attachment_id: একটি অ্যাটাচমেন্টের জন্য একটি অনন্য শনাক্তকারী। এটি Classroom দ্বারা নির্ধারিত হয় এবং অ্যাটাচমেন্ট তৈরি করার সময় রেসপন্সে ফেরত দেওয়া হয়। -
image_filename: প্রদর্শিতব্য ছবিটির স্থানীয় ফাইলের নাম। -
image_caption: ছবির সাথে প্রদর্শিতব্য ক্যাপশন।
পাইথন
পূর্ববর্তী ধাপগুলো থেকে SQLite এবং flask_sqlalchemy বাস্তবায়নকে সম্প্রসারিত করুন।
সেই ফাইলটিতে যান যেখানে আপনি আপনার ইউজার টেবিলটি তৈরি করেছেন (আমাদের দেওয়া উদাহরণ অনুসরণ করলে ফাইলটির models.py )। ফাইলটির একদম নিচে User ক্লাসের নিচে নিম্নলিখিত কোডটি যোগ করুন।
class Attachment(db.Model):
# The attachmentId is the unique identifier for the attachment.
attachment_id = db.Column(db.String(120), primary_key=True)
# The image filename to store.
image_filename = db.Column(db.String(120))
# The image caption to store.
image_caption = db.Column(db.String(120))
আপনার অ্যাটাচমেন্ট হ্যান্ডলিং রাউটগুলোর সাথে নতুন Attachment ক্লাসটি সার্ভার ফাইলে ইম্পোর্ট করুন।
নতুন রুট সেট আপ করুন
আমাদের অ্যাপ্লিকেশনে কিছু নতুন পৃষ্ঠা সেট আপ করার মাধ্যমে এই ওয়াকথ্রু ধাপটি শুরু করুন। এগুলোর মাধ্যমে একজন ব্যবহারকারী আমাদের অ্যাড-অন ব্যবহার করে কন্টেন্ট তৈরি ও দেখতে পারবেন।
সংযুক্তি তৈরির রুট যোগ করুন
শিক্ষকদের বিষয়বস্তু নির্বাচন এবং সংযুক্তি তৈরির অনুরোধ জানানোর জন্য আপনার পেজ প্রয়োজন। শিক্ষকদের নির্বাচনের জন্য বিষয়বস্তুর বিকল্পগুলো প্রদর্শন করতে /attachment-options রুটটি প্রয়োগ করুন। এছাড়াও, বিষয়বস্তু নির্বাচন এবং তৈরির নিশ্চিতকরণ পেজগুলোর জন্য আপনার টেমপ্লেট প্রয়োজন। আমাদের দেওয়া উদাহরণগুলোতে এগুলোর জন্য টেমপ্লেট রয়েছে এবং এগুলো Classroom API থেকে আসা অনুরোধ ও প্রতিক্রিয়াগুলোও প্রদর্শন করতে পারে।
উল্লেখ্য যে, নতুন /attachment-options পৃষ্ঠাটি তৈরি করার পরিবর্তে আপনি বিকল্পভাবে আপনার বিদ্যমান অ্যাটাচমেন্ট ডিসকভারি ভিউ ল্যান্ডিং পৃষ্ঠাটি পরিবর্তন করে কন্টেন্ট অপশনগুলো প্রদর্শন করতে পারেন। এই অনুশীলনের উদ্দেশ্যে আমরা একটি নতুন পৃষ্ঠা তৈরি করার পরামর্শ দিচ্ছি, যাতে আপনি দ্বিতীয় ধাপে বাস্তবায়িত SSO আচরণ, যেমন অ্যাপ পারমিশন প্রত্যাহার, বজায় রাখতে পারেন। আপনার অ্যাড-অন তৈরি এবং পরীক্ষা করার সময় এগুলো সহায়ক প্রমাণিত হবে।
একজন শিক্ষক আমাদের দেওয়া উদাহরণ থেকে ক্যাপশনযুক্ত কয়েকটি ছবি বেছে নিতে পারেন। আমরা চারটি বিখ্যাত স্থানের ছবি দিয়েছি, যেগুলোর ক্যাপশন ফাইলের নাম থেকে নেওয়া হয়েছে।
পাইথন
আমাদের দেওয়া উদাহরণে, এটি webapp/attachment_routes.py ফাইলে রয়েছে।
@app.route("/attachment-options", methods=["GET", "POST"])
def attachment_options():
"""
Render the attachment options page from the "attachment-options.html"
template.
This page displays a grid of images that the user can select using
checkboxes.
"""
# A list of the filenames in the static/images directory.
image_filenames = os.listdir(os.path.join(app.static_folder, "images"))
# The image_list_form_builder method creates a form that displays a grid
# of images, checkboxes, and captions with a Submit button. All images
# passed in image_filenames will be shown, and the captions will be the
# title-cased filenames.
# The form must be built dynamically due to limitations in WTForms. The
# image_list_form_builder method therefore also returns a list of
# attribute names in the form, which will be used by the HTML template
# to properly render the form.
form, var_names = image_list_form_builder(image_filenames)
# If the form was submitted, validate the input and create the attachments.
if form.validate_on_submit():
# Build a dictionary that maps image filenames to captions.
# There will be one dictionary entry per selected item in the form.
filename_caption_pairs = construct_filename_caption_dictionary_list(
form)
# Check that the user selected at least one image, then proceed to
# make requests to the Classroom API.
if len(filename_caption_pairs) > 0:
return create_attachments(filename_caption_pairs)
else:
return flask.render_template(
"create-attachment.html",
message="You didn't select any images.",
form=form,
var_names=var_names)
return flask.render_template(
"attachment-options.html",
message=("You've reached the attachment options page. "
"Select one or more images and click 'Create Attachment'."),
form=form,
var_names=var_names,
)
এর ফলে নিম্নলিখিত চিত্রের মতো একটি "সংযুক্তি তৈরি করুন" পৃষ্ঠা তৈরি হয়:

শিক্ষক একাধিক ছবি নির্বাচন করতে পারেন। create_attachments মেথডে শিক্ষকের নির্বাচিত প্রতিটি ছবির জন্য একটি করে অ্যাটাচমেন্ট তৈরি করুন।
সংযুক্তি তৈরির অনুরোধগুলি ইস্যু করুন
শিক্ষক কোন কোন বিষয়বস্তু সংযুক্ত করতে চান তা এখন যেহেতু আপনি জানেন, আমাদের অ্যাসাইনমেন্টে সংযুক্তি তৈরি করার জন্য ক্লাসরুম এপিআই-কে অনুরোধ পাঠান। ক্লাসরুম এপিআই থেকে প্রতিক্রিয়া পাওয়ার পর সংযুক্তির বিবরণ আপনার ডেটাবেসে সংরক্ষণ করুন।
প্রথমে Classroom সার্ভিসটির একটি ইনস্ট্যান্স গ্রহণ করুন:
পাইথন
আমাদের দেওয়া উদাহরণে, এটি webapp/attachment_routes.py ফাইলে রয়েছে।
def create_attachments(filename_caption_pairs):
"""
Create attachments and show an acknowledgement page.
Args:
filename_caption_pairs: A dictionary that maps image filenames to
captions.
"""
# Get the Google Classroom service.
classroom_service = googleapiclient.discovery.build(
serviceName="classroom",
version="v1",
credentials=credentials)
courses.courseWork.addOnAttachments এন্ডপয়েন্টে একটি CREATE রিকোয়েস্ট পাঠান। শিক্ষকের দ্বারা নির্বাচিত প্রতিটি ছবির জন্য, প্রথমে একটি AddOnAttachment অবজেক্ট তৈরি করুন:
পাইথন
আমাদের দেওয়া উদাহরণে, এটি create_attachments মেথডটির একটি ধারাবাহিকতা।
# Create a new attachment for each image that was selected.
attachment_count = 0
for key, value in filename_caption_pairs.items():
attachment_count += 1
# Create a dictionary with values for the AddOnAttachment object fields.
attachment = {
# Specifies the route for a teacher user.
"teacherViewUri": {
"uri":
flask.url_for(
"load_content_attachment", _scheme='https', _external=True),
},
# Specifies the route for a student user.
"studentViewUri": {
"uri":
flask.url_for(
"load_content_attachment", _scheme='https', _external=True)
},
# The title of the attachment.
"title": f"Attachment {attachment_count}",
}
প্রতিটি অ্যাটাচমেন্টের জন্য অন্তত teacherViewUri , studentViewUri এবং title ফিল্ডগুলো অবশ্যই প্রদান করতে হবে। teacherViewUri এবং studentViewUri হলো সেই URL-গুলো, যা সংশ্লিষ্ট ব্যবহারকারীর ধরন দ্বারা অ্যাটাচমেন্টটি খোলার সময় লোড হয়।
উপযুক্ত addOnAttachments এন্ডপয়েন্টে পাঠানো রিকোয়েস্টের বডিতে AddOnAttachment অবজেক্টটি পাঠান। প্রতিটি রিকোয়েস্টের সাথে courseId , itemId , itemType এবং addOnToken আইডেন্টিফায়ারগুলো প্রদান করুন।
পাইথন
আমাদের দেওয়া উদাহরণে, এটি create_attachments মেথডটির একটি ধারাবাহিকতা।
# Use the itemType to determine which stream item type the teacher created
match flask.session["itemType"]:
case "announcements":
parent = classroom_service.courses().announcements()
case "courseWorkMaterials":
parent = classroom_service.courses().courseWorkMaterials()
case _:
parent = classroom_service.courses().courseWork()
# Issue a request to create the attachment.
resp = parent.addOnAttachments().create(
courseId=flask.session["courseId"],
itemId=flask.session["itemId"],
addOnToken=flask.session["addOnToken"],
body=attachment).execute()
আপনার স্থানীয় ডেটাবেসে এই অ্যাটাচমেন্টটির জন্য একটি এন্ট্রি তৈরি করুন, যাতে আপনি পরে সঠিক কন্টেন্ট লোড করতে পারেন। ক্লাসরুম ক্রিয়েশন রিকোয়েস্টের রেসপন্সে একটি ইউনিক id ভ্যালু রিটার্ন করে, তাই এটিকে আমাদের ডেটাবেসে প্রাইমারি কী হিসেবে ব্যবহার করুন। আরও মনে রাখবেন যে, টিচার এবং স্টুডেন্ট ভিউ খোলার সময় ক্লাসরুম attachmentId কোয়েরি প্যারামিটারটি পাস করে থাকে।
পাইথন
আমাদের দেওয়া উদাহরণে, এটি create_attachments মেথডটির একটি ধারাবাহিকতা।
# Store the value by id.
new_attachment = Attachment(
# The new attachment's unique ID, returned in the CREATE response.
attachment_id=resp.get("id"),
image_filename=key,
image_caption=value)
db.session.add(new_attachment)
db.session.commit()
এই পর্যায়ে, ব্যবহারকারী যে সফলভাবে অ্যাটাচমেন্ট তৈরি করেছেন তা স্বীকার করে তাকে একটি নিশ্চিতকরণ পৃষ্ঠায় পাঠানোর কথা বিবেচনা করতে পারেন।
আপনার অ্যাড-অন থেকে সংযুক্তি অনুমোদনের অনুমতি দিন
এখনই গুগল ওয়ার্কস্পেস মার্কেটপ্লেস এসডিকে-এর অ্যাপ কনফিগারেশন পেজের 'Allowed Attachment URI Prefixes' ফিল্ডে যেকোনো উপযুক্ত ঠিকানা যোগ করার ভালো সময়। আপনার অ্যাড-অনটি শুধুমাত্র এই পেজে তালিকাভুক্ত URI প্রিফিক্সগুলোর যেকোনো একটি থেকে অ্যাটাচমেন্ট তৈরি করতে পারবে। এটি একটি নিরাপত্তা ব্যবস্থা যা ম্যান-ইন-দ্য-মিডল অ্যাটাকের সম্ভাবনা কমাতে সাহায্য করে।
সবচেয়ে সহজ উপায় হলো এই ফিল্ডে আপনার টপ-লেভেল ডোমেইন দেওয়া, যেমন https://example.com । যদি আপনি আপনার লোকাল মেশিনকে ওয়েব সার্ভার হিসেবে ব্যবহার করেন, তাহলে https://localhost:<your port number>/ কাজ করবে।
শিক্ষক এবং শিক্ষার্থীর ভিউয়ের জন্য রুট যোগ করুন
চারটি আইফ্রেম আছে যেগুলোতে একটি গুগল ক্লাসরুম অ্যাড-অন লোড হতে পারে। আপনি এখন পর্যন্ত শুধুমাত্র অ্যাটাচমেন্ট ডিসকভারি ভিউ আইফ্রেমের জন্য রাউট তৈরি করেছেন। এরপর, টিচার এবং স্টুডেন্ট ভিউ আইফ্রেমগুলোর জন্যও রাউট যোগ করুন।
শিক্ষার্থীর অভিজ্ঞতার একটি প্রিভিউ দেখানোর জন্য টিচার ভিউ আইফ্রেমটি আবশ্যক, তবে এতে ঐচ্ছিকভাবে অতিরিক্ত তথ্য বা সম্পাদনার বৈশিষ্ট্য অন্তর্ভুক্ত করা যেতে পারে।
স্টুডেন্ট ভিউ হলো সেই পৃষ্ঠা যা প্রত্যেক শিক্ষার্থীর সামনে প্রদর্শিত হয় যখন তারা কোনো অ্যাড-অন অ্যাটাচমেন্ট খোলে।
এই অনুশীলনের উদ্দেশ্যে, একটিমাত্র /load-content-attachment রাউট তৈরি করুন যা শিক্ষক এবং শিক্ষার্থী উভয় ভিউ-কেই পরিবেশন করবে। পেজ লোড হওয়ার সময় ব্যবহারকারী শিক্ষক না শিক্ষার্থী, তা নির্ধারণ করতে Classroom API মেথড ব্যবহার করুন।
পাইথন
আমাদের দেওয়া উদাহরণে, এটি webapp/attachment_routes.py ফাইলে রয়েছে।
@app.route("/load-content-attachment")
def load_content_attachment():
"""
Load the attachment for the user's role."""
# Since this is a landing page for the Teacher and Student View iframes, we
# need to preserve the incoming query parameters.
if flask.request.args.get("itemId"):
flask.session["itemId"] = flask.request.args.get("itemId")
if flask.request.args.get("itemType"):
flask.session["itemType"] = flask.request.args.get("itemType")
if flask.request.args.get("courseId"):
flask.session["courseId"] = flask.request.args.get("courseId")
if flask.request.args.get("attachmentId"):
flask.session["attachmentId"] = flask.request.args.get("attachmentId")
মনে রাখবেন যে এই পর্যায়ে আপনাকে ব্যবহারকারীকে প্রমাণীকরণও করতে হবে। এখানে আপনাকে login_hint কোয়েরি প্যারামিটারটিও পরিচালনা করতে হবে এবং প্রয়োজনে ব্যবহারকারীকে আপনার অনুমোদন ফ্লো-তে পাঠাতে হবে। এই ফ্লো সম্পর্কে আরও তথ্যের জন্য পূর্ববর্তী ওয়াকথ্রুগুলোতে আলোচিত লগইন নির্দেশিকার বিবরণ দেখুন।
এরপর getAddOnContext এন্ডপয়েন্টে আইটেমের ধরনের সাথে মেলে এমন একটি অনুরোধ পাঠান।
পাইথন
আমাদের দেওয়া উদাহরণে, এটি load_content_attachment মেথডের একটি ধারাবাহিকতা।
# Create an instance of the Classroom service.
classroom_service = googleapiclient.discovery.build(
serviceName="classroom"
version="v1",
credentials=credentials)
# Use the itemType to determine which stream item type the teacher created
match flask.session["itemType"]:
case "announcements":
parent = classroom_service.courses().announcements()
case "courseWorkMaterials":
parent = classroom_service.courses().courseWorkMaterials()
case _:
parent = classroom_service.courses().courseWork()
addon_context_response = parent.getAddOnContext(
courseId=flask.session["courseId"],
itemId=flask.session["itemId"]).execute()
এই মেথডটি ক্লাসে বর্তমান ব্যবহারকারীর ভূমিকা সম্পর্কে তথ্য প্রদান করে। ব্যবহারকারীর ভূমিকার উপর নির্ভর করে তার সামনে প্রদর্শিত দৃশ্যটি পরিবর্তন করুন। রেসপন্স অবজেক্টের studentContext অথবা teacherContext ফিল্ডগুলোর মধ্যে ঠিক একটিতে ডেটা পূরণ করা হয়। ব্যবহারকারীকে কীভাবে সম্বোধন করতে হবে তা নির্ধারণ করতে এগুলো পরীক্ষা করুন।
যাই হোক, আমাদের ডাটাবেস থেকে কোন অ্যাটাচমেন্টটি আনতে হবে তা জানতে attachmentId কোয়েরি প্যারামিটারের মানটি ব্যবহার করুন। টিচার বা স্টুডেন্ট ভিউ ইউআরআই খোলার সময় এই কোয়েরি প্যারামিটারটি প্রদান করা হয়।
পাইথন
আমাদের দেওয়া উদাহরণে, এটি load_content_attachment মেথডের একটি ধারাবাহিকতা।
# Determine which view we are in by testing the returned context type.
user_context = "student" if addon_context_response.get(
"studentContext") else "teacher"
# Look up the attachment in the database.
attachment = Attachment.query.get(flask.session["attachmentId"])
# Set the text for the next page depending on the user's role.
message_str = f"I see that you're a {user_context}! "
message_str += (
f"I've loaded the attachment with ID {attachment.attachment_id}. "
if user_context == "teacher" else
"Please enjoy this image of a famous landmark!")
# Show the content with the customized message text.
return flask.render_template(
"show-content-attachment.html",
message=message_str,
image_filename=attachment.image_filename,
image_caption=attachment.image_caption,
responses=response_strings)
অ্যাড-অনটি পরীক্ষা করুন
অ্যাটাচমেন্ট তৈরি পরীক্ষা করতে নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:
- আপনার পরীক্ষামূলক শিক্ষক ব্যবহারকারীদের একজন হিসেবে [গুগল ক্লাসরুম]-এ সাইন ইন করুন।
- ক্লাসওয়ার্ক ট্যাবে যান এবং একটি নতুন অ্যাসাইনমেন্ট তৈরি করুন।
- টেক্সট এরিয়ার নিচে থাকা অ্যাড-অনস বাটনে ক্লিক করুন, তারপর আপনার অ্যাড-অনটি বেছে নিন। আইফ্রেমটি খুলে যাবে এবং অ্যাড-অনটি সেই অ্যাটাচমেন্ট সেটআপ ইউআরআই (Attachment Setup URI) লোড করবে যা আপনি গুগল ওয়ার্কস্পেস মার্কেটপ্লেস এসডিকে-এর অ্যাপ কনফিগারেশন পেজে নির্দিষ্ট করে দিয়েছিলেন।
- অ্যাসাইনমেন্টের সাথে সংযুক্ত করার জন্য একটি বিষয়বস্তু নির্বাচন করুন।
- অ্যাটাচমেন্ট তৈরির প্রক্রিয়াটি সম্পন্ন হলে আইফ্রেমটি বন্ধ করুন।
গুগল ক্লাসরুমের অ্যাসাইনমেন্ট তৈরির UI-তে আপনি একটি অ্যাটাচমেন্ট কার্ড দেখতে পাবেন। টিচার ভিউ আইফ্রেমটি খুলতে কার্ডটিতে ক্লিক করুন এবং সঠিক অ্যাটাচমেন্টটি দেখা যাচ্ছে কিনা তা নিশ্চিত করুন। অ্যাসাইন বোতামে ক্লিক করুন।
শিক্ষার্থীর অভিজ্ঞতা যাচাই করতে নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- এরপর, শিক্ষক পরীক্ষার্থীর ক্লাসেরই একজন শিক্ষার্থী পরীক্ষার্থী হিসেবে ক্লাসরুমে সাইন ইন করুন।
- ক্লাসওয়ার্ক ট্যাবে পরীক্ষার অ্যাসাইনমেন্টটি খুঁজুন।
- অ্যাসাইনমেন্টটি প্রসারিত করুন এবং স্টুডেন্ট ভিউ আইফ্রেমটি খোলার জন্য অ্যাটাচমেন্ট কার্ডটিতে ক্লিক করুন।
নিশ্চিত করুন যে শিক্ষার্থীর জন্য সঠিক সংযুক্তিটি প্রদর্শিত হচ্ছে।
অভিনন্দন! আপনি এখন পরবর্তী ধাপে যাওয়ার জন্য প্রস্তুত: অ্যাক্টিভিটি-টাইপ অ্যাটাচমেন্ট তৈরি করা ।