Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Toevoegen van /api/gebruikers/me #114

Merged
merged 3 commits into from
Apr 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 44 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,45 @@
# UGent-4
<<<<<<< HEAD
=======

>>>>>>> 43302259fa87109dcb81dc91d568e658a9aa7358

# Wiki

- Raadpleeg de wiki voor uitgebreidere informatie, waaronder Use-Cases en API-Documentatie.

# Frontend

- WIP

# Backend

## Hoe runnen?

### Benodigdheden:
- .env bestand: In deze folder moet je lokaal een .env bestand zetten. Het .env bestand bevat geheime variabelen en codes die je niet in deze repo zal vinden. Vraag het aan iemand van het backend team als je de file wilt krijgen.

- postgres databank: Je zal zelf een postgres databank moeten opzetten. De naam van de databank, user, paswoord, ... Kan je vinden in het .env bestand.

- virtual environment: Je zal ook een virtual environment moeten maken. Doe dit op linux met het commando: `python -m venv /path/to/new/virtual/environment`.
Vervolgens activeer je de virtual environment als volgt: `source my_env/bin/activate`.
Tenslotte installeer je alle dependencies: `pip install -r requirements.txt`.

### de api lokaal runnen:
Om de api lokaal te runnen activeer je eerst de virtual environment. Daarna voer je volgende commando's uit in de UGent-4 directory:
```sh
./manage.py makemigrations api
./manage.py migrate api
./manage.py runserver
```
Je kan dan surfen naar http://127.0.0.1:8000/ om de api te zien.

## Hoe testen?

**OPMERKING**: Al de volgende commando's moeten uitgevoerd worden terwijl de virtual environment geactiveerd is.

Je checkt zowel de linting als de tests.

### Linting:
De volgende commando's run je van de ***api*** directory:
Run het commando `flake8 .`. De output vertelt je waar de codestijl fout is. Om snel deze stijlfouten op te lossen kan je `black .`runnen.


### Testing:
Run het commando `./manage.py test` in de ***UGENT-4*** directory.
13 changes: 6 additions & 7 deletions api/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,16 @@

class AuthenticationUserMiddleware:
"""
Middleware die anonieme gebruikers omleidt naar de inlogpagina.
Deze middleware controleert of de gebruiker anoniem is en of het huidige pad niet de inlogpagina is.
Als dit het geval is, wordt de gebruiker omgeleid naar de inlogpagina die is geconfigureerd in de instellingen.
Middleware voor authenticatie van gebruikers en het aanmaken van gebruikersindeling.

Args:
get_response (function): De functie die wordt aangeroepen om het verzoek te verwerken.
get_response (callable): De volgende middleware in de keten.

Returns:
HttpResponse: Een HTTP-omleiding naar de inlogpagina als de gebruiker anoniem is
en het huidige pad niet de inlogpagina is.
Anders wordt het verzoek verder verwerkt door de volgende middleware of de weergavefunctie.
HttpResponse: Een HTTP-response-object.

Raises:
Redirect: Redirect naar de inlog-URL als er geen autorisatiegegevens zijn.
"""

def __init__(self, get_response):
Expand Down
3 changes: 2 additions & 1 deletion api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from rest_framework.urlpatterns import format_suffix_patterns

from .views.views import home
from .views.gebruiker import gebruiker_list, gebruiker_detail
from .views.gebruiker import gebruiker_list, gebruiker_detail, gebruiker_detail_me
from .views.vak import vak_list, vak_detail
from .views.project import project_list, project_detail
from .views.indiening import indiening_list, indiening_detail
Expand All @@ -34,6 +34,7 @@
path("api/", home, name="home"),
path("api/gebruikers/", gebruiker_list, name="gebruiker_list"),
path("api/gebruikers/<int:id>/", gebruiker_detail, name="gebruiker_detail"),
path("api/gebruikers/me/", gebruiker_detail_me, name="gebruiker_detail_me"),
path("api/vakken/", vak_list, name="vak_list"),
path("api/vakken/<int:id>/", vak_detail, name="vak_detail"),
path("api/projecten/", project_list, name="project_list"),
Expand Down
17 changes: 17 additions & 0 deletions api/views/gebruiker.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,20 @@ def gebruiker_detail(request, id):
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
return Response(status=status.HTTP_403_FORBIDDEN)


@api_view(["GET"])
def gebruiker_detail_me(request):
"""
Een view om de gegevens van de huidige gebruiker op te halen (GET).

Returns:
Response: Gegevens van de gebruiker of een foutmelding als de gebruiker niet bestaat.
"""
try:
gebruiker = Gebruiker.objects.get(pk=request.user.id)
except Gebruiker.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)

serializer = GebruikerSerializer(gebruiker)
return Response(serializer.data)
Loading