Allegati tipo di attività

Questa è la quinta procedura dettagliata della serie dettagliata dei componenti aggiuntivi di Classroom.

In questa procedura dettagliata, modificherai l'esempio nel passaggio precedente della procedura dettagliata per produrre un allegato di tipo attività. Si tratta di allegati che richiedono l'invio di un compito da parte dello studente, ad esempio una risposta scritta, un quiz o altri elementi generati dagli studenti.

La distinzione tra allegati di tipo contenuto e tipo di attività è importante. Gli allegati di tipo attività differiscono dal tipo di contenuti per i seguenti aspetti:

  • In alto a destra dell'iframe della vista studente viene visualizzato un pulsante "Consegna".
  • Forniscono un identificatore univoco per il lavoro degli studenti.
  • La scheda degli allegati viene visualizzata nell'interfaccia utente del valutatore di Classroom.
  • Possono impostare un voto per il compito a cui appartengono.

Consulta la prossima procedura dettagliata per una discussione sulla valutazione. Nel corso di questa procedura dettagliata, completerai quanto segue:

  • Modifica le precedenti richieste di creazione di allegati all'API Classroom per creare un allegato di tipo attività.
  • Implementa l'archiviazione permanente per i contenuti inviati dagli studenti.
  • Modifica il percorso precedente della Vista studente per accettare l'input degli studenti.
  • Fornisci un percorso per pubblicare l'iframe della revisione del lavoro dello studente.

Al termine, puoi creare allegati di tipo attività nei compiti tramite l'UI di Google Classroom dopo aver eseguito l'accesso come insegnante. Gli studenti del corso possono anche completare l'attività nell'iframe e inviare una risposta. L'insegnante può visualizzare i contenuti inviati dallo studente nell'interfaccia utente di valutazione di Classroom.

Ai fini di questo esempio, riutilizza il modello di allegato della procedura dettagliata precedente, che mostra l'immagine di un punto di riferimento famoso e una didascalia con il nome del punto di riferimento. L'attività consiste nel chiedere allo studente di fornire il nome del punto di riferimento.

Modifica la richiesta di creazione dell'allegato

Vai alla sezione del codice in cui hai creato un allegato content-type nella procedura dettagliata precedente. L'elemento chiave qui è un'istanza di un oggetto AddOnAttachment, in cui in precedenza abbiamo specificato teacherViewUri, studentViewUri e title per l'allegato.

Anche se tutti gli allegati dei componenti aggiuntivi richiedono questi tre campi, la presenza o l'assenza di un studentWorkReviewUri determina se l'allegato è di tipo activity-type o content-type. Una richiesta CREATE con studentWorkReviewUri compilato diventa un allegato di tipo attività, mentre una richiesta CREATE senza studentWorkReviewUri diventa un allegato di tipo contenuti.

L'unica modifica da apportare a questa richiesta è la compilazione del campo studentWorkReviewUri. Aggiungi qui un percorso con il nome corretto che verrà implementato in un passaggio successivo.

Python

Nell'esempio fornito, è nel metodo create_attachments del file 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}",
}

Aggiungere spazio di archiviazione permanente per gli allegati di tipo contenuto

Registra la risposta dello studente alla nostra attività. Puoi cercarlo in un secondo momento, quando l'insegnante visualizza il contenuto inviato nell'iframe della revisione del lavoro dello studente.

Configura uno schema di database per un Submission. Nell'esempio fornito, gli studenti devono inserire il nome del punto di riferimento mostrato in un'immagine. Un Submission contiene quindi i seguenti attributi:

  • attachment_id: un identificatore univoco per un allegato. Assegnato da Classroom e restituito nella risposta durante la creazione di un allegato.
  • submission_id: un identificatore dei contenuti inviati da uno studente. Assegnati da Classroom e restituiti nella risposta getAddOnContext nella Vista studente.
  • student_response: la risposta fornita dallo studente.

Python

Estendi l'implementazione di SQLite e flask_sqlalchemy dai passaggi precedenti.

Vai al file in cui hai definito le tabelle precedenti (models.py se segui l'esempio fornito). Aggiungi quanto segue in fondo al file.

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

Importa la nuova classe Submission nel file del server con le route di gestione degli allegati.

Modificare il percorso Vista studente

Quindi, modifica il percorso precedente della vista studente in modo da mostrare un modulo di dimensioni ridotte e accetta l'input dello studente. Puoi riutilizzare la maggior parte del codice della procedura dettagliata precedente.

Individua il codice del server che fornisce il percorso per la Vista studente. Questa è la route specificata nel campo studentViewUri durante la creazione di un collegamento. La prima modifica da apportare è estrarre submissionId dalla risposta getAddOnContext.

Python

Nell'esempio fornito, è nel metodo load_activity_attachment del file 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")

Potresti anche voler inviare una richiesta per ottenere lo stato di invio dello studente. La risposta contiene un valore SubmissionState, che indica, ad esempio, se lo studente ha aperto l'allegato o lo ha consegnato. Questa opzione può essere utile se vuoi non consentire le modifiche su un compito consegnato o se vuoi fornire informazioni per gli insegnanti sui progressi dei loro studenti:

Python

Nell'esempio fornito, questa è una continuazione del metodo load_activity_attachment sopra.

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

Infine, recupera le informazioni sugli allegati dal nostro database e fornisci un modulo di input. Il modulo nell'esempio fornito è costituito da un campo di immissione di stringa e un pulsante di invio. Mostra l'immagine del punto di riferimento e chiedi allo studente di inserirne il nome. Una volta ricevuta la risposta, registrala nel nostro database.

Python

Nell'esempio fornito, questa è una continuazione del metodo load_activity_attachment sopra.

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

Per distinguere gli utenti, puoi disattivare la funzione di invio e mostrare la risposta corretta nella vista insegnante.

Aggiungi un percorso per l'iframe della revisione del lavoro dello studente

Infine, aggiungi un percorso per pubblicare l'iframe della revisione del lavoro dello studente. Il nome di questa route deve corrispondere a quello fornito per studentWorkReviewUri durante la creazione di un collegamento. Questo percorso si apre quando l'insegnante visualizza i contenuti inviati dallo studente nell'interfaccia utente del valutatore di Classroom.

Ricevi il parametro di query submissionId quando Classroom apre l'iframe della revisione del lavoro dello studente. Usala per recuperare il lavoro dello studente dal tuo database locale:

Python

Nell'esempio fornito, si trova nel file 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)

Testa il componente aggiuntivo

Ripeti la procedura per testare i passaggi del componente aggiuntivo della procedura dettagliata precedente. Dovresti avere un allegato che può essere aperto dallo studente.

Completa i seguenti passaggi per testare l'allegato dell'attività:

  • Accedi a Google Classroom come utente di test dei tuoi studenti che appartengono allo stesso corso dell'utente di test dell'insegnante.
  • Vai alla scheda Lavori del corso ed espandi il Compito di prova.
  • Fai clic sulla scheda dell'allegato del componente aggiuntivo per aprire la Vista studente e inviare una risposta per l'attività.
  • Chiudi l'iframe dopo aver completato l'attività. Facoltativamente, fai clic sul pulsante Consegna.

Dopo aver completato l'attività, non dovresti vedere alcun cambiamento in Classroom. Ora verifica l'iframe della revisione del lavoro dello studente:

  • Accedi a Classroom come utente di test dell'insegnante.
  • Trova la colonna relativa al compito di prova nella scheda Voti. Fai clic sul nome del compito di prova.
  • Trova la scheda per l'utente studente di prova. Fai clic sull'allegato nella scheda.

Verifica che per lo studente vengano visualizzati i contenuti corretti.

Complimenti! Puoi procedere con il passaggio successivo: sincronizzazione dei voti degli allegati.