Commit 9ab2ca3a authored by erdnaxe's avatar erdnaxe 🎇

Upgrade to Django 2

parent 1ebd18f1
......@@ -6,6 +6,8 @@ name = "pypi"
[packages]
django = "*"
django-crispy-forms = "*"
django-reversion = "*"
"django-bootstrap3" = "*"
[dev-packages]
......
{
"_meta": {
"hash": {
"sha256": "b41fc3dad724fcb51632203c0f17800f0f4a5e44466899472b123e0adac30023"
"sha256": "f583b7c20005d57480a4bf958db17fc780ebb66c63f7a346ccb96cc5fa2aa1b7"
},
"pipfile-spec": 6,
"requires": {
......@@ -24,6 +24,13 @@
"index": "pypi",
"version": "==2.1.5"
},
"django-bootstrap3": {
"hashes": [
"sha256:593f98c0b84e26ab61ef9d81d3f7c3691f1d8492c9343b03e9feb9e8e9404e6a"
],
"index": "pypi",
"version": "==11.0.0"
},
"django-crispy-forms": {
"hashes": [
"sha256:5952bab971110d0b86c278132dae0aa095beee8f723e625c3d3fa28888f1675f",
......@@ -32,6 +39,14 @@
"index": "pypi",
"version": "==1.7.2"
},
"django-reversion": {
"hashes": [
"sha256:9b8a245917e1bae131d3210c9ca7efbc066e60f32efa436e391c9803c3f4b61b",
"sha256:b9b7e8101443738efdfa726ea565c0141542db4df4844616124852fcd7dd7e20"
],
"index": "pypi",
"version": "==3.0.2"
},
"pytz": {
"hashes": [
"sha256:32b0891edff07e28efe91284ed9c31e123d84bea3fd98e1f72be2508f43ef8d9",
......
# Portail captif
# Site de la Med
Gnu public license v2.0
Le projet Med permet la gestion de la base de donnée de la médiathèque de l'ENS Paris-Saclay.
Elle permet de gérer les medias, bd, jeux, emprunts, ainsi que les adhérents de la med.
## Avant propos
## Licence
Ce projet est forké à partir de re2o (https://gitlab.rezometz.org/rezo/re2o).
Ce projet est sous la licence GNU public license v2.0.
Le projet med permet la gestion de la bdd de la med, importé à partir de l'ancienne bdd. Elle permet de gérer les medias, bd, jeux, emprunts, ainsi que les adhérents de la med.
Il a été forké par Gabriel Détraz il y a bien longtemps à partir de
[re2o](<https://gitlab.rezometz.org/rezo/re2o>).
Néanmoins depuis le code a été majoritairement réécrit dans une optique d'être maintenable à long terme.
#Installation
# Développement
## Installation des dépendances
Le projet utilise Pipenv donc pour avoir un environnement fonctionnel avec les mêmes versions qu'en prod,
il suffit d'executer :
L'installation comporte 2 parties : le serveur web où se trouve le depot med ainsi que toutes ses dépendances, et le serveur bdd (mysql ou pgsql). Ces 2 serveurs peuvent en réalité être la même machine, ou séparés (recommandé en production).
Le serveur web sera nommé serveur A, le serveur bdd serveur B .
```bash
pipenv install
pipenv shell
```
### Prérequis sur le serveur A
Ensuite il suffit de suivre les procédures standards de Django :
Voici la liste des dépendances à installer sur le serveur principal (A).
```bash
./manage.py migrate
./manage.py collectstatic
./manage.py runserver
```
### Avec apt :
## Configuration d'une base MySQL
#### Sous debian 9
Paquets obligatoires:
* python3-django
* python3-dateutil
* python3-django-reversion
* python3-pip
Avec pip3 :
* django-bootstrap3
Paquet recommandés:
* python3-django-extensions (jessie)
Moteur de db conseillé (mysql), postgresql fonctionne également.
Pour mysql, il faut installer :
* python3-mysqldb (jessie-backports)
* mysql-client
Postgresql :
* psycopg2
### Prérequis sur le serveur B
Sur le serveur B, installer mysql ou postgresql, dans la version jessie ou stretch.
* mysql-server (jessie/stretch) ou postgresql (jessie-stretch)
### Installation sur le serveur principal A
Cloner le dépot med à partir du gitlab, par exemple dans /var/www/med.
Ensuite, il faut créer le fichier settings_local.py dans le sous dossier med, un settings_local.example.py est présent. Les options sont commentées, et des options par défaut existent.
En particulier, il est nécessaire de générer un login/mdp admin pour le ldap et un login/mdp pour l'utilisateur sql (cf ci-dessous), à mettre dans settings_local.py
### Installation du serveur mysql/postgresql sur B
Sur le serveur mysql ou postgresl, il est nécessaire de créer une base de donnée med, ainsi qu'un user med et un mot de passe associé. Ne pas oublier de faire écouter le serveur mysql ou postgresql avec les acl nécessaire pour que A puisse l'utiliser.
Sur le serveur mysql ou postgresl, il est nécessaire de créer une base de donnée med,
ainsi qu'un user med et un mot de passe associé.
Voici les étapes à éxecuter pour mysql :
* CREATE DATABASE med;
* CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
* GRANT ALL PRIVILEGES ON med.* TO 'newuser'@'localhost';
* FLUSH PRIVILEGES;
Si les serveurs A et B ne sont pas la même machine, il est nécessaire de remplacer localhost par l'ip avec laquelle A contacte B dans les commandes du dessus.
Une fois ces commandes effectuées, ne pas oublier de vérifier que newuser et password sont présents dans settings_local.py
## Configuration initiale
Normalement à cette étape, la bdd sql est configurée correctement.
Il faut alors lancer dans le dépot med '''python3 manage.py migrate''' qui va structurer initialement la base de données.
Les migrations sont normalement comitées au fur et à mesure, néanmoins cette étape peut crasher, merci de reporter les bugs.
## Démarer le site web
Il faut utiliser un moteur pour servir le site web. Nginx ou apache2 sont recommandés.
Pour apache2 :
* apt install apache2
* apt install libapache2-mod-wsgi-py3 (pour le module wsgi)
med/wsgi.py permet de fonctionner avec apache2 en production
Pour nginx :
* apt install nginx
* apt install gunicorn3
## Configuration avancée
Une fois démaré, le site web devrait être accessible.
Pour créer un premier user, faire '''python3 manage.py createsuperuser''' qui va alors créer un user admin.
Il est conseillé de créer alors les droits permanencier, bureau, qui n'existent pas par défaut dans le menu adhérents.
Il est également conseillé de créer un user portant le nom de l'association/organisation.
# Requète en base de donnée
Pour avoir un shell, il suffit de lancer '''python3 manage.py shell'''
Pour charger des objets, example avec User, faire : ''' from users.models import User'''
Pour charger les objets django, il suffit de faire User.objects.all() pour tous les users par exemple.
Il est ensuite aisé de faire des requètes, par exemple User.objects.filter(pseudo='test')
Des exemples et la documentation complète sur les requètes django sont disponible sur le site officiel.
```SQL
CREATE DATABASE med;
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON med.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;
```
Si les serveurs A et B ne sont pas la même machine,
il est nécessaire de remplacer localhost par l'ip avec laquelle A contacte B dans les commandes du dessus.
Une fois ces commandes effectuées,
ne pas oublier de vérifier que newuser et password sont présents dans settings_local.py.
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2017 Gabriel Détraz
# Copyright © 2017 Goulven Kermarec
# Copyright © 2017 Augustin Lemesle
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2017 Gabriel Détraz
# Copyright © 2017 Goulven Kermarec
# Copyright © 2017 Augustin Lemesle
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""
Django settings for med project.
......@@ -72,15 +50,14 @@ INSTALLED_APPS = (
'logs'
)
MIDDLEWARE_CLASSES = (
MIDDLEWARE = (
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
ROOT_URLCONF = 'med.urls'
......@@ -121,8 +98,6 @@ USE_L10N = True
USE_TZ = True
# django-bootstrap3 config dictionnary
BOOTSTRAP3 = {
'jquery_url': '/static/js/jquery-2.2.4.min.js',
......
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2017 Gabriel Détraz
# Copyright © 2017 Goulven Kermarec
# Copyright © 2017 Augustin Lemesle
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = 'SUPER_SECRET'
DB_PASSWORD = 'SUPER_SECRET'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
DEBUG = True
ADMINS = [('Example', 'rezo-admin@example.org')]
......@@ -36,18 +19,9 @@ ALLOWED_HOSTS = ['test.example.org']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 're2o',
'USER': 're2o',
'PASSWORD': DB_PASSWORD,
'HOST': 'localhost',
},
'ldap': {
'ENGINE': 'ldapdb.backends.ldap',
'NAME': 'ldap://10.0.0.0/',
'USER': 'cn=admin,dc=ldap,dc=example,dc=org',
'PASSWORD': 'SUPER_SECRET',
}
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Security settings
......
......@@ -42,11 +42,11 @@ from .views import index
urlpatterns = [
url(r'^$', index),
url('^logout/', auth_views.logout, {'next_page': '/'}),
url('^logout/', auth_views.LogoutView.as_view(), {'next_page': '/'}),
url('^', include('django.contrib.auth.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^users/', include('users.urls', namespace='users')),
url(r'^media/', include('media.urls', namespace='media')),
url(r'^search/', include('search.urls', namespace='search')),
url(r'^logs/', include('logs.urls', namespace='logs')),
url(r'^admin/', admin.site.urls),
url(r'^users/', include('users.urls')),
url(r'^media/', include('media.urls')),
url(r'^search/', include('search.urls')),
url(r'^logs/', include('logs.urls')),
]
......@@ -24,6 +24,7 @@ from django.conf.urls import url
from . import views
app_name = 'media'
urlpatterns = [
url(r'^add_auteur/$', views.add_auteur, name='add-auteur'),
url(r'^edit_auteur/(?P<auteurid>[0-9]+)$', views.edit_auteur, name='edit-auteur'),
......
......@@ -24,6 +24,7 @@ from django.conf.urls import url
from . import views
app_name = 'search'
urlpatterns = [
url(r'^$', views.search, name='search'),
url(r'^avance/$', views.searchp, name='searchp'),
......
This diff is collapsed.
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
quelques clics.
Copyright © 2017 Gabriel Détraz
Copyright © 2017 Goulven Kermarec
Copyright © 2017 Augustin Lemesle
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
{% endcomment %}
<ul class="pagination nav navbar-nav">
{% if list.has_previous %}
<li><a href="?page=1"> << </a></li>
<li><a href="?page={{ list.previous_page_number }}"> < </a></li>
<li><a href="?page=1"> << </a></li>
<li><a href="?page={{ list.previous_page_number }}"> < </a></li>
{% endif %}
{% for page in list.paginator.page_range %}
{% if list.number <= page|add:"3" and list.number >= page|add:"-3" %}
<li class="{% if list.number == page %}active{% endif %}"><a href="?page={{page }}">{{ page }}</a></li>
<li class="{% if list.number == page %}active{% endif %}"><a href="?page={{ page }}">{{ page }}</a></li>
{% endif %}
{% endfor %}
{% if list.has_next %}
<li><a href="?page={{ list.next_page_number }}"> > </a></li>
<li><a href="?page={{ list.paginator.page_range|length }}"> >> </a></li>
<li><a href="?page={{ list.paginator.page_range|length }}"> >> </a></li>
{% endif %}
</ul>
</ul>
{% extends "base.html" %}
{% comment %}
Re2o est un logiciel d'administration développé initiallement au rezometz. Il
se veut agnostique au réseau considéré, de manière à être installable en
quelques clics.
Copyright © 2017 Gabriel Détraz
Copyright © 2017 Goulven Kermarec
Copyright © 2017 Augustin Lemesle
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
{% endcomment %}
{% load bootstrap3 %}
{% block title %}Login{% endblock %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
{% if next %}
{% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed,
please login with an account that has access.</p>
{% else %}
<p>Please login to see this page.</p>
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
{% endif %}
<p><form method="post" action="{% url 'login' %}">
{% csrf_token %}
{% bootstrap_form form %}
{% bootstrap_button "Login" button_type="submit" icon="log-in" %}
<input type="hidden" name="next" value="{{ next }}" />
</form></p>
<p><a class="btn btn-warning btn-sm" role="button" href="{% url 'users:reset-password' %}"> Mot de passe oublié ?</a></p>
{% if next %}
{% if user.is_authenticated %}
<p>Your account doesn't have access to this page. To proceed,
please login with an account that has access.</p>
{% else %}
<p>Please login to see this page.</p>
{% endif %}
{% endif %}
<p>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
{% bootstrap_form form %}
{% bootstrap_button "Login" button_type="submit" icon="log-in" %}
<input type="hidden" name="next" value="{{ next }}"/>
</form></p>
<p><a class="btn btn-warning btn-sm" role="button" href="{% url 'users:reset-password' %}"> Mot de passe oublié
?</a></p>
{% endblock %}
# Re2o est un logiciel d'administration développé initiallement au rezometz. Il
# se veut agnostique au réseau considéré, de manière à être installable en
# quelques clics.
#
# Copyright © 2017 Gabriel Détraz
# Copyright © 2017 Goulven Kermarec
# Copyright © 2017 Augustin Lemesle
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from django.conf.urls import url
from . import views
......@@ -32,7 +10,7 @@ urlpatterns = [
url(r'^password/(?P<userid>[0-9]+)$', views.password, name='password'),
url(r'^profil/(?P<userid>[0-9]+)$', views.profil, name='profil'),
url(r'^adherer/(?P<userid>[0-9]+)$', views.adherer, name='adherer'),
url(r'^mon_profil/$', views.mon_profil, name='mon-profil'),
url(r'^mon_profil/$', views.mon_profil, name='profile'),
url(r'^add_listright/$', views.add_listright, name='add-listright'),
url(r'^edit_listright/(?P<listrightid>[0-9]+)$', views.edit_listright, name='edit-listright'),
url(r'^del_listright/$', views.del_listright, name='del-listright'),
......@@ -56,5 +34,3 @@ urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^index_ajour/$', views.index_ajour, name='index-ajour'),
]
......@@ -34,7 +34,7 @@ from django.db.models import Max, ProtectedError
from django.db import IntegrityError
from django.core.mail import send_mail
from django.utils import timezone
from django.core.urlresolvers import reverse
from django.urls import reverse
from django.db import transaction
from reversion.models import Version
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment