Skip to content
Open
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
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
__pycache__/
*.py[cod]
*$py.class

back/back/__pycache__/
# C extensions
*.so

# Distribution / packaging
.Python
build/
Expand Down
Binary file modified back/back/__pycache__/settings.cpython-310.pyc
Binary file not shown.
Binary file modified back/back/__pycache__/urls.cpython-310.pyc
Binary file not shown.
6 changes: 5 additions & 1 deletion back/back/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
'django.contrib.staticfiles',
'fantazoo.apps.FantazooConfig',
'rest_framework',
'corsheaders',
]

MIDDLEWARE = [
Expand All @@ -49,6 +50,7 @@
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware'
]

ROOT_URLCONF = 'back.urls'
Expand Down Expand Up @@ -80,7 +82,7 @@
'ENGINE': 'djongo',
# 'ENFORCE_SCHEMA': False,
'CLIENT': {
'host': 'mongodb+srv://LucieB:Vedterg55@cluster0.3ipdlcg.mongodb.net/?retryWrites=true&w=majority',
'host': 'mongodb+srv://lionel:lionel@cluster0.nxldmip.mongodb.net/?retryWrites=true&w=majority',
'name': 'fantazoo',
'authMechanism': 'SCRAM-SHA-1',
}
Expand Down Expand Up @@ -128,3 +130,5 @@
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

CORS_ORIGIN_ALLOW_ALL = True
19 changes: 15 additions & 4 deletions back/back/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,23 @@
"""
from django.contrib import admin
from django.urls import path,include
from fantazoo.views import AnimalAPIView

""" router=routers.SimpleRouter()
router.register('animals',AnimalAPIView) """
from fantazoo.views import AnimalViewSet,ShoppingCartViewSet,OrderViewSet,OrderItemViewSet,UserViewSet
from fantazoo.views import AnimalAPIView,UserAPIView,OrderAPIView,OrderItemAPIView
from rest_framework import routers

router=routers.SimpleRouter()
router.register('animals',AnimalViewSet,basename='animals')
router.register('users',UserViewSet,basename='users')
router.register('orders',OrderViewSet,basename='orders')
router.register('orderitems',OrderItemViewSet,basename='orderitems')
router.register('shoppingcarts',ShoppingCartViewSet,basename='shoppingcarts')


urlpatterns = [
path('admin/', admin.site.urls),
path('api/',include(router.urls)),
path('api-auth/', include('rest_framework.urls')),
path('api/animals/',AnimalAPIView.as_view()),


]
Binary file modified back/fantazoo/__pycache__/models.cpython-310.pyc
Binary file not shown.
25 changes: 0 additions & 25 deletions back/fantazoo/migrations/0001_initial.py

This file was deleted.

Empty file.
Binary file not shown.
Binary file not shown.
66 changes: 60 additions & 6 deletions back/fantazoo/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,72 @@

# Create your models here.

class User(models.Model):
password = models.CharField(max_length=50)
email = models.CharField(max_length=50)
firstname = models.CharField(max_length=50)
lastname = models.CharField(max_length=50)
phone_number = models.CharField(max_length=10)
address = models.CharField(max_length=50)
is_admin = models.BooleanField(default=False)




class Animal(models.Model):

SEXE =[('M','Mâle'),('F','Femelle'),('ND','Non défini')]
SPECIES=[('Phoenix','Phoenix'),('Dragon','Dragon'),('Unicorn','Unicorn'),('Griffin','Griffin'),('Hippogriff','Hippogriff'),('Pegasus','Pegasus'),('Chimera','Chimera'),('Basilisk','Basilisk'),('Gorgon','Gorgon'),('ND','Non défini')]
STATUT=[('A VENDRE','A VENDRE'),('VENDU','VENDU'),('EN STOCK','EN STOCK')]
TYPE=[('REPTILE','REPTILE'),('MAMMIFERE','MAMMIFERE'),('POISSON','POISSON'),('INSECTE','INSECTE'),('ARACHNIDE','ARACHNIDE'),('ND','Non défini')]
DIET=[('OMNIVORE','OMNIVORE'),('HERBIVORE','HERBIVORE'),('CARNIVORE','CARNIVORE'),('ND','Non défini')]
animal_name = models.CharField(max_length=50,default='ND')
description = models.CharField(max_length=200)
price=models.FloatField()
Animalstatus=models.CharField(max_length=20,default='EN STOCK',choices=STATUT)
species=models.CharField(max_length=20,choices=SPECIES,default='ND')
price=models.FloatField(null=False, default=0)
animal_status=models.CharField(max_length=20,default='EN STOCK',choices=STATUT)
species=models.CharField(max_length=200)
sexe=models.CharField(max_length=20,choices=SEXE,default='ND')
age = models.IntegerField()
Animaltype = models.CharField(max_length=50)
animal_type = models.CharField(max_length=50,choices=TYPE,default='ND')
image = models.CharField(max_length=200)
diet = models.CharField(max_length=200)
diet = models.CharField(max_length=200,choices=DIET,default='ND')

class ShoppingCart(models.Model):
userID = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Animal, on_delete=models.CASCADE)
product_quantity = models.IntegerField(null=False,blank=False)
created_at = models.DateTimeField(auto_now_add=True)
total = models.FloatField()

def get_price(self):
return self.product.price * self.product_quantity

def __str__(self):
return self.product.description


class Order(models.Model):
userID = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Animal, on_delete=models.CASCADE)
product_quantity = models.IntegerField()
total_price = models.FloatField(null=False,blank=False)
created_at = models.DateTimeField(auto_now_add=True)

def get_order_address(self):
return self.userID.address


def __str__(self):
return self.product.description

class OrderItem(models.Model):
order=models.ForeignKey(Order,on_delete=models.CASCADE)
product=models.ForeignKey(Animal,on_delete=models.CASCADE)
price = models.FloatField(null=False,default=0.0)
quantity = models.IntegerField(null=False,default=0)

def get_price_item(self):
return self.product.price


def __str__(self):
return '{}{}'.format(self.order.id)
28 changes: 24 additions & 4 deletions back/fantazoo/serializers.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,34 @@
from rest_framework.serializers import ModelSerializer
from .models import Animal
from .models import Animal,User,ShoppingCart,Order,OrderItem



class UserSerializer(ModelSerializer):
class Meta:
model = User
fields = '__all__'
class OrderItemSerializer(ModelSerializer):
class Meta:
model = OrderItem
fields = '__all__'
class OrderSerializer(ModelSerializer):
class Meta:
model = Order
fields = '__all__'

class ShoppingCartSerializer(ModelSerializer):
class Meta:
model = ShoppingCart
fields = '__all__'

class AnimalSerializer(ModelSerializer):
class Meta:
model = Animal
fields = '__all__'

def create(self, validated_data):
""" def create(self, validated_data):
validated_data['Animalstatus'] = 'EN STOCK'
instance= Animal.objects.create(**validated_data)
instance.save()
return instance
return instance """

72 changes: 63 additions & 9 deletions back/fantazoo/views.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,76 @@
from django.shortcuts import render
from .models import Animal
from .serializers import AnimalSerializer
from .models import Animal,User,ShoppingCart,Order,OrderItem
from .serializers import AnimalSerializer,UserSerializer,ShoppingCartSerializer,OrderSerializer,OrderItemSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet

# Create your views here.

class AnimalAPIView(APIView):
def get(self, *args,**kwargs):
data = Animal.objects.all()
serializer = AnimalSerializer(data, many=True)
return Response(serializer.data)
"""
def post(self, request):
serializer = AnimalSerializer(data=request.data)

class AnimalViewSet(ModelViewSet):
serializer_class = AnimalSerializer
def get_queryset(self):
return Animal.objects.all()
######## SHOPPING CART ########

###AJOUTER UN PRODUIT AU PANIER#####

class AddToCartAPIView(APIView):
def post(self, request, *args, **kwargs):
data = request.data
serializer = ShoppingCartSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
# Create your views here.
"""
return Response(serializer.data)
return Response(serializer.errors)

###AFFICHER LE PANIER#####


class ShoppingCartAPIView(APIView):
def get(self, *args,**kwargs):
data = ShoppingCart.objects.all()
serializer = ShoppingCartSerializer(data, many=True)
return Response(serializer.data)
class ShoppingCartViewSet(ModelViewSet):
serializer_class = ShoppingCartSerializer
def get_queryset(self):
return ShoppingCart.objects.all()
class UserAPIView(APIView):
def get(self, *args,**kwargs):
data = User.objects.all()
serializer = UserSerializer(data, many=True)
return Response(serializer.data)

class UserViewSet(ModelViewSet):
serializer_class = UserSerializer
def get_queryset(self):
return User.objects.all()

class OrderAPIView(APIView):
def get(self, *args,**kwargs):
data = Order.objects.all()
serializer = OrderSerializer(data, many=True)
return Response(serializer.data)

class OrderViewSet(ModelViewSet):
serializer_class = OrderSerializer
def get_queryset(self):
return Order.objects.all()

class OrderItemAPIView(APIView):
def get(self, *args,**kwargs):
data = OrderItem.objects.all()
serializer = OrderItemSerializer(data, many=True)
return Response(serializer.data)

class OrderItemViewSet(ModelViewSet):
serializer_class = OrderItemSerializer
def get_queryset(self):
return OrderItem.objects.all()
1 change: 1 addition & 0 deletions back/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
asgiref==3.5.2
Django==4.1.3
django-cors-headers==3.13.0
djangorestframework==3.14.0
djongo==1.3.6
dnspython==2.2.1
Expand Down
19 changes: 18 additions & 1 deletion docu.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
Lancement de l'environnement


Cours

Utilisation de l’environnement virtuel et commandes associées :
1. Création de l’environnement virtuel: py –m venv path/venv
2. Utilisation/Activation du venv: source path/venv/Scripts/activate
3. Installation de librairie: pip install <lib_name>
4. Installation Django: pip install Django
5. Copie des librairies dans un fichier: pip freeze> requirements.txt
6. Installation des librairies depuis un fichier: pip install -r requirements.txt
7. Fermeture/Désactivation du venv: deactivate

Se placer dans le répertoire du projet
source path/venv/Scripts/activate
source path/venv/Scripts/activate

python3 manage.py makemigrations fantazoo
python3 manage.py migrate

python3 manage.py runserver fantazoo
10 changes: 9 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,17 @@
asgiref==3.5.2
Django==4.1.3
djangorestframework==3.14.0
djongo==1.3.6
dnspython==2.2.1
et-xmlfile==1.1.0
numpy==1.23.4
openpyxl==3.0.10
pandas==1.5.0
pykerberos==1.2.4
pymongo==3.12.3
python-dateutil==2.8.2
python-snappy==0.6.1
pytz==2022.4
six==1.16.0
sqlparse==0.2.4
tzdata==2022.6
#winkerberos==0.9.0