Allegati tipo di attività

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

In questa procedura dettagliata modificherai l'esempio del passaggio precedente per produrre un allegato di tipo attività. Si tratta di allegati che richiedono l'invio da parte dello studente, ad esempio una risposta scritta, un quiz o un altro elemento generato dallo studente.

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

  • Viene visualizzato il pulsante "Consegna" in alto a destra nell'iframe della visualizzazione studente.
  • Forniscono un identificatore univoco per il lavoro dello studente.
  • La scheda dell'allegato sarà visualizzata nell'interfaccia utente del classificatore di Classroom.
  • Possono impostare un voto per il compito a cui appartengono.

Vedi la procedura dettagliata successiva per una discussione sulla valutazione. Nel corso di questa procedura dettagliata, completi quanto segue:

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

Al termine, puoi creare allegati di tipo attività per i compiti tramite l'interfaccia utente di Google Classroom dopo aver eseguito l'accesso come insegnante. Gli studenti della classe 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 per tipo di contenuto 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.

Sebbene tutti gli allegati del componente aggiuntivo richiedano questi tre campi, la presenza o l'assenza di un studentWorkReviewUri determina se l'allegato è di tipo attività o di tipo di contenuto. Una richiesta CREATE con studentWorkReviewUri completato diventa un allegato di tipo attività, mentre una richiesta CREATE senza studentWorkReviewUri diventa un allegato di tipo di contenuti.

L'unica modifica da apportare a questa richiesta è compilare il campo studentWorkReviewUri. Aggiungi qui una route con il nome corretto; la implementerai in un passaggio successivo.

Python

Nell'esempio fornito, si trova nel metodo create_attachments nel 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}",
}

Aggiungi spazio di archiviazione permanente per gli allegati per tipo di contenuto

Registra la risposta dello studente alla nostra attività. Potrai cercarlo in un secondo momento, quando l'insegnante visualizza i contenuti inviati nell'iframe 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 elemento Submission di conseguenza contiene i seguenti attributi:

  • attachment_id: l'identificatore univoco di 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. Assegnato da Classroom e restituito nella risposta getAddOnContext nella visualizzazione 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 stai seguendo l'esempio fornito). Aggiungi quanto segue alla fine del 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 i percorsi di gestione degli allegati.

Modificare il percorso Visualizzazione studente

Poi, modifica il percorso precedente della visualizzazione dello studente per mostrare un modulo di piccole dimensioni e accettare l'input dello studente. Puoi riutilizzare la maggior parte del codice della procedura dettagliata precedente.

Individua il codice 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, si trova nel metodo load_activity_attachment nel 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 stati come se lo studente ha aperto o consegnato l'allegato. Ciò può essere utile se vuoi non consentire le modifiche a un compito consegnato o se vuoi fornire agli insegnanti informazioni sui progressi dei propri studenti:

Python

Nell'esempio fornito, questa è una continuazione del metodo load_activity_attachment riportato 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 dell'allegato dal nostro database e pubblica un modulo di input. Il modulo nell'esempio fornito è costituito da un campo di immissione stringa e da un pulsante Invia. Mostra l'immagine del punto di riferimento e chiedi allo studente di inserirne il nome. Quando viene fornita una risposta, registrala nel nostro database.

Python

Nell'esempio fornito, questa è una continuazione del metodo load_activity_attachment riportato 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, valuta la possibilità di disabilitare la funzione di invio e mostra invece la risposta corretta nella Visualizzazione insegnante.

Aggiungi una route per l'iframe Revisione del lavoro dello studente

Infine, aggiungi una route per pubblicare l'iframe Recensione 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 il lavoro inviato dallo studente nell'interfaccia utente di Classroom.

Ricevi il parametro di query submissionId quando Classroom apre l'iframe Revisione del lavoro dello studente. Utilizzalo per recuperare il lavoro dello studente dal 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 descritta in Verifica 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 uno degli studenti utenti di test dello stesso corso dell'utente di test insegnante.
  • Vai alla scheda Lavori del corso ed espandi il Compito del test.
  • Fai clic sulla scheda dell'allegato del componente aggiuntivo per aprire la visualizzazione studenti e inviare una risposta per l'attività.
  • Chiudi l'iframe al termine dell'attività. Se vuoi, fai clic sul pulsante Consegna.

Una volta completata l'attività, non dovresti notare alcuna modifica in Classroom. Ora verifica l'iframe della recensione del lavoro dello studente:

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

Verifica che per lo studente venga visualizzato il contenuto corretto.

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