Allegati tipo di attività

Questa è la quinta procedura dettagliata dei componenti aggiuntivi di Classroom di una serie di procedure dettagliate.

In questa procedura dettagliata, modificherai l'esempio del passaggio precedente per produrre un allegato di tipo attività. Si tratta di tutti gli allegati richiedere l'invio di contenuti da parte degli studenti, ad esempio una risposta scritta, un quiz o altro un artefatto generato 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:

  • Una "Consegna" viene visualizzato in alto a destra nell'iframe della vista studente.
  • 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 completa quanto segue:

  • Modifica le richieste di creazione degli allegati precedenti nel 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 nell'interfaccia utente di Google Classroom quando si accede come insegnante. Gli studenti del corso possono completano l'attività nell'iframe e invia 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 dalla 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 indica il nome del punto di riferimento.

Modifica la richiesta di creazione dell'allegato

Vai alla sezione del codice in cui hai creato un tipo di contenuto. allegato nella procedura dettagliata precedente. L'elemento chiave in questo caso è un'istanza Oggetto AddOnAttachment, in cui abbiamo specificato in precedenza teacherViewUri, studentViewUri e title per l'allegato.

Anche se per tutti gli allegati dei componenti aggiuntivi sono necessari questi tre campi, gli attributi relativi alla presenza l'assenza di un studentWorkReviewUri determina se l'allegato è activity-type o content-type. Una richiesta CREATE con un campo compilato studentWorkReviewUri diventa un allegato di tipo attività, mentre CREATE una richiesta senza studentWorkReviewUri diventa un allegato di tipo contenuto.

L'unica modifica da apportare a questa richiesta è compilare campo studentWorkReviewUri. Aggiungi qui un percorso con il nome corretto. tu in un passaggio successivo.

Python

Nell'esempio fornito, è nel metodo create_attachments nella 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 di tipo contenuto

Registra la risposta dello studente alla nostra attività. Puoi consultarlo in seguito, quando l'insegnante visualizza i contenuti inviati nell'iframe della revisione del lavoro dello studente.

Configura uno schema di database per un Submission. L'esempio fornito prevede agli studenti di inserire il nome del punto di riferimento mostrato in un'immagine. Submission contiene quindi i seguenti attributi:

  • attachment_id: un identificatore univoco per un allegato. Assegnata da Classroom e restituito nella risposta durante la creazione di un allegato.
  • submission_id: un identificatore dei contenuti inviati da uno studente. Assegnata da Classroom e restituito nella risposta getAddOnContext in dalla Vista studente.
di Gemini Advanced.
  • student_response: la risposta fornita dallo studente.
di Gemini Advanced.

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 il seguente codice a nella parte inferiore 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 il tuo allegato per la gestione delle route.

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 precedente la procedura dettagliata.

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

Python

Nell'esempio fornito, è nel metodo load_activity_attachment in il 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 gli stati come ad esempio se lo studente ha aperto o consegnato l'allegato. Potrebbe essere utile se vuoi impedire le modifiche a un invio consegnato o se interessato a fornire agli insegnanti informazioni sui loro studenti progressi:

Python

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

# 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 input in un modulo di testo. Il modulo nell'esempio fornito è costituito da un campo di immissione stringa e un Invia. 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 load_activity_attachment precedente.

# 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 l'invio e mostra invece la risposta corretta nella vista per l'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 questo la route deve corrispondere a quella fornita per studentWorkReviewUri durante la creazione in un allegato. Questo percorso si apre quando l'insegnante visualizza il contenuto inviato dallo studente in la UI del valutatore di Classroom.

Ricevi il parametro di query submissionId quando Classroom apre l'iframe della revisione del lavoro dello studente. Utilizzala per recuperare il lavoro dello studente da del 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 contengono un allegato che può essere aperto dallo studente.

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

  • Accedi a Google Classroom. come uno dei tuoi utenti di test student nella stessa classe 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 la risposta per l'attività.
  • Chiudi l'iframe dopo aver completato l'attività. Se vuoi, fai clic sul pulsante Scegli Pulsante In.

Dopo aver completato il corso, non dovresti vedere nulla in Classroom l'attività. 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 sull' il 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 al passaggio successivo: sincronizzazione dell'allegato voti.