هذه هي الجولةالخامسة في سلسلة جولاتنا الإرشادية حول إضافات Classroom.
في هذه الجولة الإرشادية، ستُعدّل المثال من خطوة الجولة الإرشادية السابقة لإنشاء مرفق من النوع "نشاط". هذه هي أي مرفقات تتطلّب إرسال الطالب لها، مثل رد مكتوب أو اختبار أو أي مستندات مهمة من إنشاء الطالب.
من المهم التمييز بين مرفقات نوع المحتوى ونوع النشاط. تختلف المرفقات من نوع النشاط عن المرفقات من نوع المحتوى على النحو التالي:
- يظهر زر "تسليم" في أعلى يسار إطار iframe لعرض الطالب.
- وتوفّر هذه الأرقام معرّفًا فريدًا لأعمال الطلاب.
- تظهر بطاقة المرفق في واجهة مستخدم "مصحّح الدرجات" في Classroom.
- ويمكنهم تحديد درجة للمهمة التي ينتمون إليها.
اطّلِع على الجولة الإرشادية التالية لمناقشة عملية وضع الدرجات. خلال هذه الجولة التفصيلية، ستكمل ما يلي:
- عدِّل طلبات إنشاء المرفقات السابقة المرسَلة إلى واجهة برمجة التطبيقات Classroom API لإنشاء مرفق من النوع نشاط.
- استخدام مساحة التخزين الدائمة لعمليات الإرسال التي يجريها الطلاب
- يمكنك تعديل مسار "عرض الطالب" السابق لقبول إدخالات الطلاب.
- قدِّم مسارًا لعرض الإطار iframe الخاص بميزة "مراجعة أعمال الطلاب".
بعد الانتهاء، يمكنك إنشاء مرفقات من النوع "نشاط" في المهام من خلال واجهة مستخدم Google Classroom عند تسجيل الدخول كمعلّم. يمكن للطلاب في الصف أيضًا إكمال النشاط في إطار iframe وإرسال ردّ. يمكن للمعلم عرض تسليم الطالب في واجهة المستخدم لوضع الدرجات في Classroom.
لأغراض هذا المثال، يمكنك إعادة استخدام نموذج المرفق من الخطوة السابقة التي تعرض صورة لمعلم شهير وتعليقًا توضيحيًا يتضمن اسم المعلم. يتألف النشاط من مطالبة الطالب بتقديم اسم المَعلم.
تعديل طلب إنشاء المرفق
انتقِل إلى قسم الرمز الذي أنشأت فيه مرفقًا بنوع المحتوى
في الشرح السابق. العنصر الرئيسي هنا هو مثيل لمحاولة
AddOnAttachment، حيث حدّدنا سابقًا teacherViewUri
و
studentViewUri
وtitle
للمرفق.
على الرغم من أنّ جميع مرفقات الإضافات تتطلّب هذه الحقول الثلاثة، يحدّد توفُّر studentWorkReviewUri
أو عدم توفّرها ما إذا كان المرفق نوع نشاط أم نوع محتوى أم لا. يصبح طلب CREATE
الذي يحتوي على studentWorkReviewUri
مملوءًا مرفقًا من النوع "نشاط"، في حين يصبح طلب CREATE
بدون studentWorkReviewUri
مرفقًا من النوع "محتوى".
التعديل الوحيد الذي يجب إجراؤه على هذا الطلب هو تعبئة حقل
studentWorkReviewUri
. أضِف مسارًا يحمل اسمًا مناسبًا هنا، وسيكون عليك تنفيذه في خطوة لاحقة.
Python
في المثال الذي قدّمناه، يظهر ذلك في طريقة create_attachments
في ملف
webapp/attachment_routes.py
.
attachment = {
# Specifies the route for a teacher user.
"teacherViewUri": {
"uri":
flask.url_for(
"load_activity_attachment",
_scheme='https',
_external=True),
},
# Specifies the route for a student user.
"studentViewUri": {
"uri":
flask.url_for(
"load_activity_attachment",
_scheme='https',
_external=True)
},
# Specifies the route for a teacher user when the attachment is
# loaded in the Classroom grading view.
# The presence of this field marks this as an activity-type attachment.
"studentWorkReviewUri": {
"uri":
flask.url_for(
"view_submission", _scheme='https', _external=True)
},
# The title of the attachment.
"title": f"Attachment {attachment_count}",
}
إضافة مساحة تخزين دائمة للمرفقات من نوع المحتوى
سجِّل ردّ فعل الطالب على نشاطنا. يمكنك البحث عنه لاحقًا عندما يعرض المعلّم العمل الذي تم إرساله في إطار iframe الخاص بمراجعة عمل الطالب.
إعداد مخطّط قاعدة بيانات Submission
في المثال المقدَّم، على
الطلاب إدخال اسم المَعلم المعروض في الصورة. وبالتالي، يحتوي Submission
على السمات التالية:
attachment_id
: معرّف فريد لمرفق تم تعيينها من خلال Classroom وتم عرضها في الرد عند إنشاء مرفق.submission_id
: معرّف لإرسال طالب تم تعيينها من قِبل Classroom وتم إرجاعها فيgetAddOnContext
الاستجابة في عرض "الطالب".
student_response
: الإجابة التي قدّمها الطالب.
Python
توسيع نطاق تنفيذ SQLite وflask_sqlalchemy
من الخطوات السابقة
انتقل إلى الملف الذي حددت فيه الجداول السابقة (models.py
إذا كنت تتابع المثال المقدم). أضِف ما يلي في
أسفل الملف.
# Database model to represent a student submission.
class Submission(db.Model):
# The attachmentId is the unique identifier for the attachment.
submission_id = db.Column(db.String(120), primary_key=True)
# The unique identifier for the student's submission.
attachment_id = db.Column(db.String(120), primary_key=True)
# The student's response to the question prompt.
student_response = db.Column(db.String(120))
استورِد فئة Submission
الجديدة إلى ملف الخادم مع مسارات معالجة المرفقات.
تعديل مسار "عرض المحتوى كطالب"
بعد ذلك، عدِّل مسار "عرض الطالب" السابق لعرض نموذج صغير وقبول مدخلات من الطالب. يمكنك إعادة استخدام معظم التعليمات البرمجية من الجولة التفصيلية السابقة.
حدد موقع رمز الخادم الذي يوفر المسار لعرض الطالب. وهذا هو
المسار المحدد في الحقل studentViewUri
عند إنشاء مرفق.
أول تغيير يجب إجراؤه هو استخراج submissionId
من استجابة getAddOnContext
.
Python
في المثال الذي قدّمناه، يمكنك العثور على هذا الإجراء في load_activity_attachment
في
ملف webapp/attachment_routes.py
.
# Issue a request to the courseWork.getAddOnContext endpoint
addon_context_response = classroom_service.courses().courseWork(
).getAddOnContext(
courseId=flask.session["courseId"],
itemId=flask.session["itemId"]).execute()
# One of studentContext or teacherContext will be populated.
user_context = "student" if addon_context_response.get(
"studentContext") else "teacher"
# If the user is a student...
if user_context == "student":
# Extract the submissionId from the studentContext object.
# This value is provided by Google Classroom.
flask.session["submissionId"] = addon_context_response.get(
"studentContext").get("submissionId")
يمكنك أيضًا تقديم طلب للحصول على حالة إرسال الطالب.
يحتوي الردّ على قيمة SubmissionState
، والتي تشير إلى حالات مثل
ما إذا كان الطالب قد فتح المرفق أو أرسله. قد يكون هذا الإجراء مفيداً
إذا كنت تريد عدم السماح بإجراء تعديلات على عمل تم إرساله، أو إذا كنت
مهتمًا بتزويد المعلّمين بإحصاءات عن مستوى تقدّم طلابهم:
Python
في المثال المقدَّم، هذا هو استمرار لطريقة
load_activity_attachment
أعلاه.
# Issue a request to get the status of the student submission.
submission_response = classroom_service.courses().courseWork(
).addOnAttachments().studentSubmissions().get(
courseId=flask.session["courseId"],
itemId=flask.session["itemId"],
attachmentId=flask.session["attachmentId"],
submissionId=flask.session["submissionId"]).execute()
أخيرًا، نحصل على معلومات المرفق من قاعدة بياناتنا ونعرض نموذج إدخال. يتألّف النموذج في المثال المقدَّم من حقل إدخال سلسلة وزر إرسال. اعرض صورة المَعلم واطلب من الطالب إدخال اسمه. بمجرد تقديم رد، قم بتسجيله في قاعدة البيانات الخاصة بنا.
Python
في المثال المقدَّم، هذا هو استمرار لطريقة
load_activity_attachment
أعلاه.
# Look up the attachment in the database.
attachment = Attachment.query.get(flask.session["attachmentId"])
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 complete the activity below.")
form = activity_form_builder()
if form.validate_on_submit():
# Record the student's response in our database.
# Check if the student has already submitted a response.
# If so, update the response stored in the database.
student_submission = Submission.query.get(flask.session["submissionId"])
if student_submission is not None:
student_submission.student_response = form.student_response.data
else:
# Store the student's response by the submission ID.
new_submission = Submission(
submission_id=flask.session["submissionId"],
attachment_id=flask.session["attachmentId"],
student_response=form.student_response.data)
db.session.add(new_submission)
db.session.commit()
return flask.render_template(
"acknowledge-submission.html",
message="Your response has been recorded. You can close the " \
"iframe now.",
instructions="Please Turn In your assignment if you have " \
"completed all tasks."
)
# Show the activity.
return flask.render_template(
"show-activity-attachment.html",
message=message_str,
image_filename=attachment.image_filename,
image_caption=attachment.image_caption,
user_context=user_context,
form=form,
responses=response_strings)
للتفريق بين المستخدمين، يمكنك إيقاف وظيفة الإرسال وعرض الإجابة الصحيحة في "طريقة عرض المعلّم" بدلاً من ذلك.
إضافة مسار لإطار iframe الخاص بميزة "مراجعة أعمال الطلاب"
أخيرًا، أضِف مسارًا لعرض الإطار المتداخل لمراجعة عمل الطالب. يجب أن يتطابق اسم
هذا المسار مع الاسم المقدَّم لـ studentWorkReviewUri
عند إنشاء
مرفق. يتم فتح هذا المسار عندما يطّلع المعلّم على المهمة التي أرسلها الطالب في
واجهة مستخدم "مصحّح الدرجات" في Classroom.
تتلقّى مَعلمة طلب البحث submissionId
عندما يفتح Classroom
إطار iframe الخاص بميزة "مراجعة أعمال الطلاب". استخدمه لاسترداد عمل الطالب من
قاعدة البيانات المحلية لديك:
Python
في المثال الذي قدّمناه، يمكنك العثور على هذا العنصر في ملف webapp/attachment_routes.py
.
@app.route("/view-submission")
def view_submission():
"""
Render a student submission using the show-student-submission.html template.
"""
# Save the query parameters passed to the iframe in the session, just as we did
# in previous routes. Abbreviated here for readability.
add_iframe_query_parameters_to_session(flask.request.args)
# For the sake of brevity in this example, we'll skip the conditional logic
# to see if we need to authorize the user as we have done in previous steps.
# We can assume that the user that reaches this route is a teacher that has
# already authorized and created an attachment using the add-on.
# In production, we recommend fully validating the user's authorization at
# this stage as well.
# Look up the student's submission in our database.
student_submission = Submission.query.get(flask.session["submissionId"])
# Look up the attachment in the database.
attachment = Attachment.query.get(student_submission.attachment_id)
# Render the student's response alongside the correct answer.
return flask.render_template(
"show-student-submission.html",
message=f"Loaded submission {student_submission.submission_id} for "\
f"attachment {attachment.attachment_id}.",
student_response=student_submission.student_response,
correct_answer=attachment.image_caption)
اختبار الإضافة
كرِّر خطوات اختبار الإضافة من الجولة الإرشادية السابقة. يجب أن يكون لديك مرفق يمكن للطالب فتحه.
أكمل الخطوات التالية لاختبار مرفق النشاط:
- سجِّل الدخول إلى Google Classroom بصفتك أحد مستخدمي الاختبار المخصّصين للطلاب في الصف نفسه الذي يتوفّر فيه حساب المستخدم التجريبي للمعلّم.
- انتقِل إلى علامة التبويب الواجب الدراسي ووسِّع مهمة الاختبار.
- انقر على بطاقة مرفق الإضافة لفتح "عرض الطالب" وإرسال ردّ على النشاط.
- أغلِق إطار iframe بعد إكمال النشاط. اختياريًا، انقر على الزر تفعيل.
من المفترض ألا يحدث أي تغيير في Classroom بعد إكمال النشاط. اختبِر الآن إطار iframe الخاص بميزة "مراجعة أعمال الطلاب":
- سجِّل الدخول إلى Classroom بصفتك المستخدم التجريبي المعلّم.
- ابحث عن عمود مهمة الاختبار في علامة التبويب الدرجات. انقر على اسم مهمة الاختبار.
- ابحث عن بطاقة المستخدم التجريبي للطالب. انقر على المرفق في البطاقة.
تأكَّد من ظهور العينة الصحيحة التي تم إرسالها للطالب.
تهانينا! يمكنك الآن الانتقال إلى الخطوة التالية: مزامنة مرفقات علامات الصف.