अटैचमेंट ग्रेड और ग्रेड पासबैक

Classroom ऐड-ऑन के बारे में सिलसिलेवार तरीके से निर्देश देने वाला यह छठा चरण है सिलसिलेवार तरीके से निर्देश देने वाली सीरीज़ देखें.

सिलसिलेवार तरीके से दिए गए इस निर्देश में, सिलसिलेवार तरीके से दिए गए पिछले चरण में दिए गए उदाहरण में बदलाव किया गया है ग्रेड किया गया गतिविधि-टाइप वाला अटैचमेंट बनाने के लिए. आपने एक ग्रेड बैक भी पास कर लिया है को Google Classroom में प्रोग्राम के हिसाब से, प्रोग्राम के ज़रिए ऐक्सेस किया जा सकता है. यह प्रोजेक्ट, शिक्षक के ग्रेड में दिखता है को ड्राफ़्ट ग्रेड के तौर पर बुक करना होगा.

सिलसिलेवार तरीके से निर्देश देने वाली यह सीरीज़, सीरीज़ के दूसरे क्रिएटर्स से कुछ अलग है उन दो संभावित तरीकों के बारे में बताता है जो ग्रेड वापस पास करने के लिए ज़रूरी हैं क्लासरूम. डेवलपर और उपयोगकर्ता पर, दोनों का अलग-अलग असर होता है अनुभव; Classroom ऐड-ऑन डिज़ाइन करते समय, इन दोनों का इस्तेमाल करें. इनके बारे में ज़्यादा जानने के लिए, अटैचमेंट इस्तेमाल करने से जुड़े गाइड वाले पेज पर जाएं लागू करने के विकल्प.

ध्यान दें कि एपीआई में ग्रेडिंग की सुविधाएं ज़रूरी नहीं हैं. इनका इस्तेमाल इनके साथ किया जा सकता है किसी भी गतिविधि-टाइप का अटैचमेंट.

सिलसिलेवार तरीके से निर्देशों का पालन करते हुए, आपने ये काम किए हैं:

  • अटैचमेंट बनाने के पिछले अनुरोधों को Classroom API का इस्तेमाल करके, अटैचमेंट के ग्रेड डिनॉमिनेटर को भी सेट किया जा सकता है.
  • प्रोग्राम के हिसाब से, छात्र-छात्राओं के सबमिट किए गए असाइनमेंट को स्कोर करें और अटैचमेंट सेट करें ग्रेड न्यूमरेटर.
  • सबमिशन के ग्रेड को पास करने के लिए दो तरीके लागू करना Classroom में, शिक्षक के साइन-इन किए गए क्रेडेंशियल या ऑफ़लाइन क्रेडेंशियल इस्तेमाल किए गए हों.

एक बार खत्म हो जाने के बाद ग्रेड, Classroom की ग्रेडबुक में पासबैक व्यवहार ट्रिगर होता है. वीडियो किस समय दिखेगा, यह इस बात पर निर्भर करता है कि लागू करने का तरीका.

इस उदाहरण के लिए, पिछली गतिविधि का फिर से इस्तेमाल करें सिलसिलेवार तरीके से निर्देश दें. इसमें किसी छात्र को किसी मशहूर लैंडमार्क की इमेज दिखाई जाती है और नाम डालने के लिए कहा जाएगा. अगर छात्र/छात्रा ने अटैचमेंट के लिए पूरे अंक असाइन किए हैं, तो सही नाम डालें, नहीं तो शून्य डालें.

Classroom ऐड-ऑन एपीआई की ग्रेडिंग सुविधा के बारे में जानना

आपका ऐड-ऑन, अटैचमेंट. इन्हें pointsEarned और maxPoints का इस्तेमाल करके सेट किया जाता है एपीआई में मौजूद वैल्यू. Classroom के यूज़र इंटरफ़ेस (यूआई) में अटैचमेंट कार्ड दिख रहा है maxPoints वैल्यू को सेट करने के बाद.

एक पेज पर maxPoints वाले कई अटैचमेंट का उदाहरण
असाइनमेंट

पहला डायग्राम. इस यूज़र इंटरफ़ेस में, तीन ऐड-ऑन अटैचमेंट कार्ड के साथ असाइनमेंट बनाने की सुविधा मिलती है. maxPoints सेट है.

Classroom ऐड-ऑन एपीआई की मदद से, सेटिंग को कॉन्फ़िगर और अटैचमेंट वाले ग्रेड के लिए मिला स्कोर. ये सुझाव, अलग-अलग असाइनमेंट ग्रेड. हालांकि, असाइनमेंट ग्रेड की सेटिंग इन निर्देशों का पालन करती हैं: ऐसे अटैचमेंट की ग्रेड सेटिंग जिसमें ग्रेड सिंक लेबल है उसका अटैचमेंट कार्ड है. जब "ग्रेड सिंक" हो अटैचमेंट pointsEarned को छात्र-छात्रा के रूप में सबमिट किया जाता है, तो यह असाइनमेंट के लिए छात्र का अधूरे ग्रेड भी सेट करता है.

आम तौर पर, असाइनमेंट में जोड़ा गया पहला अटैचमेंट maxPoints को "ग्रेड सिंक" मिलता है लेबल. असाइनमेंट बनाने का यूज़र इंटरफ़ेस (यूआई) देखें "ग्रेड सिंक" के उदाहरण के लिए, पहली इमेज में दिखाया गया उदाहरण लेबल. ध्यान दें कि "अटैचमेंट 1" कार्ड में "ग्रेड सिंक" है लेबल और असाइनमेंट ग्रेड में 50 पॉइंट कर दिए हैं. यह भी ध्यान रखें कि भले ही इमेज 1 तीन अटैचमेंट कार्ड दिखाता है, सिर्फ़ एक कार्ड में "ग्रेड सिंक" होता है लेबल. यह है मौजूदा लागू करने की एक मुख्य सीमा: सिर्फ़ एक अटैचमेंट में "ग्रेड सिंक" लेबल बनाएं.

अगर ऐसे कई अटैचमेंट हैं जिन्होंने maxPoints को सेट किया है, तो उन्हें हटाने के लिए "ग्रेड सिंक" वाला अटैचमेंट "ग्रेड सिंक" को चालू नहीं करता किसी भी चीज़ के लिए शेष अटैचमेंट. एक और अटैचमेंट जोड़ने से, जो maxPoints को चालू करता है ग्रेड सिंक करने की सुविधा जोड़ी गई है. साथ ही, असाइनमेंट के लिए ग्रेड को ज़्यादा से ज़्यादा इतना बढ़ाया जा सकता है मिलान. प्रोग्राम के रूप में यह देखने का कोई तरीका नहीं है कि किस अटैचमेंट में "ग्रेड सिंक" लेबल नहीं कर सकते. साथ ही, यह भी देख सकते हैं कि किसी असाइनमेंट में कितने अटैचमेंट हैं.

अटैचमेंट के लिए ज़्यादा से ज़्यादा ग्रेड सेट करें

इस सेक्शन में, अटैचमेंट ग्रेड के लिए डिनोमिनेटर सेट करने के बारे में बताया गया है; वह वह अधिकतम संभावित स्कोर है, जिसे सभी छात्र अपने सबमिशन. ऐसा करने के लिए, अटैचमेंट की maxPoints वैल्यू सेट करें.

चालू करने के लिए, हमारे मौजूदा लागू करने के तरीके में सिर्फ़ मामूली बदलाव करना ज़रूरी है ग्रेडिंग की सुविधाएं इस्तेमाल की जा सकती हैं. अटैचमेंट बनाते समय maxPoints वैल्यू को वही AddOnAttachment ऑब्जेक्ट जिसमें studentWorkReviewUri, teacherViewUri और अन्य अटैचमेंट फ़ील्ड शामिल हैं.

ध्यान दें कि किसी नए असाइनमेंट का डिफ़ॉल्ट स्कोर 100 हो सकता है. हमारा सुझाव है maxPoints को 100 के अलावा किसी दूसरी वैल्यू पर सेट किया जा रहा है, ताकि आप पुष्टि कर सकें कि ग्रेड सही तरीके से सेट किए जा रहे हैं. उदाहरण के तौर पर, maxPoints को 50 पर सेट करें:

Python

attachment ऑब्जेक्ट बनाते समय maxPoints फ़ील्ड जोड़ें को CREATE अनुरोध जारी करने से पहले courses.courseWork.addOnAttachments एंडपॉइंट. आप इसे यहां खोज सकते हैं: 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.
    "studentWorkReviewUri": {
        "uri":
            flask.url_for(
                "view_submission", _scheme='https', _external=True)
    },
    # Sets the maximum points that a student can earn for this activity.
    # This is the denominator in a fractional representation of a grade.
    "maxPoints": 50,
    # The title of the attachment.
    "title": f"Attachment {attachment_count}",
}

इस तरीके को दिखाने के लिए, maxPoints वैल्यू को यहां भी सेव किया जाता है आपका लोकल अटैचमेंट डेटाबेस; इससे अतिरिक्त API कॉल करने की ज़रूरत पड़ती है बाद में, छात्र-छात्राओं के सबमिट किए गए असाइनमेंट को ग्रेड करें. हालांकि, ध्यान रखें कि ऐसा हो सकता है कि शिक्षक, ऐड-ऑन के अलावा, असाइनमेंट ग्रेड की सेटिंग में बदलाव करते हैं. भेजें courses.courseWork एंडपॉइंट पर GET का अनुरोध भेजा जाएगा, ताकि असाइनमेंट-लेवल maxPoints मान. ऐसा करते समय, itemId को CourseWork.id फ़ील्ड.

अब अपने डेटाबेस मॉडल को अपडेट करें, ताकि अटैचमेंट की maxPoints वैल्यू को भी होल्ड किया जा सके. हमारा सुझाव है कि आप CREATE रिस्पॉन्स से maxPoints वैल्यू का इस्तेमाल करें:

Python

सबसे पहले, Attachment टेबल में max_points फ़ील्ड जोड़ें. आप इसका इस्तेमाल कर सकते हैं webapp/models.py फ़ाइल में, अगर हमारे दिए गए उदाहरण का पालन किया जा रहा है.

# Database model to represent an attachment.
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))

    # The maximum number of points for this activity.
    max_points = db.Column(db.Integer)

courses.courseWork.addOnAttachments CREATE के अनुरोध पर वापस जाएं. स्टोर रिस्पॉन्स में maxPoints वैल्यू मिली.

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,
    # Store the maxPoints value returned in the response.
    max_points=int(resp.get("maxPoints")))
db.session.add(new_attachment)
db.session.commit()

अटैचमेंट को ग्रेड देने की तय सीमा पूरी हो गई है. आपके पास इस व्यवहार की जांच करने का विकल्प होना चाहिए अब; नए असाइनमेंट में एक अटैचमेंट जोड़ें और देखें कि अटैचमेंट कार्ड "ग्रेड सिंक" दिखाता है लेबल और असाइनमेंट के "पॉइंट" मान में बदलाव.

Classroom में छात्र/छात्रा के सबमिट किए गए असाइनमेंट के लिए ग्रेड सेट करना

इस सेक्शन में अटैचमेंट ग्रेड के लिए अंश सेट करने के बारे में बताया गया है; मतलब, अटैचमेंट के लिए छात्र/छात्रा का स्कोर. ऐसा करने के लिए, किसी छात्र/छात्रा को सेट करें सबमिशन की pointsEarned वैल्यू.

अब आपको यह तय करना है कि आपके ऐड-ऑन को pointsEarned को सेट करने का अनुरोध करना चाहते हैं?

समस्या यह है कि pointsEarned को सेट करने के लिए, teacher OAuth स्कोप की ज़रूरत होती है. छात्र-छात्राओं के उपयोगकर्ताओं को teacher का दायरा नहीं देना चाहिए; इसका नतीजा यह हो सकता है कि जब छात्र-छात्राएं आपके ऐड-ऑन के साथ इंटरैक्ट करते हैं, जैसे कि छात्र/छात्रा व्यू iframe के बजाय शिक्षक व्यू iframe. इसलिए, अगर आपने pointsEarned को सेट करने के विकल्प:

  • लॉग इन किए हुए शिक्षक के क्रेडेंशियल का इस्तेमाल करके.
  • शिक्षक के सेव किए गए (ऑफ़लाइन) क्रेडेंशियल का इस्तेमाल करके.

नीचे दिए गए सेक्शन में, हर लागू करने के बारे में जानकारी देता है. ध्यान दें कि हमारे उदाहरणों से पता चलता है कि Classroom में ग्रेड पास करने के लिए, दोनों तरीके; देखें भाषा के हिसाब से नीचे दिए गए निर्देश देखें. इससे आपको पता चलेगा कि दिए गए उदाहरणों को चलाकर देखें:

Python

सबसे ऊपर, SET_GRADE_WITH_LOGGED_IN_USER_CREDENTIALS वाला एलान देखें कुल webapp/attachment_routes.py फ़ाइल. वापस पास करने के लिए, इस वैल्यू को True पर सेट करें ग्रेड देने के लिए इस्तेमाल किया जाता है. इस वैल्यू को False पर सेट करें सेव किए गए क्रेडेंशियल का इस्तेमाल करके ग्रेड वापस पास करने के लिए, जब छात्र/छात्रा दस्तावेज़ सबमिट करता है गतिविधि.

साइन-इन किए हुए शिक्षक के क्रेडेंशियल का इस्तेमाल करके ग्रेड सेट करें

pointsEarned को सेट करने का अनुरोध करने के लिए, साइन इन किए हुए उपयोगकर्ता के क्रेडेंशियल का इस्तेमाल करें. यह काफ़ी आसान लग सकता है, क्योंकि यह बाकी बचे हुए तरीके से मेल खाता है अभी तक, और इसे समझने में कम मेहनत लगी है.

हालांकि, यह ध्यान रखें कि शिक्षक सिर्फ़ छात्र-छात्राओं की छात्र-छात्राओं के काम की समीक्षा वाले iframe में सबमिट किया गया दस्तावेज़. इसमें कुछ ज़रूरी चीज़ें होती हैं इसका मतलब है:

  • Classroom में तब तक कोई ग्रेड नहीं दिखता है, जब तक शिक्षक Classroom के यूज़र इंटरफ़ेस (यूआई) में कार्रवाई की जा सकती है.
  • सभी छात्र-छात्राओं की जानकारी अपने-आप भरने के लिए, शिक्षक को छात्र-छात्राओं के सबमिट किए गए हर असाइनमेंट की जानकारी खोलनी पड़ सकती है छात्र/छात्रा के ग्रेड.
  • Classroom को ग्रेड मिलने में कुछ समय लगेगा और Classroom के यूज़र इंटरफ़ेस (यूआई) पर यह दिखना बंद हो गया है. देरी हो रही है आम तौर पर, यह 5 से 10 सेकंड का होता है. हालांकि, कभी-कभी यह 30 सेकंड तक भी लंबा हो सकता है.

इन सभी बातों के आधार पर, हो सकता है कि शिक्षकों को एक क्लास के ग्रेड को पूरी तरह से पॉप्युलेट करने के लिए काफ़ी समय लेने वाला मैन्युअल काम.

इस तरीके को लागू करने के लिए, अपने मौजूदा छात्र/छात्रा के लिए एक अतिरिक्त एपीआई कॉल जोड़ें काम की समीक्षा के लिए रास्ता.

छात्र/छात्रा के असाइनमेंट और अटैचमेंट रिकॉर्ड फ़ेच करने के बाद, छात्र-छात्राओं को सबमिट किए गए असाइनमेंट और उनसे मिले ग्रेड को सेव करता है. AddOnAttachmentStudentSubmission ऑब्जेक्ट का pointsEarned फ़ील्ड. आख़िर में, इसके लिए PATCH अनुरोध जारी करें: courses.courseWork.addOnAttachments.studentSubmissions एंडपॉइंट अनुरोध के मुख्य भाग में AddOnAttachmentStudentSubmission इंस्टेंस. ध्यान दें कि हम को हमारे PATCH अनुरोध में, updateMask में pointsEarned के बारे में भी बताना होगा:

Python

# 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)

grade = 0

# See if the student response matches the stored name.
if student_submission.student_response.lower(
) == attachment.image_caption.lower():
    grade = attachment.max_points

# Create an instance of the Classroom service.
classroom_service = ch._credential_handler.get_classroom_service()

# Build an AddOnAttachmentStudentSubmission instance.
add_on_attachment_student_submission = {
    # Specifies the student's score for this attachment.
    "pointsEarned": grade,
}

# Issue a PATCH request to set the grade numerator for this attachment.
patch_grade_response = classroom_service.courses().courseWork(
).addOnAttachments().studentSubmissions().patch(
    courseId=flask.session["courseId"],
    itemId=flask.session["itemId"],
    attachmentId=flask.session["attachmentId"],
    submissionId=flask.session["submissionId"],
    # updateMask is a list of fields being modified.
    updateMask="pointsEarned",
    body=add_on_attachment_student_submission).execute()

ऑफ़लाइन शिक्षक के क्रेडेंशियल का इस्तेमाल करके ग्रेड सेट करें

ग्रेड सेट करने के दूसरे तरीके के लिए, सेव किए गए क्रेडेंशियल का इस्तेमाल करना ज़रूरी है अटैचमेंट बनाने वाले शिक्षक के लिए. इस तरीके से लागू करने के लिए ज़रूरी है कि क्रेडेंशियल बनाने के लिए, पहले से अनुमति पा चुके शिक्षक के रीफ़्रेश का और ऐक्सेस टोकन ऐक्सेस करें और फिर pointsEarned सेट करने के लिए इन क्रेडेंशियल का इस्तेमाल करें.

इस तरीके का एक बड़ा फ़ायदा यह है कि ग्रेड दिए बिना ही अपने-आप जानकारी भर जाती है Classroom के यूज़र इंटरफ़ेस (यूआई) में शिक्षक की कार्रवाई को रोकना. इसमें समस्याएं हल नहीं होती हैं ऊपर बताया गया है. इसका नतीजा यह होता है कि असली उपयोगकर्ताओं को ग्रेडिंग की प्रोसेस के बारे में पता चलता है आसान और असरदार बनाया जा सकता है. इसके अलावा, इस तरीके की मदद से, वह पल जिसके दौरान आपने ग्रेड पास किए. जैसे, जब छात्र-छात्राएं ऐक्टिविटी या एसिंक्रोनस रूप से किया जा सकता है.

इस तरीके को लागू करने के लिए, नीचे दिए गए टास्क पूरे करें:

  1. ऐक्सेस टोकन सेव करने के लिए, उपयोगकर्ता के डेटाबेस के रिकॉर्ड में बदलाव करें.
  2. टीचर आईडी को सेव करने के लिए, अटैचमेंट डेटाबेस के रिकॉर्ड में बदलाव करें.
  3. शिक्षक के क्रेडेंशियल फिर से पाएं और (वैकल्पिक रूप से) नया बनाएं Classroom सेवा का इंस्टेंस.
  4. सबमिशन का ग्रेड सेट करें.

यह दिखाने के लिए, छात्र/छात्रा जब यह पूरा कर लेते हैं, तब ग्रेड सेट करें गतिविधि; जब कोई छात्र/छात्रा, 'छात्र-छात्राओं की स्क्रीन का व्यू' में फ़ॉर्म सबमिट करता है रूट

ऐक्सेस टोकन सेव करने के लिए, उपयोगकर्ता के डेटाबेस के रिकॉर्ड में बदलाव करें

एपीआई कॉल करने के लिए दो यूनीक टोकन की ज़रूरत होती है, रीफ़्रेश टोकन और ऐक्सेस टोकन. अगर अब तक सिलसिलेवार तरीके से निर्देश देने वाली सीरीज़ फ़ॉलो की जा रही है, User टेबल स्कीमा में पहले से रीफ़्रेश टोकन सेव होना चाहिए. रीफ़्रेश सेव किया जा रहा है टोकन तब काफ़ी होता है, जब सिर्फ़ साइन-इन किए हुए उपयोगकर्ता के साथ एपीआई कॉल किया जाता है, जैसा कि पुष्टि करने की प्रक्रिया के तहत, आपको ऐक्सेस टोकन मिलता है.

हालांकि, अब आपको साइन-इन किए हुए उपयोगकर्ता के अलावा किसी और के तौर पर कॉल करने होंगे, इसका मतलब है कि पुष्टि करने की सुविधा उपलब्ध नहीं है. इसलिए, आपको रीफ़्रेश टोकन के बगल में मौजूद ऐक्सेस टोकन. अपना User टेबल स्कीमा अपडेट करें कोई ऐक्सेस टोकन शामिल करें:

Python

हमारे दिए गए उदाहरण में, यह webapp/models.py फ़ाइल में है.

# Database model to represent a user.
class User(db.Model):
    # The user's identifying information:
    id = db.Column(db.String(120), primary_key=True)
    display_name = db.Column(db.String(80))
    email = db.Column(db.String(120), unique=True)
    portrait_url = db.Column(db.Text())

    # The user's refresh token, which will be used to obtain an access token.
    # Note that refresh tokens will become invalid if:
    # - The refresh token has not been used for six months.
    # - The user revokes your app's access permissions.
    # - The user changes passwords.
    # - The user belongs to a Google Cloud organization
    #   that has session control policies in effect.
    refresh_token = db.Column(db.Text())

    # An access token for this user.
    access_token = db.Column(db.Text())

इसके बाद, User रिकॉर्ड बनाने या अपडेट करने वाले किसी भी कोड को अपडेट करें, ताकि यह ऐक्सेस टोकन:

Python

हमारे दिए गए उदाहरण में, यह webapp/credential_handler.py फ़ाइल में है.

def save_credentials_to_storage(self, credentials):
    # Issue a request for the user's profile details.
    user_info_service = googleapiclient.discovery.build(
        serviceName="oauth2", version="v2", credentials=credentials)
    user_info = user_info_service.userinfo().get().execute()
    flask.session["username"] = user_info.get("name")
    flask.session["login_hint"] = user_info.get("id")

    # See if we have any stored credentials for this user. If they have used
    # the add-on before, we should have received login_hint in the query
    # parameters.
    existing_user = self.get_credentials_from_storage(user_info.get("id"))

    # If we do have stored credentials, update the database.
    if existing_user:
        if user_info:
            existing_user.id = user_info.get("id")
            existing_user.display_name = user_info.get("name")
            existing_user.email = user_info.get("email")
            existing_user.portrait_url = user_info.get("picture")

        if credentials and credentials.refresh_token is not None:
            existing_user.refresh_token = credentials.refresh_token
            # Update the access token.
            existing_user.access_token = credentials.token

    # If not, this must be a new user, so add a new entry to the database.
    else:
        new_user = User(
            id=user_info.get("id"),
            display_name=user_info.get("name"),
            email=user_info.get("email"),
            portrait_url=user_info.get("picture"),
            refresh_token=credentials.refresh_token,
            # Store the access token as well.
            access_token=credentials.token)

        db.session.add(new_user)

    db.session.commit()

शिक्षक आईडी को सेव करने के लिए, अटैचमेंट डेटाबेस के रिकॉर्ड में बदलाव करें

किसी गतिविधि का ग्रेड सेट करने के लिए, pointsEarned को कॉल करें एक शिक्षक की पहचान की थी. इसे पूरा करने के कई तरीके हैं:

  • कोर्स आईडी में, शिक्षक के क्रेडेंशियल की लोकल मैपिंग सेव करें. हालांकि, ध्यान दें कि ज़रूरी नहीं है कि एक ही शिक्षक हमेशा किसी खास कोर्स से जुड़े.
  • Classroom API courses एंडपॉइंट को किए गए GET अनुरोधों से जुड़ी समस्या शिक्षकों की सूची में शामिल होना है. फिर, उपयोगकर्ताओं के रिकॉर्ड का पता लगाने के लिए, शिक्षक के क्रेडेंशियल मेल खाते हैं.
  • ऐड-ऑन अटैचमेंट बनाते समय, शिक्षक आईडी को अटैचमेंट डेटाबेस. इसके बाद, attachmentId, स्टूडेंट व्यू iframe में पास किया गया.

यह उदाहरण आखिरी विकल्प दिखाता है, क्योंकि जब आप ग्रेड सेट कर रहे होते हैं, छात्र-छात्राएं, गतिविधि से जुड़ा कोई अटैचमेंट पूरा करते हैं.

अपने डेटाबेस की Attachment टेबल में टीचर आईडी फ़ील्ड जोड़ें:

Python

हमारे दिए गए उदाहरण में, यह webapp/models.py फ़ाइल में है.

# Database model to represent an attachment.
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))

    # The maximum number of points for this activity.
    max_points = db.Column(db.Integer)

    # The ID of the teacher that created the attachment.
    teacher_id = db.Column(db.String(120))

इसके बाद, Attachment रिकॉर्ड बनाने या अपडेट करने वाले किसी भी कोड को अपडेट करें, ताकि क्रिएटर के आईडी को सेव करने के लिए:

Python

हमारे दिए गए उदाहरण में, यह create_attachments तरीके में है, जो webapp/attachment_routes.py फ़ाइल.

# Store the attachment 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,
    max_points=int(resp.get("maxPoints")),
    teacher_id=flask.session["login_hint"])
db.session.add(new_attachment)
db.session.commit()

शिक्षक के क्रेडेंशियल वापस पाएं

स्टूडेंट व्यू iframe दिखाने वाला रूट ढूंढें. स्टोर करने के तुरंत बाद अपने स्थानीय डेटाबेस में छात्र/छात्रा के जवाब से, शिक्षक के आपके लोकल स्टोरेज के क्रेडेंशियल. इसे सीधी प्रोसेस में होना चाहिए, क्योंकि तैयारी करनी होगी. आप इनका उपयोग करके एक नई Classroom सेवा का इंस्टेंस:

Python

हमारे दिए गए उदाहरण में, यह load_activity_attachment तरीके में है webapp/attachment_routes.py फ़ाइल.

# Create an instance of the Classroom service using the tokens for the
# teacher that created the attachment.

# We're assuming that there are already credentials in the session, which
# should be true given that we are adding this within the Student View
# route; we must have had valid credentials for the student to reach this
# point. The student credentials will be valid to construct a Classroom
# service for another user except for the tokens.
if not flask.session.get("credentials"):
    raise ValueError(
        "No credentials found in session for the requested user.")

# Make a copy of the student credentials so we don't modify the original.
teacher_credentials_dict = deepcopy(flask.session.get("credentials"))

# Retrieve the requested user's stored record.
teacher_record = User.query.get(attachment.teacher_id)

# Apply the user's tokens to the copied credentials.
teacher_credentials_dict["refresh_token"] = teacher_record.refresh_token
teacher_credentials_dict["token"] = teacher_record.access_token

# Construct a temporary credentials object.
teacher_credentials = google.oauth2.credentials.Credentials(
    **teacher_credentials_dict)

# Refresh the credentials if necessary; we don't know when this teacher last
# made a call.
if teacher_credentials.expired:
    teacher_credentials.refresh(Request())

# Request the Classroom service for the specified user.
teacher_classroom_service = googleapiclient.discovery.build(
    serviceName=CLASSROOM_API_SERVICE_NAME,
    version=CLASSROOM_API_VERSION,
    credentials=teacher_credentials)

सबमिशन का ग्रेड सेट करना

यहां से की जाने वाली प्रक्रिया साइन-इन किए हुए शिक्षक की प्रक्रिया के समान है क्रेडेंशियल. हालांकि, ध्यान रखें कि आपको शिक्षक को कॉल करना चाहिए पिछले चरण में हासिल किए गए क्रेडेंशियल:

Python

# Issue a PATCH request as the teacher to set the grade numerator for this
# attachment.
patch_grade_response = teacher_classroom_service.courses().courseWork(
).addOnAttachments().studentSubmissions().patch(
    courseId=flask.session["courseId"],
    itemId=flask.session["itemId"],
    attachmentId=flask.session["attachmentId"],
    submissionId=flask.session["submissionId"],
    # updateMask is a list of fields being modified.
    updateMask="pointsEarned",
    body=add_on_attachment_student_submission).execute()

ऐड-ऑन का परीक्षण करें

सिलसिलेवार तरीके से दिए गए पिछले चरणों की तरह ही, गतिविधि के टाइप के साथ असाइनमेंट बनाएं इस ईमेल में, शिक्षक के तौर पर अटैचमेंट शेयर करें. इसके बाद, छात्र/छात्रा के तौर पर जवाब सबमिट करें और छात्र-छात्राओं के काम की समीक्षा वाले iframe में सबमिट किया गया दस्तावेज़. आपको वह विकल्प दिखेगा लागू करने के आपके तरीके के आधार पर, ग्रेड अलग-अलग समय पर दिखते हैं:

  • अगर छात्र/छात्रा की गतिविधि को पूरा करने के बाद, आपने ग्रेड वापस पास करने का विकल्प चुना है, आपको यूज़र इंटरफ़ेस (यूआई) में अपना ड्राफ़्ट ग्रेड, छात्र-छात्रा के काम की समीक्षा का iframe. आप इसे छात्र/छात्रा सूची में तब भी देख सकते हैं, जब असाइनमेंट खोलें और "ग्रेड" छात्र-छात्रा के काम के बगल में मौजूद बॉक्स iframe की समीक्षा करें.
  • अगर शिक्षक, छात्र-छात्रा के असाइनमेंट को खोलने के बाद, वापस ग्रेड पास करने का विकल्प चुनता है समीक्षा iframe, ग्रेड "ग्रेड" में दिखना चाहिए इसके तुरंत बाद बॉक्स iframe लोड होता है. जैसा कि ऊपर बताया गया है, इसमें 30 सेकंड तक लग सकते हैं. इसके बाद, उस छात्र/छात्रा के लिए, ग्रेड देना होगा अन्य Classroom ग्रेडबुक व्यू.

पुष्टि करें कि छात्र/छात्रा का सही स्कोर दिख रहा है या नहीं.

बधाई हो! आप अगले चरण पर जाने के लिए तैयार हैं: अटैचमेंट बनाना Google Classroom के बाहर.