Compare commits
7 Commits
638880ca32
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| df8f5a6f45 | |||
| 657259756f | |||
| 076bce9712 | |||
| 31b4cbd81e | |||
| f14e945bf2 | |||
| 97b8747f36 | |||
| 7c2e98f060 |
@@ -91,20 +91,16 @@ DATABASES = {
|
|||||||
AUTH_PASSWORD_VALIDATORS = [
|
AUTH_PASSWORD_VALIDATORS = [
|
||||||
{
|
{
|
||||||
'NAME':
|
'NAME':
|
||||||
'django.contrib.auth.\
|
'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
||||||
password_validation.UserAttributeSimilarityValidator',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'NAME': 'django.contrib.auth.\
|
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
||||||
password_validation.MinimumLengthValidator',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'NAME': 'django.contrib.auth.\
|
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
||||||
password_validation.CommonPasswordValidator',
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'NAME': 'django.contrib.auth.\
|
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
||||||
password_validation.NumericPasswordValidator',
|
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import reviews.views
|
|||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('home/', reviews.views.home, name='home'),
|
|
||||||
path('', LoginView.as_view(
|
path('', LoginView.as_view(
|
||||||
template_name='authentication/login.html',
|
template_name='authentication/login.html',
|
||||||
redirect_authenticated_user=True), name='login'),
|
redirect_authenticated_user=True), name='login'),
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
<div class="align-self-center">
|
<div class="align-self-center">
|
||||||
<h2>Inscrivez-vous</h2>
|
<h2>Inscrivez-vous</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="justify-content-end">
|
<div class="justify-content-end">
|
||||||
<a href="{% url 'register' %}" type="button" class="btn btn-primary">S'inscrire</a>
|
<a href="{% url 'register' %}" type="button" class="btn btn-primary">S'inscrire</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -23,12 +22,14 @@
|
|||||||
<h2>Connectez-vous</h2>
|
<h2>Connectez-vous</h2>
|
||||||
<form method='post'>
|
<form method='post'>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="form-group p-3">
|
<div class="form-group" aria-describedby="usernameHelp">
|
||||||
{{ form.username }}
|
{{ form.username }}
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group p-3">
|
<small id="usernameHelp" class="form-text text-muted">Saisissez ici votre nom d'utilisateur</small>
|
||||||
|
<div class="form-group" aria-describedby="passwordHelp">
|
||||||
{{ form.password }}
|
{{ form.password }}
|
||||||
</div>
|
</div>
|
||||||
|
<small id="passwordHelp" class="form-text text-muted">Saisissez ici votre mot de passe</small>
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<button type="submit" class="btn btn-primary">Se connecter</button>
|
<button type="submit" class="btn btn-primary">Se connecter</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<form method='post'>
|
<form method='post'>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.as_p }}
|
{{ form }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-8 d-flex justify-content-end">
|
<div class="col-8 d-flex justify-content-end">
|
||||||
|
|||||||
@@ -5,6 +5,11 @@ from authentication.forms import RegisterForm
|
|||||||
|
|
||||||
|
|
||||||
def register_page(request):
|
def register_page(request):
|
||||||
|
"""
|
||||||
|
Create a User from the register form
|
||||||
|
:param: request (POST with RegisterForm data)
|
||||||
|
:return: write the User in DB
|
||||||
|
"""
|
||||||
form = RegisterForm()
|
form = RegisterForm()
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
form = RegisterForm(request.POST)
|
form = RegisterForm(request.POST)
|
||||||
|
|||||||
BIN
LITReview/media/uploads/spongeBob.jpg
Normal file
BIN
LITReview/media/uploads/spongeBob.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@@ -3,12 +3,19 @@ from . import models
|
|||||||
|
|
||||||
|
|
||||||
class TicketForm(forms.ModelForm):
|
class TicketForm(forms.ModelForm):
|
||||||
|
"""
|
||||||
|
Form from Ticket, select only 3 fields
|
||||||
|
"""
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Ticket
|
model = models.Ticket
|
||||||
fields = ['title', 'desc', 'image']
|
fields = ['title', 'desc', 'image']
|
||||||
|
|
||||||
|
|
||||||
class ReviewForm(forms.ModelForm):
|
class ReviewForm(forms.ModelForm):
|
||||||
|
"""
|
||||||
|
Form from Review
|
||||||
|
Make rating field a radio select from choices
|
||||||
|
"""
|
||||||
CHOICES = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5}
|
CHOICES = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5}
|
||||||
rating = forms.ChoiceField(widget=forms.RadioSelect, choices=CHOICES)
|
rating = forms.ChoiceField(widget=forms.RadioSelect, choices=CHOICES)
|
||||||
|
|
||||||
@@ -18,4 +25,7 @@ class ReviewForm(forms.ModelForm):
|
|||||||
|
|
||||||
|
|
||||||
class ToFollowForm(forms.Form):
|
class ToFollowForm(forms.Form):
|
||||||
|
"""
|
||||||
|
Form asking for a username
|
||||||
|
"""
|
||||||
user = forms.CharField(label="Nom d'utilisateur", max_length=50)
|
user = forms.CharField(label="Nom d'utilisateur", max_length=50)
|
||||||
|
|||||||
@@ -2,15 +2,18 @@
|
|||||||
{% load reviews_extras %}
|
{% load reviews_extras %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|
||||||
<div class="row">
|
<section>
|
||||||
|
<div class="row" id="atitle">
|
||||||
<div class="d-flex justify-content-center mt-5">
|
<div class="d-flex justify-content-center mt-5">
|
||||||
<h2> Bienvenue {{ request.user }}</h2>
|
<h2> Bienvenue {{ request.user }}</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
<div class="row d-flex justify-content-center mt-4 mb-3">
|
<div class="row d-flex justify-content-center mt-4 mb-3">
|
||||||
<div class="col-3 d-flex justify-content-center">
|
<div class="col-3 d-flex justify-content-center">
|
||||||
<a href="{% url 'ticket-add' %}" type="button" class="btn btn-primary">Demander une critique</a>
|
<a href="{% url 'ticket-add' %}" type="button" class="btn btn-primary">Demander une critique</a>
|
||||||
@@ -19,8 +22,10 @@
|
|||||||
<a href="{% url 'review-add' %}" type="button" class="btn btn-primary">Créer une critique</a>
|
<a href="{% url 'review-add' %}" type="button" class="btn btn-primary">Créer une critique</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<div class="row">
|
<section>
|
||||||
|
<div class="row" id="flux">
|
||||||
{% for post in posts %}
|
{% for post in posts %}
|
||||||
{% if post.content_type == 'TICKET' %}
|
{% if post.content_type == 'TICKET' %}
|
||||||
<div class="row border border-2 border-secondary-subtle my-3">
|
<div class="row border border-2 border-secondary-subtle my-3">
|
||||||
@@ -44,7 +49,9 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
{% extends 'base.html' %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="d-flex justify-content-center mt-5">
|
|
||||||
<h2> Bienvenue {{ request.user }}</h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row d-flex justify-content-center mt-4 mb-3">
|
|
||||||
<div class="col-3 d-flex justify-content-center">
|
|
||||||
<a href="{% url 'ticket-add' %}" type="button" class="btn btn-primary">Demander une critique</a>
|
|
||||||
</div>
|
|
||||||
<div class="col-3 d-flex justify-content-center">
|
|
||||||
<a href="{% url 'review-add' %}" type="button" class="btn btn-primary">Créer une critique</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
{% for ticket in tickets %}
|
|
||||||
{% include 'reviews/ticket_detail.html' %}
|
|
||||||
<div class="col-6 d-flex justify-content-end mb-2">
|
|
||||||
{% if not ticket.review %}
|
|
||||||
<div class="col-4 align-self-end">
|
|
||||||
<a href="{% url 'review-ticket' ticket.id %}" type="button" class="btn btn-primary">Créer une critique</a>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
||||||
@@ -1,14 +1,17 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
<section>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="d-flex justify-content-center mt-5">
|
<div class="d-flex justify-content-center mt-5">
|
||||||
<h2> Posts </h2>
|
<h2> Posts </h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
{% for ticket in tickets %}
|
{% for ticket in tickets %}
|
||||||
<div class="row border border-2 border-secondary-subtle my-3">
|
<div class="row border border-2 border-secondary-subtle my-3">
|
||||||
{% include 'reviews/ticket_detail.html' %}
|
{% include 'reviews/ticket_detail.html' %}
|
||||||
@@ -22,7 +25,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
{% for review in reviews %}
|
{% for review in reviews %}
|
||||||
<div class="row border border-2 border-secondary-subtle my-3">
|
<div class="row border border-2 border-secondary-subtle my-3">
|
||||||
{% include 'reviews/review_detail.html' %}
|
{% include 'reviews/review_detail.html' %}
|
||||||
@@ -36,7 +41,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row mt-3">
|
<div class="row mt-5">
|
||||||
<div class="col d-flex justify-content-center">
|
<div class="col d-flex justify-content-center">
|
||||||
<h2>Créer une critique</h2>
|
<h2>Créer une critique</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row border border-3 border-secondary-subtle mb-3 justify-content-center">
|
<section>
|
||||||
|
<div class="row border border-3 border-secondary-subtle justify-content-center mt-3 mb-1">
|
||||||
<h3> Livre/Article </h3>
|
<h3> Livre/Article </h3>
|
||||||
<div class="col-4 mb-2">
|
<div class="col-4 mb-2">
|
||||||
<form method="post" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
@@ -16,9 +17,11 @@
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
<div class="row border border-3 border-secondary-subtle justify-content-center">
|
<div class="row border border-3 border-secondary-subtle justify-content-center">
|
||||||
<h3>Critique</h3>
|
<h3>Critique</h3>
|
||||||
<div class="col-4 mb-2">
|
<div class="col-4 mb-4">
|
||||||
{% include 'reviews/review_form.html' %}
|
{% include 'reviews/review_form.html' %}
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<button type="submit" class="btn btn-primary"> Envoyer </button>
|
<button type="submit" class="btn btn-primary"> Envoyer </button>
|
||||||
@@ -26,6 +29,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container text-center" style="height: 100vh">
|
<div class="container text-center" style="height: 100vh">
|
||||||
<div class="row h-100 align-items-center">
|
<div class="row h-100 align-items-center">
|
||||||
<form method="post">
|
<form method="post">
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,25 @@
|
|||||||
{% load reviews_extras %}
|
{% load reviews_extras %}
|
||||||
|
|
||||||
<div class="row">
|
<main>
|
||||||
|
<section>
|
||||||
|
<div class="row" id="owner_date">
|
||||||
<div class="col-8 mb-4">
|
<div class="col-8 mb-4">
|
||||||
{% display_owner review.user %} publié une critique
|
{% display_owner review.user %} publié une critique
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-4 d-flex justify-content-end">
|
<div class="col-4 d-flex justify-content-end">
|
||||||
{{ review.time_created }}
|
{{ review.time_created }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
<div class="row d-flex justify-content-center">
|
<div class="row d-flex justify-content-center">
|
||||||
<span style="font-size: 22px" class="mb-3">{{ review.headline }} - {{ review.rating|rating_stars }}</span>
|
<span style="font-size: 22px" class="mb-3">
|
||||||
|
{{ review.headline }} - {{ review.rating|rating_stars }}
|
||||||
|
</span>
|
||||||
<p> {{ review.comment }} </p>
|
<p> {{ review.comment }} </p>
|
||||||
<div class="col-10 border border-2 border-secondary-subtle mb-3">
|
<div class="col-10 border border-2 border-secondary-subtle mb-3">
|
||||||
{% include 'reviews/ticket_detail.html' with ticket=review.ticket %}
|
{% include 'reviews/ticket_detail.html' with ticket=review.ticket %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
@@ -1,11 +1,23 @@
|
|||||||
|
<div class="form-group mb-4">
|
||||||
<label for='headline'>Titre:</label></br>
|
<label for='headline'>Titre:</label></br>
|
||||||
<div class="d-flex justify-content-center mb-4">{{ review_form.headline }}</div>
|
<div class="d-flex justify-content-center" aria-describedby="titleHelp">
|
||||||
|
{{ review_form.headline }}
|
||||||
|
</div>
|
||||||
|
<small id="titleHelp" class="form-text text-muted">Saisissez le titre de votre critique</small>
|
||||||
|
</div>
|
||||||
|
<div class="form-group mb-4">
|
||||||
<label for='rating'>Note: </label>
|
<label for='rating'>Note: </label>
|
||||||
<div class=" d-flex justify-content-around mb-4">
|
<div class=" d-flex justify-content-around" aria-describedby="ratingHelp">
|
||||||
{% for choice in review_form.rating %}
|
{% for choice in review_form.rating %}
|
||||||
<span>{{ choice }}</span>
|
<span>{{ choice }}</span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
<small id="ratingHelp" class="form-text text-muted">Sélectionnez une notre entre 0 et 5</small>
|
||||||
|
</div>
|
||||||
|
<div class="form-group mb-4">
|
||||||
<label for="comment">Commentaire: </label>
|
<label for="comment">Commentaire: </label>
|
||||||
<div class="d-flex justify-content-center mb-4">{{ review_form.comment }}</div>
|
<div class="d-flex justify-content-center" aria-describedby="commentHelp">
|
||||||
|
{{ review_form.comment }}
|
||||||
|
</div>
|
||||||
|
<small id="commentHelp" class="form-text text-muted">Saisissez le corps de votre commentaire</small>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row mt-3">
|
<div class="row mt-3">
|
||||||
<div class="col d-flex justify-content-center">
|
<div class="col d-flex justify-content-center">
|
||||||
<h2>Créer une critique</h2>
|
<h2>Créer une critique</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<section>
|
||||||
<div class="row border border-3 border-secondary-subtle">
|
<div class="row border border-3 border-secondary-subtle">
|
||||||
<p>Vous êtes en train de répondre à </p>
|
<p>Vous êtes en train de répondre à </p>
|
||||||
<div class="col d-flex justify-content-center mb-2">
|
<div class="col d-flex justify-content-center mb-2">
|
||||||
@@ -16,20 +17,21 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
<div class="row border border-3 border-secondary-subtle">
|
<div class="row border border-3 border-secondary-subtle">
|
||||||
<h3>Critique</h3>
|
<h3>Critique</h3>
|
||||||
<div class="d-flex justify-content-center mb-2">
|
<div class="d-flex justify-content-center mb-2">
|
||||||
<form method="post" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% include 'reviews/review_form.html' %}
|
{% include 'reviews/review_form.html' %}
|
||||||
|
|
||||||
<div class="d-flex justify-content-end">
|
<div class="d-flex justify-content-end">
|
||||||
<button type="submit" class="btn btn-primary"> Envoyer </button>
|
<button type="submit" class="btn btn-primary"> Envoyer </button>
|
||||||
</div>
|
</div>
|
||||||
<form>
|
<form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -2,30 +2,27 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
<main>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row my-4">
|
<div class="row mt-5">
|
||||||
<div class="d-flex justify-content-center">
|
<div class="col d-flex justify-content-center">
|
||||||
<h2>Modifier votre critique</h2>
|
<h2>Modifier votre critique</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<section>
|
||||||
<div class="row border border-3">
|
<div class="row border border-3 mt-3 mb-1">
|
||||||
<p>Vous êtes en train de poster en réponse à</p>
|
<h3>Vous êtes en train de poster en réponse à</h3>
|
||||||
|
|
||||||
<div class="row d-flex justify-content-center">
|
<div class="row d-flex justify-content-center">
|
||||||
<div class="col-10 border border-2 border-secondary-subtle mb-3">
|
<div class="col-10 border border-2 border-secondary-subtle mb-3">
|
||||||
{% include 'reviews/ticket_detail.html' with ticket=review.ticket %}
|
{% include 'reviews/ticket_detail.html' with ticket=review.ticket %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
<div class="row border border-3 p-2">
|
<section>
|
||||||
<div class="col-3">
|
<div class="row border border-3 border-secondary-subtle justify-content-center mb-5 pb-5">
|
||||||
<p>Critique</p>
|
<h3>Critique</h3>
|
||||||
</div>
|
<div class="col-4 mb-4">
|
||||||
|
|
||||||
<div class="d-flex justify-content-center">
|
|
||||||
<div class="col-4 mb-2">
|
|
||||||
<form method="post" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% include 'reviews/review_form.html' %}
|
{% include 'reviews/review_form.html' %}
|
||||||
@@ -35,9 +32,9 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
</div>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
<main>
|
||||||
<div class="container text-center">
|
<div class="container text-center">
|
||||||
|
<section>
|
||||||
<div class="row d-flex justify-content-center">
|
<div class="row d-flex justify-content-center">
|
||||||
<div class="d-flex justify-content-center my-5">
|
<div class="d-flex justify-content-center my-5">
|
||||||
<h2> Suivre d'autres utilisateurs </h2>
|
<h2> Suivre d'autres utilisateurs </h2>
|
||||||
@@ -10,9 +12,10 @@
|
|||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<form method="post">
|
<form method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="form-group">
|
<div class="form-group " aria-describedby="followUserHelp">
|
||||||
{{ user_form }}
|
{{ user_form }}
|
||||||
</div>
|
</div>
|
||||||
|
<small id="followUserHelp" class="form-text text-muted">Saisissez le nom d'utilisateur à suivre</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<button type="submit" class="btn btn-primary">Envoyer</button>
|
<button type="submit" class="btn btn-primary">Envoyer</button>
|
||||||
@@ -20,8 +23,9 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
<div class="row d-flex justify-content-end">
|
<div class="row d-flex justify-content-end">
|
||||||
<div class="d-flex justify-content-center mt-5">
|
<div class="d-flex justify-content-center mt-5">
|
||||||
<h2> Abonnements </h2>
|
<h2> Abonnements </h2>
|
||||||
@@ -37,7 +41,9 @@
|
|||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
<div class="row d-flex justify-content-center">
|
<div class="row d-flex justify-content-center">
|
||||||
<div class="d-flex justify-content-center mt-5">
|
<div class="d-flex justify-content-center mt-5">
|
||||||
<h2> Abonnés </h2>
|
<h2> Abonnés </h2>
|
||||||
@@ -49,7 +55,7 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,24 +1,28 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row d-flex justify-content-center">
|
<div class="row mt-5">
|
||||||
<div class="col-md-auto form-group mt-5">
|
<div class="col d-flex justify-content-center">
|
||||||
<h2> Créer un ticket </h2>
|
<h2> Créer un ticket </h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-center border border-3 border-secondary-subtle mt-5">
|
</div>
|
||||||
<div class="col-4 mt-5">
|
<section>
|
||||||
|
<div class="row border border-3 border-secondary-subtle justify-content-center mt-3">
|
||||||
|
<h3> Livre/Article </h3>
|
||||||
|
<div class="col-4 mb-4">
|
||||||
<form method="post" enctype="multipart/form-data">
|
<form method="post" enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ ticket_form.as_p }}
|
{% include 'reviews/ticket_form.html' %}
|
||||||
<div class="d-flex justify-content-end mb-4">
|
<div class="d-flex justify-content-end">
|
||||||
<button type="submit" class="btn btn-primary"> Envoyer </button>
|
<button type="submit" class="btn btn-primary"> Envoyer </button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container text-center" style="height: 100vh">
|
<div class="container text-center" style="height: 100vh">
|
||||||
<div class="row h-100 align-items-center">
|
<div class="row h-100 align-items-center">
|
||||||
<form method="post">
|
<form method="post">
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{% load reviews_extras %}
|
{% load reviews_extras %}
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<section>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-8 mb-4">
|
<div class="col-8 mb-4">
|
||||||
{% display_owner ticket.user %} publié une demande
|
{% display_owner ticket.user %} publié une demande
|
||||||
@@ -8,10 +10,12 @@
|
|||||||
{{ ticket.time_created }}
|
{{ ticket.time_created }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
<p><strong> {{ ticket.title }} </strong></p>
|
<p><strong> {{ ticket.title }} </strong></p>
|
||||||
<p> {{ ticket.desc }} </p>
|
<p> {{ ticket.desc }} </p>
|
||||||
|
|
||||||
<div class="col-3 mb-2">
|
<div class="col-3 mb-2">
|
||||||
<img src="{{ ticket.image.url }}" class="img" alt="Couverture de {{ ticket.title }}">
|
<img src="{{ ticket.image.url }}" class="img" alt="Couverture de {{ ticket.title }}">
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
@@ -1,6 +1,21 @@
|
|||||||
|
<div class="form-group mb-4">
|
||||||
<label for='title'> Titre: </label>
|
<label for='title'> Titre: </label>
|
||||||
<div class="d-flex justify-content-center mb-4">{{ ticket_form.title }}</div>
|
<div class="d-flex justify-content-center" aria-describedby="titleHelp">
|
||||||
|
{{ ticket_form.title }}
|
||||||
|
</div>
|
||||||
|
<small id="titleHelp" class="form-text text-muted">Saisissez le titre de votre demande</small>
|
||||||
|
</div>
|
||||||
|
<div class="form-group mb-4">
|
||||||
<label for='desc'>Description: </label>
|
<label for='desc'>Description: </label>
|
||||||
<div class="d-flex justify-content-center mb-4">{{ ticket_form.desc }}</div>
|
<div class="d-flex justify-content-center" aria-describedby="descriptionHelp">
|
||||||
|
{{ ticket_form.desc }}
|
||||||
|
</div>
|
||||||
|
<small id="descriptionHelp" class="form-text text-muted">Saisissez le contenu de votre demande</small>
|
||||||
|
</div>
|
||||||
|
<div class="form-group mb-4">
|
||||||
<label for='image'>Image: </label>
|
<label for='image'>Image: </label>
|
||||||
<div class="d-flex justify-content-center mb-4">{{ ticket_form.image }}</div>
|
<div class="d-flex justify-content-center" aria-describedby="imageHelp">
|
||||||
|
{{ ticket_form.image }}
|
||||||
|
</div>
|
||||||
|
<small id="imageHelp" class="form-text text-muted">Sélectionnez une image à joindre (couverture de livre)</small>
|
||||||
|
</div>
|
||||||
|
|||||||
@@ -1,16 +1,30 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row d-flex align-items-center">
|
<div class="row mt-5">
|
||||||
<h2> Modifier la demande {{ ticket.title }}</h2>
|
<div class="col d-flex justify-content-center">
|
||||||
|
<h2> Modifier la demande "{{ ticket.title }}"</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
</div>
|
||||||
|
<section>
|
||||||
|
<div class="row border border-3 border-secondary-subtle justify-content-center mt-3">
|
||||||
|
<h3> Livre/Article </h3>
|
||||||
|
<div class="col-4 mb-4">
|
||||||
|
<form method="post" enctype="multipart/form-data">
|
||||||
|
{% csrf_token %}
|
||||||
{% include 'reviews/ticket_form.html' %}
|
{% include 'reviews/ticket_form.html' %}
|
||||||
|
<div class="d-flex justify-content-end">
|
||||||
|
<button type="submit" class="btn btn-primary"> Envoyer </button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{% extends 'base.html' %}
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<main>
|
||||||
<div class="container text-center" style="height: 100vh">
|
<div class="container text-center" style="height: 100vh">
|
||||||
<div class="row h-100 align-items-center">
|
<div class="row h-100 align-items-center">
|
||||||
<form method="post">
|
<form method="post">
|
||||||
@@ -11,4 +11,5 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -7,16 +7,14 @@ from reviews.forms import TicketForm, ReviewForm, ToFollowForm
|
|||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
|
||||||
def home(request):
|
|
||||||
tickets = Ticket.objects.all()
|
|
||||||
return render(request,
|
|
||||||
'reviews/home.html',
|
|
||||||
{'tickets': tickets})
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def flux(request):
|
def flux(request):
|
||||||
|
"""
|
||||||
|
Display the user's home page
|
||||||
|
Get tickets & reviews of followed users, sort latest first
|
||||||
|
:param: request
|
||||||
|
:return: queryset of sorted tickets and reviews
|
||||||
|
"""
|
||||||
followed = UserFollows.objects.filter(user=request.user)
|
followed = UserFollows.objects.filter(user=request.user)
|
||||||
users_followed = []
|
users_followed = []
|
||||||
for userf in followed:
|
for userf in followed:
|
||||||
@@ -36,6 +34,12 @@ def flux(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def posts(request):
|
def posts(request):
|
||||||
|
"""
|
||||||
|
Get list of tickets and reviews of current user
|
||||||
|
:param: request
|
||||||
|
:return: queryset of tickets and reviews
|
||||||
|
"""
|
||||||
|
|
||||||
tickets = Ticket.objects.filter(user=request.user)
|
tickets = Ticket.objects.filter(user=request.user)
|
||||||
reviews = Review.objects.filter(user=request.user)
|
reviews = Review.objects.filter(user=request.user)
|
||||||
return render(request,
|
return render(request,
|
||||||
@@ -45,6 +49,11 @@ def posts(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def ticket(request, ticket_id):
|
def ticket(request, ticket_id):
|
||||||
|
"""
|
||||||
|
Get detail of a ticket
|
||||||
|
:param: request, Ticket id
|
||||||
|
:return: object Ticket
|
||||||
|
"""
|
||||||
ticket = Ticket.objects.get(id=ticket_id)
|
ticket = Ticket.objects.get(id=ticket_id)
|
||||||
return render(request,
|
return render(request,
|
||||||
'reviews/ticket.html',
|
'reviews/ticket.html',
|
||||||
@@ -53,6 +62,11 @@ def ticket(request, ticket_id):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def create_ticket(request):
|
def create_ticket(request):
|
||||||
|
"""
|
||||||
|
Send form, retrieve user's data, create and write object Ticket
|
||||||
|
:param: request (POST)
|
||||||
|
:return: form, write Ticket in DB
|
||||||
|
"""
|
||||||
tickets = Ticket.objects.all()
|
tickets = Ticket.objects.all()
|
||||||
ticket_form = TicketForm()
|
ticket_form = TicketForm()
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@@ -68,8 +82,12 @@ def create_ticket(request):
|
|||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('review.change_ticket', raise_exception=True)
|
|
||||||
def update_ticket(request, ticket_id):
|
def update_ticket(request, ticket_id):
|
||||||
|
"""
|
||||||
|
Get new data for a given Ticket id and save changes
|
||||||
|
:param: request, Ticket id
|
||||||
|
:return: form, write Ticket in DB
|
||||||
|
"""
|
||||||
ticket = Ticket.objects.get(id=ticket_id)
|
ticket = Ticket.objects.get(id=ticket_id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
ticket_form = TicketForm(request.POST, instance=ticket)
|
ticket_form = TicketForm(request.POST, instance=ticket)
|
||||||
@@ -81,12 +99,16 @@ def update_ticket(request, ticket_id):
|
|||||||
|
|
||||||
return render(request,
|
return render(request,
|
||||||
'reviews/ticket_update.html',
|
'reviews/ticket_update.html',
|
||||||
{'ticket_form': ticket_form})
|
{'ticket_form': ticket_form, 'ticket': ticket})
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@permission_required('review.delete_ticket', raise_exception=True)
|
|
||||||
def delete_ticket(request, ticket_id):
|
def delete_ticket(request, ticket_id):
|
||||||
|
"""
|
||||||
|
Delete object from DB for a given Ticket
|
||||||
|
:param: request, Ticket id
|
||||||
|
:return: delete Ticket from DB
|
||||||
|
"""
|
||||||
ticket = Ticket.objects.get(id=ticket_id)
|
ticket = Ticket.objects.get(id=ticket_id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
ticket.delete()
|
ticket.delete()
|
||||||
@@ -99,6 +121,11 @@ def delete_ticket(request, ticket_id):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def review(request, review_id):
|
def review(request, review_id):
|
||||||
|
"""
|
||||||
|
Get detail of a Review
|
||||||
|
:param: request, Review id
|
||||||
|
:return: object Review
|
||||||
|
"""
|
||||||
review = Review.objects.get(id=review_id)
|
review = Review.objects.get(id=review_id)
|
||||||
return render(request,
|
return render(request,
|
||||||
'reviews/review.html',
|
'reviews/review.html',
|
||||||
@@ -107,6 +134,11 @@ def review(request, review_id):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def create_review(request):
|
def create_review(request):
|
||||||
|
"""
|
||||||
|
Create Ticket and related Review in one go
|
||||||
|
:param: request (POST)
|
||||||
|
:return: form, write Ticket and Review in DB
|
||||||
|
"""
|
||||||
ticket_form = TicketForm()
|
ticket_form = TicketForm()
|
||||||
review_form = ReviewForm()
|
review_form = ReviewForm()
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@@ -136,6 +168,11 @@ def create_review(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def ticket_review(request, ticket_id):
|
def ticket_review(request, ticket_id):
|
||||||
|
"""
|
||||||
|
Create a Review for a given Ticket
|
||||||
|
:param: request (POST), Ticket id
|
||||||
|
:return: form, write Review in DB
|
||||||
|
"""
|
||||||
ticket = Ticket.objects.get(id=ticket_id)
|
ticket = Ticket.objects.get(id=ticket_id)
|
||||||
review_form = ReviewForm()
|
review_form = ReviewForm()
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@@ -160,6 +197,11 @@ def ticket_review(request, ticket_id):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def update_review(request, review_id):
|
def update_review(request, review_id):
|
||||||
|
"""
|
||||||
|
Get new data for a given Review and save changes
|
||||||
|
:param: request, Review id
|
||||||
|
:return: form, write Review in DB
|
||||||
|
"""
|
||||||
review = Review.objects.get(id=review_id)
|
review = Review.objects.get(id=review_id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
print(request.POST)
|
print(request.POST)
|
||||||
@@ -177,6 +219,11 @@ def update_review(request, review_id):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def delete_review(request, review_id):
|
def delete_review(request, review_id):
|
||||||
|
"""
|
||||||
|
Delete object from DB for a given Review
|
||||||
|
:param: request, Review id
|
||||||
|
:return: delete Review from DB
|
||||||
|
"""
|
||||||
review = Review.objects.get(id=review_id)
|
review = Review.objects.get(id=review_id)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
review.delete()
|
review.delete()
|
||||||
@@ -188,18 +235,26 @@ def delete_review(request, review_id):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def subscribed(request):
|
def subscribed(request):
|
||||||
|
"""
|
||||||
|
Create UserFollows object for a given username in form
|
||||||
|
Create a list of followed_users for current user
|
||||||
|
:param: request (POST with given username)
|
||||||
|
:return: queryset of UserFollows following current user,
|
||||||
|
and a queryset of UserFollows followed by current user
|
||||||
|
"""
|
||||||
follows = UserFollows()
|
follows = UserFollows()
|
||||||
user_form = ToFollowForm()
|
user_form = ToFollowForm()
|
||||||
|
# list of UserFollows following current user
|
||||||
following = UserFollows.objects.filter(followed_user=request.user)
|
following = UserFollows.objects.filter(followed_user=request.user)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
user_form = ToFollowForm(request.POST)
|
user_form = ToFollowForm(request.POST)
|
||||||
if user_form.is_valid():
|
if user_form.is_valid():
|
||||||
user = user_form.cleaned_data["user"]
|
user = user_form.cleaned_data["user"]
|
||||||
user_followed = User.objects.filter(username=user)
|
follows.followed_user = User.objects.get(username=user)
|
||||||
follows.followed_user = user_followed[0]
|
|
||||||
follows.user = request.user
|
follows.user = request.user
|
||||||
follows.save()
|
follows.save()
|
||||||
return redirect('subscribed')
|
return redirect('subscribed')
|
||||||
|
# list of UserFollows followed by current user
|
||||||
followed = UserFollows.objects.filter(user=request.user)
|
followed = UserFollows.objects.filter(user=request.user)
|
||||||
context = {
|
context = {
|
||||||
'user_form': user_form,
|
'user_form': user_form,
|
||||||
@@ -212,6 +267,11 @@ def subscribed(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def unsubscribe(request, followed_user_id):
|
def unsubscribe(request, followed_user_id):
|
||||||
|
"""
|
||||||
|
Delete a UserFollows for a given followed_user
|
||||||
|
:param: request, User.id
|
||||||
|
:return: delete UserFollows from DB
|
||||||
|
"""
|
||||||
followed = UserFollows.objects.get(
|
followed = UserFollows.objects.get(
|
||||||
user=request.user,
|
user=request.user,
|
||||||
followed_user=followed_user_id)
|
followed_user=followed_user_id)
|
||||||
|
|||||||
@@ -26,7 +26,8 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
|
<footer>
|
||||||
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|||||||
19
README.md
19
README.md
@@ -20,12 +20,13 @@ packages : python 3.11, python3.11-venv, python3-pip, git
|
|||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
1. Create the virtual environment
|
1. Clone this repo and go in the project's directory
|
||||||
|
|
||||||
|
2. Create the virtual environment
|
||||||
```
|
```
|
||||||
python3.11 -m venv env
|
python3.11 -m venv env
|
||||||
source env/bin/activate
|
source env/bin/activate
|
||||||
```
|
```
|
||||||
2. clone this repo
|
|
||||||
|
|
||||||
3. install environment
|
3. install environment
|
||||||
```
|
```
|
||||||
@@ -33,14 +34,26 @@ pip install -r requirements.txt
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Execution
|
## Execution
|
||||||
|
|
||||||
|
1. Go in the Django project directory
|
||||||
```
|
```
|
||||||
cd LITReview
|
cd LITReview
|
||||||
|
```
|
||||||
|
2. Initialize the database
|
||||||
|
```
|
||||||
|
python manage.py migrate
|
||||||
|
```
|
||||||
|
3. Launch the test's server
|
||||||
|
```
|
||||||
python manage.py runserver
|
python manage.py runserver
|
||||||
```
|
```
|
||||||
|
|
||||||
## Use
|
## Use
|
||||||
Browse to http://127.0.0.1:8000
|
Browse to http://127.0.0.1:8000
|
||||||
|
|
||||||
|
Register/Create a user (or more)
|
||||||
|
Then connect ; you can create a Request or a Review
|
||||||
|
When multiple users exist, you can follow others and see what they've published
|
||||||
|
|
||||||
|
|
||||||
## Author
|
## Author
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<div id="masthead" class="sev-2"></div>
|
<div id="masthead" class="sev-2"></div>
|
||||||
<div id="page">
|
<div id="page">
|
||||||
<h1>flake8 violations</h1>
|
<h1>flake8 violations</h1>
|
||||||
<p id="versions">Generated on 2025-05-06 10:31
|
<p id="versions">Generated on 2025-05-07 09:07
|
||||||
with Installed plugins: flake8-html: 0.4.3, mccabe: 0.7.0, pycodestyle: 2.13.0, pyflakes: 3.3.2
|
with Installed plugins: flake8-html: 0.4.3, mccabe: 0.7.0, pycodestyle: 2.13.0, pyflakes: 3.3.2
|
||||||
</p>
|
</p>
|
||||||
<ul id="index">
|
<ul id="index">
|
||||||
|
|||||||
Reference in New Issue
Block a user