Skip to content
This repository has been archived by the owner on Jan 18, 2024. It is now read-only.

Heddy147/Web_Praktikum2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

# Forum
Dominik Hendrix (919866), David Riemann (917593)
9. November 2015

## Unsere Lösung
Das Forum wurde mit Python umgesetzt. Wir benutzen das Framework "CherryPy", mit welchem wir mit wenig Aufwand einen funktionstüchtigen Webserver erzeugen und starten können. Daten werden in JSON-Dateien abgelegt und gespeichert.

Um eine effektive Lösung hinsichtlich der Präsentation zu ermöglichen, benutzen wir die Bibliothek "mako". Diese ermöglicht es Python-Code in den Präsentations-Dateien zu verwenden. Die Präsentations-Datei - welche verwendet wird - wird von "mako" ausgewertet und der enthaltene Python-Code wird ausgeführt.

Für die JavaScript-Entwicklung benutzen wir eine Bibliothek namens "jQuery". Diese Bibliothek stellt Methoden bereit, die verschiedenste JavaScript-Funktionen beinhalten, sodass komplexere Funktionalitäten mit weniger Aufwand ausgeführt werden können.

## Komponenten
Alle Komponenten sind sehr ähnlich aufgebaut. Sie unterscheiden sich lediglich von den Daten, mit denen die jeweilige Komponente arbeitet.

### Benutzer

#### Zweck
Diese Komponente dient der Benutzerverwaltung und Rechteverwaltung.
Sie überprüft, ob ein Benutzer angemeldet ist oder ob der angemeldete Benutzer die nötigen Rechte für eine gewisse Aktion hat.

#### Aufbau
Sie beinhaltet sowohl die Authentifizierung an sich als auch die Verarbeitung für die Präsentation.

Außerdem wird mit dieser Komponente der Benutzer dargestellt. Es werden alle Daten vom eingeloggten Benutzer hier hinterlegt.

#### Zusammenwirken
Da diese Komponente die Rechteverwaltung und Benutzerverwaltung beinhaltet, wird diese in jeder anderen Komponente benötigt.

#### API


### Themen

#### Zweck
Diese Komponente dient zur Verwaltung von Themen. Man kann damit Themen erstellen, bearbeiten oder löschen.

#### Aufbau
Beinhaltet jeweils eine Methode für einen CRUD-Dialog.

#### Zusammenwirken
Themen werden für die Selektierung der richtigen Diskussionen verwendet.

#### API


### Diskussionen

#### Zweck
Hiermit kann man verschiedenste Diskussionen erstellen, bearbeiten und löschen.

#### Aufbau
Beinhaltet jeweils eine Methode für einen CRUD-Dialog.

#### Zusammenwirken
Um die richtigen Beiträge zu erhalten, wird diese Komponente benötigt.

#### API


### Beiträge

#### Zweck
Um Beiträge anzeigen zu lassen oder mit diesen verschiedene Aktionen auszuführen, benötigt man diese Komponente.

#### Aufbau
Beinhaltet jeweils eine Methode für einen CRUD-Dialog.

#### Zusammenwirken


#### API


### Datenbank

#### Zweck
Das Datenbank-Objekt dient zur Erstellung, Speicherung, Änderung und Löschung aller Daten.

#### Aufbau
Es wurden für alle verschiedenen Daten mehrere Funktionen eingefügt:

* Alle laden
* Ein laden
* Ein erstellen
* Ein löschen
* Ein speichern

#### Funktionen

**Daten laden**
```python
dict load_user()
```
Wird ohne Parameter aufgerufen. Man erhält ein JSON-Objekt, welches [weiter unten](#benutzer-json) beschrieben wird.

```python
dict load_thema(thema_id)
```
Lädt ein Thema. Die Themen-ID (thema_id) muss dafür übergeben werden. [JSON-Struktur](#themen-json)

```python
dict load_themen(doSort=True)
```
Lädt alle Themen, die in der JSON-Datei enthalten sind. Der zu übergebene Parameter gibt an, ob das zurückgegebene Dictionary sortiert zurückgegeben werden soll.

```python
array|dict load_diskussionen(self, themen_id=None, doSort=True)
```
Lädt Diskussionen. Wenn der Parameter "themen_id" angegeben wird, werden nur Diskussionen vom Thema mit der Themen-ID geladen.
Wenn "doSort" mit True angegeben wird, wird eine sortierte Liste erzeugt. Diese hat folgende Struktur:
```json
[(Diskussions-ID) String, (JSON-Objekt)]
```
Der Eintrag mit dem Index "0" widerspiegelt die Diskussions-ID, der Eintrag mit dem Index "1" die eigentlichen Daten.
Die Daten sind wie [unten beschrieben](#diskussionen-json) strukturiert.

Wird der Parameter "doSort" auf false gesetzt, erhält man ein Dictionary, welches wie [unten beschrieben](#diskussionen-json) strukturiert ist.

### Ansicht

#### Zweck
Dient lediglich zum rendern der nötigen Ausgabe.

#### Aufbau
Eine Funktion pro Präsentation.

#### Zusammenwirken
Wird von den meisten Methoden benutzt, um eine Ausgabe zu erzeugen.

#### API


## Datenablage
Um unsere Daten zu speichern benutzen wir keine eigenständige Datenbank, sondern legen die Daten in Dateien ab.
Die Daten werden zu einem JSON-String konvertiert und so in die jeweiligen Dateien abgelegt.
Es sind 4 verschiedene Datein vorgesehen:

### Benutzer {#benutzer-json}
In dieser Datei werden die Benutzer inkl. Rollen- und Rechtevergabe gespeichert.
Als Index werden die Benutzernamen verwendet, da diese eindeutig sein müssen.
Hinter diesem Index steckt ein JSON-Objekt, in dem per "Key-Value" jeweils die verschiedensten Eigenschaften gespeichert werden.

Dieses JSON-Objekt sieht folgendermaßen aus:
```json
{
	"benutzername": {
		"rolle": String,
		"password": String,
		"diskussionen": Array
	}
}
```
In der Eigenschaft "diskussionen" ist ein Array vorzufinden, welches die IDs der Diskussionen beinhaltet, in der der Benutzer Beiträge bearbeiten und löschen kann.

### Themen {#themen-json}
Die Themen werden mithilfe eines zweidimensionalen JSON-Objektes gespeichert. Hier dient die ID des Themas als Index, hinter dem wieder ein JSON-Objekt steckt, in dem wiederrum die nötigen Eigenschaften für das Thema als "Key-Value-Pairs" gespeichert werden.

Dieses JSON-Objekt sieht folgendermaßen aus:
```json
{
	"id": {
		"name": String,
		"beschreibung": String
	}
}
```

### Diskussionen {#diskussionen-json}
Auch hier werden die Daten als JSON gespeichert. Hier findet man jedoch ein dreidimensionales JSON-Objekt. An oberster Stelle dienen die Themen-IDs als Index der Objekte, in denen die Diskussionen enthalten. Innerhalb eines Objektes ist es wie bei den Themen: Diskussion-IDs dienen als Indizes.

Dieses JSON-Objekt sieht folgendermaßen aus:
```json
{
	"Themen-ID": {
		"Diskussions-ID": {
			"beschreibung": String,
			"name": String,
			"time": Double
		}
	}
}
```

### Beiträge {#beitraege-json}
Die Beiträge werden wie die Diskussionen gespeichert. Allerdings liegen hier an oberster Stelle die Diskussions-IDs als Indizen. Tiefer in das Objekt hinein läuft es sich auf das Gleiche hinaus.

Dieses JSON-Objekt sieht folgendermaßen aus:
```json
{
	"Diskussions-ID": {
		"Beitrags-ID": {
			"titel": String,
			"user": String,
			"text": String,
			"time": Double,
			"deleted": Boolean
		}
	}
}
```

## Konfiguration
Jedes "Package" wurde manuell auf einen "Unterordner" gelinkt.
So ist der "Unterordner" (hier nur im Link zu erkennen) "/themen" für jegliche Aktionen der Themen zuständig.
Zusätlich wurden für die CSS- und JS-Dateien Routen definiert.
So werden jegliche CSS-Dateien die mit "/css/*" eingebunden werden, auf den Ordner "content/css" geroutet.
Analog dazu verhält es sich mit den JS-Dateien.

Weiterhin wurden (als statisch agierende) Objekte an das cherrypy-Objekt in der Eigenschaft "Application" gehangen.

## Durchführung und Ergebnisse der geforderten Prüfungen

### W3C-Validator HTML
Es wurden jegliche HTML-Ausgaben vom W3C-Validator überprüft und für korrekt empfunden

### W3C-Validator CSS
Es wurden jegliche CSS-Ausgaben vom W3C-Validator überprüft und für korrekt empfunden