Göm menyn

TDP003 Projekt: Egna datormiljön

Projektuppgift


Mål:

Målet med projektet i kursen är att skapa en portfolio som kan användas för att dokumentera de projekt ni gör på IP-programmet. Denna portfolio implementeras i form av en webbplats. På webbplatsen ska det sedan vara möjligt att söka bland era projekt för att exempelvis hitta alla projekt som involverar Python.

Genomförande:

För genomförandet av projektet gäller:

  • Projektet genomförs i grupper om två personer. Avvikelse kan ske vid särskilda omständigheter i samråd med kursledare.
  • En individuell arbetsdagbok skall skrivas dagligen, läs mer dagboken och om reflektionsdokumentet här.
  • Inlämningar och redovisning ska ske enligt kursens planering.
  • Den fungerande datormiljön behöver nu bli en utvecklingsmiljö, se detta dokument
  • Aktivt deltagande vid kursens föreläsningar, verktygsgenomgångar och lärarledd laboration förutsätts.
  • Daglig närvaro 8-17 förväntas.

Översikt av projektet

Webbplatsen består av två huvuddelar: ett datalager och ett presentationslager. Datalagret har till uppgift att hantera all data i systemet. I detta fall lagras datan i JSON-format på en textfil i filsystemet. Datalagret tillhandahåller sedan ett API (gränssnitt, dvs. en uppsättning väldefinierade funktioner) som presentationslagret kan använda för att få information från datafilen. Presentationslagret, i sin tur, har till uppgift att visa den information som en användare har efterfrågat på ett snyggt sätt med hjälp av datalagret. Detta görs genom att presentationslagret genererar den HTML-kod som ska skickas till användarens webbläsare.

Krav på projektet

Här följer kraven på projektet indelat i krav på datalagret, krav på presentationslagret och almänna (icke-funktionella) krav.

Krav på datalagret

Datalagret specificeras genom ett så kallat Application Programming Interface (API). I praktiken ska ni skapa en modul med pythonkod som till pricka följer denna specifikation. Förutom att er modul följer denna specifikation så finns också följande övergripande krav på systemet som direkt relaterar till datalagret:
  1. Systemet ska kunna hantera följande information om ett projekt: projektnamn, projekt-id-nummer, startdatum, slutdatum, kurskod, kursnamn, kurspoäng, använda tekniker, kort beskrivning, lång beskrivning, liten och stor bild, gruppstorlek och en länk projektsida. Projektnamn och projekt-id är obligatoriska, övriga fält kan lämnas tomma.
  2. Projekt-id ska vara ett unikt heltal för varje projekt.
  3. Varje projekt kan ha en sekvens av tekniker angivna.
  4. Sökning ska kunna göras på godtycklig projektinformation. Sökning kan ske på flera fält samtidigt. Sortering ska kunna göras på ett fält, i stigande och fallande träffordning. Man ska kunna filtrera utifrån använda tekniker i sökningen. Observera att allt ska fungera tillsammans, så att man kan söka på ett sökord, filtrera till vissa tekniker och sortera söklistan i en viss ordning samtidigt.
  5. Data lagras i JavaScript Object Notation (JSON) i filen data.json. Filen ska lagras med UTF-8 teckenkodning.
  6. Data läggs till i JSON-filer manuellt (eller av andra verktyg) i systemet.
  7. Förändring av data.json ska slå igenom direkt i systemet utan omstart av webbserver.
  8. (Frivilligt) Utvidga systemet med en administrativ sida för redigering av data.

Krav på presentationslagret

Presentationslagret (portfolion) är en webbplats med en statisk och tre dynamiskt skapade webbsidor, enligt följande lista:
  • index: statisk eller dynamisk förstasida
  • list: dynamisk sida som listar projekten
  • project: dynamisk sida som visar information för ett specifikt projekt
  • techniques: dynamisk sida som visar en sammaställning över de tekniker som används i projekten
Utöver att dessa sidor finns så ska följande konkreta krav uppfyllas som direkt relaterar till presentationslagret:
  1. Förstasida med bilder. URL: /
  2. Söksida som visar en lista över projekt med kort information om varje projekt och som gör det möjligt att sortera dessa, samt söka bland dem genom ett formulär på sidan. URL: /list
  3. Projektsida som visar fullständig information om ett projekt. GET- variabel för att ange projekt-id: id URL: /project/id - där id är projektets nummer
  4. Tekniksida som visar information om alla projekt utifrån använda tekniker. URL: /techniques
  5. För varje projekt ska en liten bild visas på söksidan och en stor på projektsidan. Det behöver inte vara samma bild. Bildtext för varje bild skall finnas.
  6. Vid fel ska systemet skriva ut informativa meddelanden till användaren på en lämplig nivå för en slutanvändare. (Det vill säga, systemet ska fånga och omvandla felkoder och statuskoder till begripliga meddelanden.)
  7. När en användare försöker visa ett projekt som inte finns, ska korrekt statuskod returneras (dvs. 404).

Icke-funktionella krav

  1. Pythonskriptens utdata ska formateras med en HTML-mall via Jinja2.
  2. Presentationen ska implementeras med hjälp av HTML5 och CSS3.
  3. Versionshantering med Git ska användas.
  4. Hela systemet ska testas av tredje person som får utföra de huvudsakliga uppgifterna som portfoliosystemet är tänkt för. Genomförs under systemdemonstrationen.
  5. Källkoden ska kommenteras på engelska för varje modul, funktion och för varje global variabel. Ej självförklarande kodavsnitt ska även kom- menteras löpande i koden.
  6. Alla namn på filer, moduler, funktioner och variabler ska vara på eng- elska.
  7. Systemet ska dokumenteras (se sepparata dokumentbeskrivningar i menyn)
  8. Katalogstrukturen ska se ut som följer:
    
    MyPortfolio /
        doc /
        static /
            images /
                *.png, *.jpg, *.gif
            style /
                *.css, *.png, *.jpg, *.gif
        templates /
            *.html, *.xml, *.json
        README
        data.json
        myFlaskProject.py
        *.py
      
  9. Viktigt: Katalogen style/ är till för CSS-filer och bilder som refereras från dessa. Bilder som hör till innehållet/projekten läggs i images/

Exempel från tidigare år

Så här kan det exempelvis se ut när ni är klara:


Sidansvarig: Pontus Haglund
Senast uppdaterad: 2023-10-10