Etkinlik türü ekler

Bu, Classroom eklentilerindeki adım adım açıklamalı beşinci kılavuzdur. size yol gösterir.

Bu adım adım açıklamalı kılavuzda, önceki adım adım açıklamalı kılavuzda verilen örneği değiştireceksiniz. etkinlik türü eki oluşturmak için Bunlar, imzanızı içeren yazılı yanıt, test vb. gibi bir öğrencinin ödevini gerektirmesi ve öğrenciler tarafından oluşturulan eserler.

İçerik türü ile etkinlik türü ekler arasındaki fark önemlidir. Etkinlik türü ekler, şu yönleriyle içerik türünden farklıdır:

  • "Teslim Et" düğmesi görünür.
  • Öğrenci çalışmaları için benzersiz bir tanımlayıcı sağlar.
  • Kullanıcının ek kartı, Classroom'da not veren kullanıcının kullanıcı arayüzünde gösterilir.
  • Ait oldukları ödev için bir not verebilirler.

Not vermeyle ilgili tartışma için bir sonraki adım adım açıklamalı kılavuzu inceleyin. Bu süreçte, adım adım açıklamalı kılavuza başvurarak aşağıdaki adımları tamamlayabilirsiniz:

  • Önceki ek oluşturma isteklerini Etkinlik türü eki oluşturmak için Classroom API.
  • Öğrencilerin gönderimleri için kalıcı depolama alanı uygulayın.
  • Öğrenci girişini kabul etmek için önceki Öğrenci Görünümü rotasını değiştirin.
  • Öğrenci Çalışma İncelemesi iframe'ini sunmak için bir yol sağlayın.

Bitirdiğinizde ödevlerde etkinlik türü ekleri oluşturabilirsiniz: Öğretmen olarak giriş yapıldığında Google Classroom kullanıcı arayüzü. Sınıftaki öğrenciler şunları yapabilir: iframe'de etkinliği tamamlayıp bir yanıt da gönderebilirsiniz. Öğretmen Öğrencinin gönderimini Classroom not verme kullanıcı arayüzünde görüntüleyebilirsiniz.

Bu örneğin amacı doğrultusunda, ünlü bir önemli noktanın resmini ve bir açıklamanın gösterildiği önceki adım adım açıklamalı kılavuz yer işaretinin adını yazın. Etkinlik, öğrenciden bazı görevleri önemli noktanın adını sağlayın.

Ek oluşturma isteğini değiştirme

Kodunuzun, içerik türü oluşturduğunuz bölümüne gidin ekini okuyun. Buradaki temel öğe, Daha önce teacherViewUri özelliğini belirttiğimiz AddOnAttach nesnesi, studentViewUri ve ek için title.

Tüm eklenti ekleri bu üç alanı gerektirir ancak bir studentWorkReviewUri olmaması, ekin etkinlik türü veya içerik türü olabilir. Doldurulan bir CREATE isteği studentWorkReviewUri etkinlik türünde ek, CREATE ise etkinlik türünde bir ek haline gelir studentWorkReviewUri içermeyen istek, içerik türü eki haline gelir.

Bu istekte yapılacak tek değişiklik, studentWorkReviewUri alanı boş bırakılamaz. Buraya uygun şekilde adlandırılmış bir rota ekleyin; siz sonraki bir adımda uygulayabilirsiniz.

Python

Sağladığımız örneğimizde bu, create_attachments webapp/attachment_routes.py dosya

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}",
}

İçerik türü ekler için kalıcı depolama alanı ekleme

Öğrencinin etkinliğimize verdiği yanıtı kaydetme. Bunu daha sonra öğretmen, Öğrenci Çalışması İncelemesi iframe'inde gönderimi görüntüler.

Submission için veritabanı şeması oluşturun. Sağladığımız örneğimizde, öğrencilerinden resimdeki önemli noktanın adını girmelerini isteyin. Submission dolayısıyla şu özellikleri içerir:

  • attachment_id: Eklerin benzersiz tanımlayıcısıdır. Atayan: Classroom ve ekleyebilirsiniz.
  • submission_id: Öğrenci gönderimleri için tanımlayıcı. Atayan: Classroom'da yer alan ve şurada getAddOnContext yanıtıyla geri döndü: Öğrenci Görünümü.
  • student_response: Öğrencinin verdiği cevap.

Python

Önceki adımlardaki SQLite ve flask_sqlalchemy uygulamasını genişletin.

Önceki tabloları tanımladığınız dosyaya gidin (sağladığımız örneği takip ediyorsanız models.py). Aşağıdakileri şu adrese ekleyin: tıklayın.

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

Yeni Submission sınıfını ekinizle birlikte sunucu dosyasına aktarın göz atabilirsiniz.

Öğrenci Görünümü rotasını değiştirme

Sonra, önceki Öğrenci Görünümü rotasını küçük bir form gösterecek şekilde değiştirin ve kabul edin öğrenciden gelen bilgiler olabilir. Önceki kodun büyük bir kısmını yeniden kullanabilirsiniz adım adım açıklamalı kılavuzu inceleyin.

Öğrenci Görünümünüz için rotayı sağlayan sunucu kodunu bulun. Bu ek oluştururken studentViewUri alanında belirtilen rota. Yapılacak ilk değişiklik, submissionId öğesini getAddOnContext yanıt.

Python

Sağladığımız örneğimizde bu, load_activity_attachment yöntemindeki webapp/attachment_routes.py dosyası.

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

Öğrenci gönderim durumunu öğrenmek için de bir istekte bulunabilirsiniz. Yanıt, aşağıdaki durumları belirten bir SubmissionState değeri içeriyor: Örneğin, öğrencinin eki açıp açmadığı veya teslim ettiği. Bu, teslim edilmiş bir gönderimde düzenlemelere izin vermek istemiyorsanız veya ve öğretmenlerin, öğrencilerinin deneyimleri hakkında ilerleme durumu:

Python

Sağladığımız örneğimizde bu, load_activity_attachment yöntemini kullanın.

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

Son olarak, veritabanımızdan ek bilgilerini alın ve bir giriş yapın formunu doldurun. Sağladığımız örneğimizdeki form, bir dize giriş alanından ve gönder düğmesi. Önemli noktayı gösteren resmi gösterin ve öğrenciden adını girmesini isteyin. Sizden yanıt aldıktan sonra yanıtı veritabanımıza kaydedin.

Python

Sağladığımız örneğimizde bu, load_activity_attachment yöntemini kullanın.

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

Kullanıcıları birbirinden ayırt etmek için gönderme özelliğini devre dışı bırakabilirsiniz işlevi görebilir ve doğru yanıtı Öğretmen Görünümü'nde gösterebilirsiniz.

Öğrenci Çalışma İncelemesi iframe'i için rota ekleme

Son olarak, Öğrenci Çalışması İncelemesi iframe'ini sunmak için bir rota ekleyin. Bu cihazın adı rota, oluşturulurken studentWorkReviewUri için sağlanan rotayla eşleşmelidir ekleyebilirsiniz. Bu rota, öğretmen öğrencinin gönderimini şurada görüntülediğinde açılır: Classroom'da not veren kullanıcı arayüzü.

Classroom aşağıdaki durumlarda submissionId sorgu parametresini alırsınız: Öğrenci Çalışması İncelemesi iframe'ini açar. Bu dosyayı, öğrencinin çalışmasını şuradan almak için kullanabilirsiniz: yerel veritabanınız:

Python

Sağlanan örneğimizde bu, webapp/attachment_routes.py dosyasındadır.

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

Eklentiyi test etme

Önceki adım adım açıklamalı kılavuzda yer alan eklenti adımlarını test etme bölümünü tekrarlayın. Şunları yapmalısınız: Öğrenci tarafından açılabilecek bir ek bulunur.

Etkinlik ekini test etmek için aşağıdaki adımları uygulayın:

  • Google Classroom'da oturum açın. aşağıdakilerden biri olarak öğrenci test kullanıcılarını, öğretmen test kullanıcısıyla aynı sınıftaki test kullanıcılarını belirler.
  • Sınıf Çalışmaları sekmesine gidin ve test amaçlı Ödev'i genişletin.
  • Eklenti ek kartını tıklayarak Öğrenci Görünümü'nü açın ve bir yanıt verebileceğinizi unutmayın.
  • Etkinliği tamamladıktan sonra iframe'i kapatın. İsteğe bağlı olarak, İçinde düğmesi.

Tamamladıktan sonra Classroom'da herhangi bir değişiklik görmeyeceksiniz. etkinliği tıklayın. Şimdi Öğrenci Çalışması İnceleme iframe'ini test edin:

  • Classroom'da öğretmen test kullanıcısı olarak oturum açın.
  • Notlar sekmesinde test ödevinizin sütununu bulun. Önce test ödevinizin adını yazın.
  • Test öğrencisinin kartını bulun. Karttaki eki tıklayın.

Öğrenci için doğru gönderimin göründüğünü doğrulayın.

Tebrikler! Sonraki adıma geçmeye hazırsınız: Ek senkronize etme notları ekleyin.