Allegati tipo di attività

Questo è il quinto tutorial della serie di tutorial sui componenti aggiuntivi di Classroom.

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

È importante distinguere gli allegati di tipo di contenuto da quelli di tipo di attività. Gli allegati del tipo di attività differiscono da quelli del tipo di contenuti nei seguenti modi:

  • Un pulsante "Consegna" viene visualizzato in alto a destra nell'iframe della visualizzazione dello studente.
  • Forniscono un identificatore univoco per i lavori degli studenti.
  • La scheda dell'allegato viene visualizzata nell'interfaccia utente dello strumento di valutazione di Classroom.
  • Possono impostare un voto per il compito a cui appartengono.

Consulta la procedura dettagliata successiva per una discussione sulla valutazione. Nel corso di questa procedura dettagliata, dovrai completare quanto segue:

  • Modifica le richieste di creazione degli allegati precedenti 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 visualizzazione dello studente in modo da accettare l'input degli studenti.
  • Fornisci un percorso per pubblicare l'iframe di Revisione dei lavori degli studenti.

Al termine, puoi creare allegati di tipo attività nei compiti tramite l'interfaccia utente 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 un'immagine di un famoso punto di riferimento 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.

Modificare la richiesta di creazione dell'allegato

Vai alla sezione del codice in cui hai creato un allegato con tipo di contenuto nella procedura dettagliata precedente. L'elemento chiave qui è un'istanza di un oggetto AddOnAttachment, in cui abbiamo specificato in precedenza teacherViewUri, studentViewUri e title per il componente aggiuntivo.

Sebbene tutti gli allegati dei componenti aggiuntivi richiedano questi tre campi, la presenza o l'assenza di un studentWorkReviewUri determina se l'allegato è di tipo attività o di tipo contenuto. Una richiesta CREATE con un valore inserito per studentWorkReviewUri 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 è compilare il campo studentWorkReviewUri. Aggiungi qui un percorso denominato in modo appropriato. Lo implementerai in un passaggio successivo.

Python

Nel nostro esempio, questo valore si trova nel metodo create_attachments del webapp/attachment_routes.py file.

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 con tipo di contenuti

Registra la risposta dello studente alla nostra attività. Puoi cercarlo in un secondo momento quando lo insegnante visualizza i contenuti inviati nell'iframe di Revisione dei lavori degli studenti.

Configura uno schema di database per un Submission. Nell'esempio fornito, si prevede che gli studenti inseriscano 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 per un invio dello studente. Assegnato da Classroom e restituito nella risposta getAddOnContext nella visualizzazione dello studente.
  • student_response: la risposta fornita dallo studente.

Python

Estendi l'implementazione di SQLite e flask_sqlalchemy dei 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 il nuovo corso Submission nel file del server con i percorsi di gestione degli allegati.

Modificare il percorso della visualizzazione studente

A questo punto, modifica il percorso precedente della visualizzazione dello studente in modo da mostrare un piccolo modulo e accettare input da parte dello studente. Puoi riutilizzare la maggior parte del codice della procedura dettagliata precedente.

Individua il codice del server che fornisce il percorso per la visualizzazione degli studenti. Si tratta del percorso specificato nel campo studentViewUri durante la creazione di un allegato. La prima modifica da apportare è estrarre submissionId dalla risposta getAddOnContext.

Python

Nel nostro esempio, questo valore si trova 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")

Ti consigliamo inoltre di inviare una richiesta per ottenere lo stato dei contenuti inviati dagli studenti. La risposta contiene un valore SubmissionState, che indica stati come se lo studente ha aperto l'allegato o lo ha consegnato. Questa opzione può essere utile se non vuoi consentire le modifiche a un compito consegnato o se ti interessa fornire agli insegnanti informazioni sui progressi dei loro studenti:

Python

Nell'esempio fornito, si tratta di 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 sull'allegato dal nostro database e mostra un modulo di input. Il modulo nell'esempio fornito è costituito da un campo di immissione di stringhe e da un pulsante di invio. Mostra l'immagine del punto di riferimento e chiedi allo studente di inserire il nome. Una volta che forniscono una risposta, registrala nel nostro database.

Python

Nell'esempio fornito, si tratta di 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, ti consigliamo di disattivare la funzione di invio e mostrare la risposta corretta nella visualizzazione Insegnante.

Aggiungere un percorso per l'iframe di Revisione dei lavori degli studenti

Infine, aggiungi un percorso per pubblicare l'iframe di Revisione dei lavori degli studenti. Il nome di questo percorso deve corrispondere a quello fornito per studentWorkReviewUri quando crei un allegato. Questo percorso si apre quando l'insegnante visualizza il compito inviato dallo studente nell'interfaccia utente dello strumento di valutazione di Classroom.

Ricevi il parametro di query submissionId quando Classroom apre l'iframe di Revisione del lavoro dello studente. Utilizzalo per recuperare i lavori dello studente dal tuo database locale:

Python

Nel nostro esempio, questo valore 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)

Testare il componente aggiuntivo

Ripeti i passaggi per testare il componente aggiuntivo della procedura dettagliata precedente. Dovresti avere un allegato che lo studente può aprire.

Per testare l'allegato dell'attività:

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

Non dovresti notare alcuna modifica in Classroom dopo aver completato l'attività. Ora testa l'iframe di Revisione dei lavori degli studenti:

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

Verifica che vengano visualizzati i contenuti inviati corretti per lo studente.

Complimenti! Ora puoi procedere al passaggio successivo: sincronizzare i voti degli allegati.