Bu, Classroom eklentilerindeki adım adım açıklamalı beşinci kılavuzdur. size yol gösterir.
Bu adım adım açıklamalı kılavuzda, önceki adım adım açıklamalı kılavuzda verilen örneği değiştireceksiniz. etkinlik türü eki oluşturmak için Bunlar, imzanızı içeren yazılı yanıt, test vb. gibi bir öğrencinin ödevini gerektirmesi ve öğrenciler tarafından oluşturulan eserler.
İçerik türü ile etkinlik türü ekler arasındaki fark önemlidir. Etkinlik türü ekler, içerik türünden şu yönleriyle farklıdır:
- "Teslim Et" düğmesi görünür.
- Öğrenci çalışmaları için benzersiz bir tanımlayıcı sağlar.
- Kullanıcının ek kartı, Classroom'da not veren kullanıcının kullanıcı arayüzünde gösterilir.
- Ait oldukları ödev için bir not verebilirler.
Not vermeyle ilgili tartışma için bir sonraki adım adım açıklamalı kılavuzu inceleyin. Bu süreçte, adım adım açıklamalı kılavuza başvurarak aşağıdaki adımları tamamlayabilirsiniz:
- Önceki ek oluşturma isteklerini Etkinlik türü eki oluşturmak için Classroom API.
- Öğrencilerin gönderimleri için kalıcı depolama alanı uygulayın.
- Öğrenci girişini kabul etmek için önceki Öğrenci Görünümü rotasını değiştirin.
- Öğrenci Çalışma İncelemesi iframe'ini sunmak için bir yol sağlayın.
Bitirdiğinizde ödevlerde etkinlik türü ekleri oluşturabilirsiniz: Öğretmen olarak giriş yapıldığında Google Classroom kullanıcı arayüzü. Sınıftaki öğrenciler şunları yapabilir: iframe'de etkinliği tamamlayıp bir yanıt da gönderebilirsiniz. Öğretmen Öğrencinin gönderimini Classroom not verme kullanıcı arayüzünde görüntüleyebilirsiniz.
Bu örneğin amacı doğrultusunda, ünlü bir önemli noktanın resmini ve bir açıklamanın gösterildiği önceki adım adım açıklamalı kılavuz yer işaretinin adını yazın. Etkinlik, öğrenciden bazı görevleri önemli noktanın adını sağlayın.
Ek oluşturma isteğini değiştirme
Kodunuzun, içerik türü oluşturduğunuz bölümüne gidin
ekini okuyun. Buradaki temel öğe,
Daha önce teacherViewUri
özelliğini belirttiğimiz AddOnAttach nesnesi,
studentViewUri
ve ek için title
.
Tüm eklenti ekleri bu üç alanı gerektirir ancak
bir studentWorkReviewUri
olmaması, ekin
etkinlik türü veya içerik türü olabilir. Doldurulan bir CREATE
isteği
studentWorkReviewUri
etkinlik türünde ek, CREATE
ise etkinlik türünde bir ek haline gelir
studentWorkReviewUri
içermeyen istek, içerik türü eki haline gelir.
Bu istekte yapılacak tek değişiklik,
studentWorkReviewUri
alanı boş bırakılamaz. Buraya uygun şekilde adlandırılmış bir rota ekleyin; siz
sonraki bir adımda uygulayabilirsiniz.
Python
Sağladığımız örneğimizde bu, create_attachments
webapp/attachment_routes.py
dosya
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}",
}
İçerik türü ekler için kalıcı depolama alanı ekleme
Öğrencinin etkinliğimize verdiği yanıtı kaydetme. Bunu daha sonra öğretmen, Öğrenci Çalışması İncelemesi iframe'inde gönderimi görüntüler.
Submission
için veritabanı şeması oluşturun. Sağladığımız örneğimizde,
öğrencilerinden resimdeki önemli noktanın adını girmelerini isteyin. Submission
dolayısıyla şu özellikleri içerir:
attachment_id
: Eklerin benzersiz tanımlayıcısıdır. Atayan: Classroom ve ekleyebilirsiniz.submission_id
: Öğrenci gönderimleri için tanımlayıcı. Atayan: Classroom'da yer alan ve şuradagetAddOnContext
yanıtıyla geri döndü: Öğrenci Görünümü.
student_response
: Öğrencinin verdiği cevap.
Python
Önceki adımlarda açıklanan SQLite ve flask_sqlalchemy
uygulamasını genişletin.
Önceki tabloları tanımladığınız dosyaya gidin
(sağladığımız örneği takip ediyorsanız models.py
). Aşağıdakileri şu adrese ekleyin:
tıklayın.
# 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))
Yeni Submission
sınıfını ekinizle birlikte sunucu dosyasına aktarın
göz atabilirsiniz.
Öğrenci Görünümü rotasını değiştirme
Sonra, önceki Öğrenci Görünümü rotasını küçük bir form gösterecek şekilde değiştirin ve kabul edin öğrenciden gelen bilgiler olabilir. Önceki kodun büyük bir kısmını yeniden kullanabilirsiniz adım adım açıklamalı kılavuzu inceleyin.
Öğrenci Görünümünüz için rotayı sağlayan sunucu kodunu bulun. Bu
ek oluştururken studentViewUri
alanında belirtilen rota.
Yapılacak ilk değişiklik, submissionId
öğesini
getAddOnContext
yanıt.
Python
Sağladığımız örneğimizde bu, load_activity_attachment
yöntemindeki
webapp/attachment_routes.py
dosyası.
# 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")
Öğrenci gönderim durumunu öğrenmek için de bir istekte bulunabilirsiniz.
Yanıt, aşağıdaki durumları belirten bir SubmissionState
değeri içeriyor:
Örneğin, öğrencinin eki açıp açmadığı veya teslim edip etmediği. Bu,
teslim edilmiş bir gönderimde düzenlemelere izin vermek istemiyorsanız veya
ve öğretmenlerin, öğrencilerinin deneyimleri hakkında ilerleme durumu:
Python
Sağladığımız örneğimizde bu,
load_activity_attachment
yöntemini kullanın.
# 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()
Son olarak, veritabanımızdan ek bilgilerini alın ve bir giriş yapın formunu doldurun. Sağladığımız örneğimizdeki form, bir dize giriş alanından ve gönder düğmesi. Önemli noktayı gösteren resmi gösterin ve öğrenciden adını girmesini isteyin. Sizden yanıt aldıktan sonra yanıtı veritabanımıza kaydedin.
Python
Sağladığımız örneğimizde bu,
load_activity_attachment
yöntemini kullanın.
# 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)
Kullanıcıları birbirinden ayırt etmek için gönderme özelliğini devre dışı bırakabilirsiniz işlevi görebilir ve doğru yanıtı Öğretmen Görünümü'nde gösterebilirsiniz.
Öğrenci Çalışma İncelemesi iframe'i için rota ekleme
Son olarak, Öğrenci Çalışması İncelemesi iframe'ini sunmak için bir rota ekleyin. Bu cihazın adı
rota, oluşturulurken studentWorkReviewUri
için sağlanan rotayla eşleşmelidir
ekleyebilirsiniz. Bu rota, öğretmen öğrencinin gönderimini şurada görüntülediğinde açılır:
Classroom'da not veren kullanıcı arayüzü.
Classroom aşağıdaki durumlarda submissionId
sorgu parametresini alırsınız:
Öğrenci Çalışması İncelemesi iframe'ini açar. Bu dosyayı, öğrencinin çalışmasını şuradan almak için kullanabilirsiniz:
yerel veritabanınız:
Python
Sağlanan örneğimizde bu, webapp/attachment_routes.py
dosyasındadır.
@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)
Eklentiyi test etme
Önceki adım adım açıklamalı kılavuzda yer alan eklenti adımlarını test etme bölümünü tekrarlayın. Şunları yapmalısınız: Öğrenci tarafından açılabilecek bir ek bulunur.
Etkinlik ekini test etmek için aşağıdaki adımları uygulayın:
- Google Classroom'da oturum açın. aşağıdakilerden biri olarak öğrenci test kullanıcılarını, öğretmen test kullanıcısıyla aynı sınıftaki test kullanıcılarını belirler.
- Sınıf Çalışmaları sekmesine gidin ve test amaçlı Ödev'i genişletin.
- Eklenti ek kartını tıklayarak Öğrenci Görünümü'nü açın ve bir ve yanıt almalısınız.
- Etkinliği tamamladıktan sonra iframe'i kapatın. İsteğe bağlı olarak, İçinde düğmesi.
Tamamladıktan sonra Classroom'da herhangi bir değişiklik görmeyeceksiniz. etkinliği tıklayın. Şimdi Öğrenci Çalışması İnceleme iframe'ini test edin:
- Classroom'da öğretmen test kullanıcısı olarak oturum açın.
- Notlar sekmesinde test ödevinizin sütununu bulun. Önce test ödevinizin adını yazın.
- Test öğrencisinin kartını bulun. Karttaki eki tıklayın.
Öğrenci için doğru gönderimin göründüğünü doğrulayın.
Tebrikler! Sonraki adıma geçmeye hazırsınız: Ek senkronize etme notları ekleyin.