Externe Anhänge und abgeben

Dies ist die siebte Schritt-für-Schritt-Anleitung zu Classroom-Add-ons. Schritt-für-Schritt-Anleitung.

In dieser Schritt-für-Schritt-Anleitung fügen Sie einer Webanwendung Verhalten hinzu, um ein Add-on zu erstellen Anhänge außerhalb von Google Classroom. Mit diesem Verhalten können können Nutzende Add-on-Anhänge zu Ihrem bestehenden Produkt oder von Ihrer Website erstellen. Dies ist Das ist auch eine tolle Ergänzung für eine CourseWork-Integration, da Sie bestehende die Nutzer auf die von Ihrem Add-on angebotene verbesserte Nutzererfahrung leiten, ohne dass ihren Ablauf. Das empfohlene Verfahren wird unter Anhänge erstellen außerhalb von Classroom.

Sie können Ihrem Add-on auch Funktionen hinzufügen, um Aufgaben mit Add-ons zu ändern Anhänge programmatisch. Sie können jede Zuweisung mit einer der folgenden Optionen ändern: Add-on-Anhänge erstellen, unabhängig davon, wer die Aufgabe erstellt hat. Dies ist Dies ist besonders nützlich, um Aufgaben abzugeben, nachdem ein Schüler/Student ein damit die Lehrkraft weiß, dass die zugewiesenen Aufgaben erledigt sind die Aufgabe des Schülers/Studenten kann geprüft werden.

Sie erweitern die finale Version Ihres Add-ons, die content-type oder Anhänge vom Typ „Aktivität“. Der Inhaltstyp-Anhang wird in diesem Leitfaden verwendet.

OAuth-Bereich für Aufgabenverwaltung hinzufügen

Achten Sie darauf, dass Ihre Anwendung die folgenden Bereiche anfordert:

  • https://www.googleapis.com/auth/classroom.addons.teacher
  • https://www.googleapis.com/auth/classroom.addons.student
  • https://www.googleapis.com/auth/classroom.coursework.students

Der Bereich classroom.coursework.students wurde zuvor nicht benötigt und ist zum Erstellen oder Ändern von CourseWork-Zuweisungen. Diesen Bereich den Listen hinzufügen im Bereich Ihres Cloud-Projekts Google Workspace Marketplace SDK, OAuth-Zustimmungsbildschirm und Ihre Servercode.

Python

  SCOPES = [
    "https://www.googleapis.com/auth/classroom.addons.teacher",
    "https://www.googleapis.com/auth/classroom.addons.student",
    "https://www.googleapis.com/auth/classroom.coursework.students",
  ]

Aufgaben in Classroom erstellen

Schaltflächen zu einer Webseite ohne iFrames hinzufügen

Mit dem in dieser Schritt-für-Schritt-Anleitung beschriebenen Ablauf können Nutzer Google Classroom-Aufgaben und -Anhänge aus einem Drittanbieterprodukt. In Dies ist wahrscheinlich Ihre bestehende Website oder Anwendung. In diesem Beispiel müssen Sie eine simulierte Webseite erstellen, die als externe Website fungiert. Du brauchst eine Taste oder Link, der beim Anklicken eine neue Route öffnet, die den vorgeschlagenen CourseWork-Ablauf, um eine neue Aufgabe zu erstellen.

Außerdem müssen Sie eine Schaltfläche oder einen Link hinzufügen, damit sich der Nutzer anmelden kann, wenn Sie noch kein Konto haben. Für die nachfolgenden Schritte sind Nutzeranmeldedaten erforderlich. API-Anfragen, sodass sie den OAuth 2.0-Handshake abschließen müssen. Weitere Informationen finden Sie auf der Seite Anmeldung Schritt-für-Schritt-Anleitung.

Python

Im angegebenen Python-Beispiel wird die eingeführte Route /index geändert. erhalten Sie im ersten Schritt der Schritt-für-Schritt-Anleitung.

<!-- /webapp/templates/index.html -->
<a href="clear-credentials.html">Logout</a>
<a href="start-auth-flow.html">Login</a>

<br>

<a href="create-coursework-assignment.html">Create a CourseWork Assignment</a>

Fügen Sie eine HTML-Vorlage hinzu, um ein Ziel auf Ihrer Website darzustellen. Diese Seite steht für den Inhalt, der an CourseWork angehängt wird Zuweisen.

<!-- /webapp/templates/example-coursework-assignment.html -->
<h1>CourseWork assignment loaded!</h1>
<p>You've loaded a CourseWork assignment! It was created from an external web page.</p>

Erstellen Sie eine neue Python-Moduldatei, um die auf KursWork bezogenen Routen zu verarbeiten. In unserem Beispiel ist dies coursework_routes.py. Folgendes hinzufügen drei Routen erstellen: Hinweis: Einen Teil des Inhalts werden Sie später einfügen.

# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
  """
  Completes the assignment creation flow.
  """

  # Check that the user is signed in. If not, perform the OAuth 2.0
  # authorization flow.
  credentials = get_credentials()

  if not credentials:
    return start_auth_flow("coursework_assignment_callback")

  # Construct the Google Classroom service.
  classroom_service = get_classroom_service()

  pass  # To be completed later.

@app.route("/example-coursework-assignment/<assignment_type>")
def example_coursework_assignment(assignment_type):
  """
  Renders the "example-coursework-assignment.html" template.
  """
  return flask.render_template(
      "example-coursework-assignment.html", assignment_type=assignment_type
  )

@app.route("/coursework-assignment-callback")
def coursework_assignment_callback():
  """
  Completes the OAuth 2.0 handshake and stores credentials in the session.
  This is identical to the callback introduced in the sign-in walkthrough,
  but redirects the user to the index page instead of the attachment
  discovery page.
  """
  flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
      CLIENT_SECRETS_FILE,
      scopes=SCOPES,
      state=flask.session["state"],
      redirect_uri=flask.url_for("coursework_assignment_callback", _external=True),
  )

  flow.fetch_token(authorization_response=flask.request.url)

  credentials = flow.credentials
  flask.session["credentials"] = session_credentials_to_dict(
      credentials
  )

  # Close the current window and redirect the user to the index page.
  return flask.render_template("close-me.html", redirect_destination="index")

Prüfen, ob der Nutzer berechtigt ist, Add-ons zu erstellen

Nutzer müssen mehrere Voraussetzungen erfüllen, damit Sie Inhalte erstellen können Add-on-Anhänge erstellen. Der Einfachheit halber bietet Google courses.checkAddOnCreationEligibility-Methode, um zu bestimmen, ob ein Nutzer diese Voraussetzungen erfüllt. Nutzer, die die Voraussetzungen erfüllen, werden als berechtigte Nutzer sind.

Fügen Sie der Implementierung der CourseWork-Erstellungsroute die Berechtigungsprüfung hinzu. Testen Sie dann das Feld isCreateAttachmentEligible in der Antwort. Für teilnahmeberechtigte folgen Sie der Logik, um eine Zuweisung mit Add-on Anhang. Erstellen Sie andernfalls einen Link Material. Sie benötigen die ID des Kurses in für die der Nutzer eine Aufgabe erstellen möchte. Normalerweise fordern Sie den Nutzer um anzugeben, welcher Kurs verwendet werden soll. Der Einfachheit halber verwenden wir einen hartcodierten Wert in in diesem Beispiel.

Python

# /webapp/coursework_routes.py
@app.route("/create-coursework-assignment")
def create_coursework_assignment():
  """
  Completes the assignment creation flow.
  """
  # ... Check that the user is signed in and get the Classroom service ...

  # The ID of the course to which the assignment will be added.
  course_id = 1234567890  # TODO(developer) Replace with an actual course ID.

  # Check whether the user can create add-on attachments.
  eligibility_response = (
      classroom_service.courses()
      .checkAddOnCreationEligibility(courseId=course_id)
      .execute()
  )
  is_create_attachment_eligible = eligibility_response.get("isCreateAttachmentEligible")

  if is_create_attachment_eligible:
    # See the "Create an assignment with add-on attachment for eligible users" section for implementation.
  if not is_create_attachment_eligible:
    # See the "Create a Link Material" section for implementation.

Aufgaben mit Add-on-Anhang für berechtigte Nutzer erstellen

Wenn der Nutzer berechtigt ist, Add-on-Anhänge zu erstellen, gehen Sie so vor:

  1. API-Anfrage senden, um eine courseWork-Zuweisung in zu erstellen Google Classroom mit keinen Anhängen
  2. Extrahieren Sie die id der neu erstellten Zuweisung.
  3. Erstellen Sie eine neue CourseWork-AddOnAttachment.
  4. Senden Sie eine Anfrage zum Erstellen eines Add-on-Anhangs für das neu erstellte Aufgabe in Google Classroom.

Python

# /webapp/coursework_routes.py
if is_create_attachment_eligible:
  # Create an assignment.
  coursework = {
      "title": "My CourseWork Assignment with Add-on Attachment",
      "description": "Created using the Classroom CourseWork API.",
      "workType": "ASSIGNMENT",
      "state": "DRAFT",  # Set to 'PUBLISHED' to assign to students.
  }

  # Issue a request to create the assignment.
  create_assignment_response = (
      classroom_service.courses()
      .courseWork()
      .create(courseId=course_id, body=coursework)
      .execute()
  )

  # Create an add-on attachment that links to the selected content and
  # associate it with the new assignment.
  content_url = flask.url_for(
      "example_coursework_assignment",
      assignment_type="add-on-attachment",
      _scheme="https",
      _external=True,
  )

  # Construct an AddOnAttachment instance.
  attachment = {
      "teacherViewUri": {"uri": content_url},
      "studentViewUri": {"uri": content_url},
      "title": f'Test Attachment for Assignment {create_assignment_response.get("id")}',
  }

  # Issue a request to create the attachment.
  add_on_attachment_response = (
      classroom_service.courses()
      .courseWork()
      .addOnAttachments()
      .create(
          courseId=course_id,
          itemId=create_assignment_response.get("id"),  # ID of the new assignment.
          body=attachment,
      )
      .execute()
  )

Wenn der Nutzer nicht berechtigt ist, Add-on-Anhänge zu erstellen, erstellen Sie einen Link. Gehen Sie stattdessen so vor:

Python

if not is_create_attachment_eligible:
    coursework = {
        "title": "My CourseWork Assignment with Link Material",
        "description": "Created using the Classroom CourseWork API.",
        "workType": "ASSIGNMENT",
        "state": "DRAFT",  # Set to 'PUBLISHED' to assign to students.
        # Specify the URL for your content as a Link Material.
        "materials": [
            {
                "link": {
                    "url": flask.url_for(
                        "example_coursework_assignment",
                        assignment_type="link-material",
                        _scheme="https",
                        _external=True,
                    )
                }
            }
        ],
    }

    # Issue a request to create the assignment.
    assignment_response = (
        classroom_service.courses()
        .courseWork()
        .create(courseId=course_id, body=coursework)
        .execute()
    )

Bereits erstellte Zuweisung ändern

Sie können auf Google Classroom zugreifen, es ändern, abgeben, einfordern oder zurückgeben Stream-Element, das mindestens eines Ihrer Add-on-Anhänge enthält, unabhängig davon, wer hat das Streamelement erstellt. Streamelemente sind beliebige Announcement, CourseWork Zuweisung oder CourseWorkMaterial.

Zur Veranschaulichung fügen Sie eine Route zum Ändern eines bestimmten Stream-Elements hinzu. Verwenden um zu prüfen, ob Sie auf die von Ihnen erstellten Streamelemente zugreifen und diese ändern können. mit der API und von einer Lehrkraft über die Google Classroom-Benutzeroberfläche erstellt.

Fügen Sie der Webseite, die Sie zuerst bearbeitet haben, einen weiteren Link oder eine weitere Schaltfläche hinzu. dieser Schritt-für-Schritt-Anleitung. Es sollte eine neue Route geöffnet werden, um eine CourseWork zu ändern Zuweisen.

Python

Im angegebenen Python-Beispiel wird die geänderte Route /index geändert. weiter oben in dieser Schritt-für-Schritt-Anleitung.

<!-- /webapp/templates/index.html -->
<a href="modify-coursework-assignment.html">Create a CourseWork Assignment</a>

Erstellen Sie eine neue Route für die auf CourseWork bezogenen Routen. Dies ist in der coursework_routes.py in unserem Beispiel.

# Check that the user is signed in.
credentials = get_credentials()

if not credentials:
  return start_auth_flow("coursework_assignment_callback")

# Get the Google Classroom service.
classroom_service = get_classroom_service()

# The ID of the course to which the assignment will be added.
# Ordinarily, you'll prompt the user to specify which course to use. For
# simplicity, we use a hard-coded value in this example.
course_id = 1234567890  # TODO(developer) Replace with an actual course ID.
assignment_id = 1234567890  # TODO(developer) Replace with an actual assignment ID.

# Retrieve details about the CourseWork assignment.
get_coursework_response = (
    classroom_service.courses()
    .courseWork()
    .get(courseId=course_id, id=assignment_id)
    .execute()
)

# Alter the current title.
assignment_title = f"{get_coursework_response.get('title')} (Modified by API request)"

# Issue a request to modify the assignment.
modify_coursework_response = (
    classroom_service.courses()
    .courseWork()
    .patch(
        courseId=course_id,
        id=assignment_id,
        updateMask="title",
        body={"title": assignment_title},
    )
    .execute()
)

Add-on testen

Zur Vereinfachung werden in den bereitgestellten Beispielen hartcodierte Kurs- und Zuweisungskennungen. Sie erhalten diese IDs, indem Sie Anfragen mit Anmeldedaten der Lehrkraft an die Methoden get und list der courses und courseWork-Ressourcen Sie werden auch in der Antwort zurückgegeben, wenn Sie courseWork Aufgaben.

Führen Sie Ihren Server aus, gehen Sie zu Ihrer Indexseite und melden Sie sich als Nutzer von Lehrkräften an ohne Google Workspace for Education Teaching & Learning- oder Plus-Lizenz. Sie können mit der des Nutzer-Lizenzstatus von der Admin-Konsole: Klicken Sie auf Aufgabe erstellen. Schaltfläche, öffnen Sie dann die Google Classroom-Benutzeroberfläche und überprüfen Sie, ob die Aufgabe mit einem Linkmaterial-Anhang wurde erstellt. Der Anhang sollte den Titel die verlinkte Webseite und eine URL.

Erstellen von Add-on-Anhängen testen

Kehren Sie zur Indexseite zurück und melden Sie sich als Lehrkraft an mit der Google Workspace for Education-Unterrichtsoption &amp; Learning- oder Plus-Lizenz. Klicken Sie auf Create a CourseWork Assignment (Aufgabe erstellen). Schaltfläche, öffnen Sie dann die Google Classroom-Benutzeroberfläche und überprüfen Sie, ob eine Aufgabe mit Ein Add-on-Anhang wurde erstellt. Der Anhang sollte den Namen Add-on-Anwendung und dem im Code angegebenen Titel.

Zuweisungsänderung testen

Kehren Sie zur Indexseite zurück und vergewissern Sie sich, dass Sie als Lehrkraftnutzer angemeldet sind mit einer Lehrkraft und Learning- oder Plus-Lizenz. Klicken Sie auf den Link zum Ändern einer Kursaufgabe Aufgabe. Kehren Sie dann zur Google Classroom-Benutzeroberfläche zurück und überprüfen Sie, ob der Aufgabentitel geändert wurde.

Glückwunsch! Sie haben die Schritt-für-Schritt-Anleitung abgeschlossen.