Questa è la quinta procedura dettagliata della serie di procedure dettagliate 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 tutti gli allegati che richiedono l'invio da parte dello studente, ad esempio una risposta scritta, un quiz o un altro artefatto creato dallo studente.
La distinzione tra allegati di tipo contenuto e di tipo attività è importante. Gli allegati di tipo attività differiscono da quelli di tipo contenuto per i seguenti motivi:
- Un pulsante "Consegna" viene visualizzato in alto a destra dell'iframe della visualizzazione studente.
- Forniscono un identificatore univoco per il lavoro dello studente.
- La scheda dell'allegato viene visualizzata nella UI 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 le seguenti operazioni:
- 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 studente per accettare l'input dello studente.
- Fornisci un percorso per pubblicare l'iframe Revisione del lavoro dello studente.
Al termine, puoi creare allegati di tipo attività nei compiti tramite l'interfaccia utente di Google Classroom quando accedi come insegnante. Gli studenti della classe possono anche completare l'attività nell'iframe e inviare una risposta. L'insegnante può visualizzare il compito inviato 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.
Modifica la richiesta di creazione dell'allegato
Vai alla sezione del codice in cui hai creato un allegato di 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 l'allegato.
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 studentWorkReviewUri
compilato diventa un allegato di tipo attività, mentre una richiesta CREATE
senza un studentWorkReviewUri
diventa un allegato di tipo contenuto.
L'unica modifica da apportare a questa richiesta è compilare il
campo studentWorkReviewUri
. Aggiungi qui una route con un nome appropriato. La implementerai in un passaggio successivo.
Python
Nell'esempio fornito, questo 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 persistente per gli allegati di tipo di contenuti
Registra la risposta dello studente alla nostra attività. Puoi cercarlo in un secondo momento quando l'insegnante visualizza l'invio nell'iframe Revisione del lavoro dello studente.
Configura uno schema del database per un Submission
. L'esempio fornito 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 l'invio di uno studente. Assegnato da Classroom e restituito nella rispostagetAddOnContext
nella visualizzazione dello 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 le tue route di gestione degli allegati.
Modificare il percorso della visualizzazione studente
Successivamente, modifica la route precedente di Visualizzazione studente per mostrare un piccolo modulo e accettare 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 visualizzazione dello studente. Questo è
il percorso specificato nel campo studentViewUri
durante la creazione di un allegato.
La prima modifica da apportare consiste nell'estrazione di submissionId
dalla
risposta getAddOnContext
.
Python
Nell'esempio fornito, questo 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 dell'invio degli studenti.
La risposta contiene un valore SubmissionState
, che indica stati come
se lo studente ha aperto l'allegato o lo ha consegnato. Questa funzionalità può essere
utile se vuoi impedire le modifiche a un compito consegnato o se ti
interessa fornire agli insegnanti informazioni dettagliate 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 sugli allegati dal nostro database e mostra un modulo di input. Il modulo nel nostro esempio fornito è costituito da un campo di input stringa e da un pulsante di invio. Mostra l'immagine del punto di riferimento e chiedi allo studente di inserire il suo nome. Una volta fornita 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, valuta la possibilità di disattivare la funzione di invio e mostrare invece la risposta corretta nella visualizzazione Insegnante.
Aggiungere una route per l'iframe Revisione del lavoro dello studente
Infine, aggiungi una route per pubblicare l'iframe Revisione del lavoro degli studenti. Il nome di questa
route deve corrispondere a quello fornito per studentWorkReviewUri
durante la creazione
di 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 il lavoro dello studente dal tuo database locale:
Python
Nell'esempio fornito, questo 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. Devi avere un allegato che possa essere aperto dallo studente.
Per testare l'allegato dell'attività, completa i seguenti passaggi:
- Accedi a Google Classroom come uno dei tuoi utenti di test studente nella stessa classe 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 dello studente e inviare una risposta per l'attività.
- Chiudi l'iframe dopo aver completato l'attività. (Facoltativo) Fai clic sul pulsante Consegna.
Dopo aver completato l'attività, non dovresti notare alcuna modifica in Classroom. Ora prova l'iframe Revisione dei lavori degli studenti:
- Accedi a Classroom come utente di test insegnante.
- Trova la colonna del compito di test nella scheda Voti. Fai clic sul nome del compito di test.
- Trova la scheda dell'utente studente di test. Fai clic sull'allegato sulla scheda.
Verifica che per lo studente venga visualizzato l'invio corretto.
Complimenti! Ora puoi procedere al passaggio successivo: sincronizzare i voti degli allegati.