├── .gitignore ├── members ├── __init__.py ├── migrations │ ├── __init__.py │ └── __pycache__ │ │ └── __init__.cpython-39.pyc ├── models.py ├── tests.py ├── admin.py ├── static │ └── members │ │ ├── Wave0.png │ │ ├── Wave1.png │ │ ├── Wave2.png │ │ ├── taskbro.png │ │ ├── Task-amico.png │ │ ├── Task-cuate.png │ │ └── taskapplogo.png ├── __pycache__ │ ├── admin.cpython-39.pyc │ ├── apps.cpython-39.pyc │ ├── forms.cpython-39.pyc │ ├── urls.cpython-39.pyc │ ├── views.cpython-39.pyc │ ├── models.cpython-39.pyc │ └── __init__.cpython-39.pyc ├── apps.py ├── urls.py ├── forms.py ├── templates │ └── authenticate │ │ ├── register_user.html │ │ └── login.html └── views.py ├── task_app ├── __init__.py ├── migrations │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-39.pyc │ │ ├── 0001_initial.cpython-39.pyc │ │ ├── 0003_alter_task_manager.cpython-39.pyc │ │ ├── 0004_alter_task_manager.cpython-39.pyc │ │ ├── 0005_alter_task_manager.cpython-39.pyc │ │ └── 0002_task_manager_alter_task_created.cpython-39.pyc │ ├── 0005_alter_task_manager.py │ ├── 0003_alter_task_manager.py │ ├── 0004_alter_task_manager.py │ ├── 0001_initial.py │ └── 0002_task_manager_alter_task_created.py ├── tests.py ├── __pycache__ │ ├── apps.cpython-39.pyc │ ├── urls.cpython-39.pyc │ ├── admin.cpython-39.pyc │ ├── forms.cpython-39.pyc │ ├── models.cpython-39.pyc │ ├── views.cpython-39.pyc │ └── __init__.cpython-39.pyc ├── admin.py ├── apps.py ├── templates │ └── task_app │ │ ├── main.html │ │ ├── add_task.html │ │ ├── update_task.html │ │ ├── list_task.html │ │ ├── searchbar.html │ │ ├── navbar.html │ │ └── base.html ├── urls.py ├── models.py ├── forms.py └── views.py ├── task_manager ├── __init__.py ├── __pycache__ │ ├── urls.cpython-39.pyc │ ├── wsgi.cpython-39.pyc │ ├── __init__.cpython-39.pyc │ └── settings.cpython-39.pyc ├── asgi.py ├── wsgi.py ├── urls.py └── settings.py ├── db.sqlite3 ├── .gitattributes ├── requirements.txt ├── manage.py └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .env -------------------------------------------------------------------------------- /members/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /task_app/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /task_manager/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /members/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /task_app/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /db.sqlite3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/db.sqlite3 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /members/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /members/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /members/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /task_app/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/requirements.txt -------------------------------------------------------------------------------- /members/static/members/Wave0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/static/members/Wave0.png -------------------------------------------------------------------------------- /members/static/members/Wave1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/static/members/Wave1.png -------------------------------------------------------------------------------- /members/static/members/Wave2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/static/members/Wave2.png -------------------------------------------------------------------------------- /members/static/members/taskbro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/static/members/taskbro.png -------------------------------------------------------------------------------- /members/static/members/Task-amico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/static/members/Task-amico.png -------------------------------------------------------------------------------- /members/static/members/Task-cuate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/static/members/Task-cuate.png -------------------------------------------------------------------------------- /members/__pycache__/admin.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/__pycache__/admin.cpython-39.pyc -------------------------------------------------------------------------------- /members/__pycache__/apps.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/__pycache__/apps.cpython-39.pyc -------------------------------------------------------------------------------- /members/__pycache__/forms.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/__pycache__/forms.cpython-39.pyc -------------------------------------------------------------------------------- /members/__pycache__/urls.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/__pycache__/urls.cpython-39.pyc -------------------------------------------------------------------------------- /members/__pycache__/views.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/__pycache__/views.cpython-39.pyc -------------------------------------------------------------------------------- /members/static/members/taskapplogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/static/members/taskapplogo.png -------------------------------------------------------------------------------- /task_app/__pycache__/apps.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/__pycache__/apps.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/__pycache__/urls.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/__pycache__/urls.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from .models import Task 3 | # Register your models here. 4 | admin.site.register(Task) -------------------------------------------------------------------------------- /members/__pycache__/models.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/__pycache__/models.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/__pycache__/admin.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/__pycache__/admin.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/__pycache__/forms.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/__pycache__/forms.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/__pycache__/models.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/__pycache__/models.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/__pycache__/views.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/__pycache__/views.cpython-39.pyc -------------------------------------------------------------------------------- /members/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /task_manager/__pycache__/urls.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_manager/__pycache__/urls.cpython-39.pyc -------------------------------------------------------------------------------- /task_manager/__pycache__/wsgi.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_manager/__pycache__/wsgi.cpython-39.pyc -------------------------------------------------------------------------------- /task_manager/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_manager/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /task_manager/__pycache__/settings.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_manager/__pycache__/settings.cpython-39.pyc -------------------------------------------------------------------------------- /members/migrations/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/members/migrations/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/migrations/__pycache__/__init__.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/migrations/__pycache__/__init__.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/migrations/__pycache__/0001_initial.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/migrations/__pycache__/0001_initial.cpython-39.pyc -------------------------------------------------------------------------------- /members/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class MembersConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'members' 7 | -------------------------------------------------------------------------------- /task_app/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class TaskAppConfig(AppConfig): 5 | default_auto_field = 'django.db.models.BigAutoField' 6 | name = 'task_app' 7 | -------------------------------------------------------------------------------- /task_app/migrations/__pycache__/0003_alter_task_manager.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/migrations/__pycache__/0003_alter_task_manager.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/migrations/__pycache__/0004_alter_task_manager.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/migrations/__pycache__/0004_alter_task_manager.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/migrations/__pycache__/0005_alter_task_manager.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/migrations/__pycache__/0005_alter_task_manager.cpython-39.pyc -------------------------------------------------------------------------------- /task_app/migrations/__pycache__/0002_task_manager_alter_task_created.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Chouaib-Djerdi/Task-Manager/HEAD/task_app/migrations/__pycache__/0002_task_manager_alter_task_created.cpython-39.pyc -------------------------------------------------------------------------------- /members/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | 4 | app_name = "members" 5 | 6 | urlpatterns = [ 7 | path('login_user/',views.login_user,name="login_user"), 8 | path('logout_user/',views.logout_user,name='logout_user'), 9 | path('register_user/',views.register_user,name='register_user'), 10 | ] 11 | -------------------------------------------------------------------------------- /task_app/templates/task_app/main.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Document 7 | 8 | 9 |

HELLO WORLD ITS WORKING

10 | 11 | -------------------------------------------------------------------------------- /task_manager/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for task_manager project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'task_manager.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /task_manager/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for task_manager project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'task_manager.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /task_app/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | 4 | app_name = 'task_app' 5 | 6 | urlpatterns = [ 7 | path('hello/',views.hello,name='hello'), 8 | path('list_task/',views.list_task,name='list_task'), 9 | path('add_task/',views.add_task,name='add_task'), 10 | path('task_detail/',views.update_task,name='detail_task'), 11 | path('delete_task/',views.delete_task,name='delete_task'), 12 | path('search/',views.searchbar,name='searchbar'), 13 | ] -------------------------------------------------------------------------------- /task_app/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import User 3 | 4 | # Create your models here. 5 | class Task(models.Model): 6 | title = models.CharField(max_length=100) 7 | description = models.TextField(null=True,blank=True) 8 | complete = models.BooleanField(default=False) 9 | created = models.DateTimeField(auto_now_add=False) 10 | manager = models.ForeignKey(User,on_delete=models.CASCADE) 11 | 12 | def __str__(self): 13 | return f'{self.title}' 14 | -------------------------------------------------------------------------------- /task_app/migrations/0005_alter_task_manager.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.1.3 on 2023-01-31 15:28 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 12 | ('task_app', '0004_alter_task_manager'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AlterField( 17 | model_name='task', 18 | name='manager', 19 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /task_app/migrations/0003_alter_task_manager.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.1.3 on 2023-01-31 15:19 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 12 | ('task_app', '0002_task_manager_alter_task_created'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AlterField( 17 | model_name='task', 18 | name='manager', 19 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /task_app/migrations/0004_alter_task_manager.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.1.3 on 2023-01-31 15:21 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 12 | ('task_app', '0003_alter_task_manager'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AlterField( 17 | model_name='task', 18 | name='manager', 19 | field=models.ForeignKey(default='admin', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'task_manager.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /task_app/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.1.3 on 2023-01-28 14:29 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | initial = True 9 | 10 | dependencies = [ 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='Task', 16 | fields=[ 17 | ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 18 | ('title', models.CharField(max_length=100)), 19 | ('description', models.TextField(blank=True, null=True)), 20 | ('complete', models.BooleanField(default=False)), 21 | ('created', models.DateTimeField(auto_now_add=True)), 22 | ], 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /task_app/migrations/0002_task_manager_alter_task_created.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.1.3 on 2023-01-30 16:03 2 | 3 | from django.conf import settings 4 | from django.db import migrations, models 5 | import django.db.models.deletion 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | migrations.swappable_dependency(settings.AUTH_USER_MODEL), 12 | ('task_app', '0001_initial'), 13 | ] 14 | 15 | operations = [ 16 | migrations.AddField( 17 | model_name='task', 18 | name='manager', 19 | field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), 20 | ), 21 | migrations.AlterField( 22 | model_name='task', 23 | name='created', 24 | field=models.DateTimeField(), 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /task_app/templates/task_app/add_task.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends 'task_app/navbar.html' %} {% block content2 %} 3 | {% load static %} 4 | 5 |
6 |
7 | 14 | 15 |

Add Your Task

16 | {% csrf_token %} 17 | {% for field in form %} 18 | {{field}} 19 | {% endfor %} 20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 | 28 | {% endblock content2 %} 29 | -------------------------------------------------------------------------------- /task_app/templates/task_app/update_task.html: -------------------------------------------------------------------------------- 1 | {% extends 'task_app/navbar.html' %} {% block content2 %} {% load static %} 2 | 3 |
4 |
5 | 11 |
12 |
13 | 20 | 21 |

Update Your Task

22 | {% csrf_token %} {% for field in form %} {{field}} {% endfor %} 23 |
24 | 25 |
26 |
27 | 28 | {% endblock content2 %} 29 | -------------------------------------------------------------------------------- /members/forms.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.forms import UserCreationForm 2 | from django import forms 3 | from django.contrib.auth.models import User 4 | 5 | 6 | class RegisterUserForm(UserCreationForm): 7 | email = forms.EmailField(widget=forms.EmailInput(attrs={'class':'form-control'})) 8 | first_name = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'class':'form-control'})) 9 | last_name = forms.CharField(max_length=50, widget=forms.TextInput(attrs={'class':'form-control'})) 10 | 11 | class Meta: 12 | model = User 13 | fields = ['username','first_name','last_name','email','password1','password2'] 14 | 15 | 16 | def __init__(self, *args, **kwargs): 17 | super(RegisterUserForm, self).__init__(*args, **kwargs) 18 | self.fields['username'].widget.attrs['class'] = 'form-control' 19 | self.fields['password1'].widget.attrs['class'] = 'form-control' 20 | self.fields['password2'].widget.attrs['class'] = 'form-control' -------------------------------------------------------------------------------- /task_manager/urls.py: -------------------------------------------------------------------------------- 1 | """task_manager URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/4.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path,include 18 | 19 | urlpatterns = [ 20 | path('admin/', admin.site.urls), 21 | path('',include('task_app.urls')), 22 | path('members/',include(('django.contrib.auth.urls','members'), namespace='authenticate')), 23 | path('members/',include('members.urls')), 24 | 25 | ] 26 | -------------------------------------------------------------------------------- /task_app/forms.py: -------------------------------------------------------------------------------- 1 | from django import forms 2 | from django.forms import ModelForm 3 | from .models import Task 4 | 5 | class TaskForm(ModelForm): 6 | class Meta: 7 | model = Task 8 | fields = ('title', 'description', 'created','complete') 9 | labels = { 10 | 'title':'Title:', 11 | 'description':'Description:', 12 | 'created':'Created:', 13 | 'complete':'Done:' 14 | } 15 | exclude = ['manager'] 16 | 17 | widgets = { 18 | 'title': forms.TextInput(attrs={'class':'form-control', 'placeholder':'Title'}), 19 | 'description': forms.Textarea(attrs={'class':'form-control', 'placeholder':'Description'}), 20 | 'created': forms.DateInput(attrs={'class':'form-control', 'placeholder':'MM/DD/YY'}), 21 | 'complete':forms.CheckboxInput(attrs={'class':'mycheck my-3'}), 22 | } 23 | #we are converting this to modelform concept 24 | #complete the wigdets 25 | #change the type of date used 26 | #update the views 27 | 28 | -------------------------------------------------------------------------------- /members/templates/authenticate/register_user.html: -------------------------------------------------------------------------------- 1 | {% extends 'task_app/base.html' %} {% block content %} {% if form.errors %} 2 | 8 | {% endif %} 9 | 10 |
11 |
12 | {% csrf_token %} 13 |
14 | 21 | 22 |

Task Manager

23 |
24 | {{form.as_p}} 25 | 30 |
31 |
32 | {% endblock content %} 33 | -------------------------------------------------------------------------------- /task_app/templates/task_app/list_task.html: -------------------------------------------------------------------------------- 1 | {% extends 'task_app/navbar.html' %} {% block content2 %} 2 | 3 |

Tasks List :

4 |
5 | {% for task in all_tasks %} {% if task.complete %} 6 | 7 |
8 |
9 | 11 |
12 | 16 | {{task}} 17 | 18 |
19 |
21 |
22 |
23 |

{{task.description|linebreaks}}

24 | 29 |
30 |
31 | 32 | {% else %} 33 | 34 |
35 |
36 |
37 | {{task}} 38 |
39 |
40 |
41 |

{{task.description|linebreaks}}

42 | 47 |
48 |
49 | {% endif %} {% endfor %} 50 |
51 | {% endblock content2 %} 52 | -------------------------------------------------------------------------------- /members/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render, redirect 2 | from django.urls import reverse 3 | from django.contrib.auth import authenticate,login,logout 4 | from django.contrib import messages 5 | from django.contrib.auth.forms import UserCreationForm 6 | from .forms import RegisterUserForm 7 | 8 | # Create your views here. 9 | 10 | def login_user(request): 11 | if request.method == "POST": 12 | username = request.POST['username'] 13 | password = request.POST['password'] 14 | user = authenticate(request,username=username,password=password) 15 | 16 | if user is not None: 17 | login(request,user) 18 | return redirect(reverse('task_app:list_task')) 19 | else: 20 | messages.success(request,"There was an error Logging In ! Try Again ...") 21 | return redirect('/members/login_user/') 22 | else: 23 | return render(request,'authenticate/login.html') 24 | 25 | def logout_user(request): 26 | logout(request) 27 | return redirect(reverse('members:login_user')) 28 | 29 | def register_user(request): 30 | if request.method == 'POST': 31 | form = RegisterUserForm(request.POST) 32 | if form.is_valid(): 33 | form.save() 34 | username = form.cleaned_data['username'] 35 | password = form.cleaned_data['password1'] 36 | user = authenticate(request,username=username,password=password) 37 | login(request,user) 38 | messages.success(request,"Registration Successful !") 39 | return redirect(reverse('task_app:list_task')) 40 | else: 41 | form = RegisterUserForm() 42 | return render(request,'authenticate/register_user.html',context={'form':form}) -------------------------------------------------------------------------------- /task_app/templates/task_app/searchbar.html: -------------------------------------------------------------------------------- 1 | {% extends 'task_app/navbar.html' %} {% block content2 %} {% if searched %} 2 |

You've searched for {{searched}}

3 |
4 | {% for task in tasks %} {% if task.complete %} 5 | 6 |
7 |
8 | 10 |
11 | 15 | {{task}} 16 | 17 |
18 |
20 |
21 |
22 |

{{task.description}}

23 | 28 |
29 |
30 | 31 | {% else %} 32 | 33 |
34 |
35 |
36 | {{task}} 37 |
38 |
39 |
40 |

{{task.description}}

41 | 46 |
47 |
48 | {% endif %} {% endfor %} 49 |
50 | {% else %} 51 |

You forgot to input your search

52 | {% endif %} {% endblock content2 %} 53 | -------------------------------------------------------------------------------- /members/templates/authenticate/login.html: -------------------------------------------------------------------------------- 1 | {% extends 'task_app/base.html' %} {% block content %} {% load static %} 2 |
3 |
4 |
5 | 11 |
12 |
13 | {% csrf_token %} 14 | 21 |

Task Manager

22 |

Please log in

23 |
24 | 25 | 31 |
32 |
33 | 34 | 40 |
41 | 44 |
45 |

46 | Don't have an account 47 | Register Here. 48 |

49 |
50 |
51 |
52 | {% endblock content %} 53 | -------------------------------------------------------------------------------- /task_app/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render,redirect 2 | from django.urls import reverse 3 | from . import models 4 | from .forms import TaskForm 5 | from django.contrib.auth.decorators import login_required 6 | from django.db.models import Q 7 | 8 | # Create your views here. 9 | def hello(request): 10 | return render(request,'task_app/main.html') 11 | 12 | @login_required 13 | def list_task(request): 14 | all_tasks = models.Task.objects.filter(manager=request.user) 15 | context = { 16 | 'all_tasks' : all_tasks 17 | } 18 | return render(request,'task_app/list_task.html',context=context) 19 | 20 | @login_required 21 | def add_task(request): 22 | if request.method == 'POST': 23 | form = TaskForm(request.POST) 24 | if form.is_valid(): 25 | task = form.save(commit=False) 26 | task.manager = request.user 27 | task.save() 28 | return redirect(reverse('task_app:list_task')) 29 | 30 | else: 31 | form = TaskForm() 32 | return render(request,'task_app/add_task.html',context={'form':form}) 33 | 34 | @login_required 35 | def update_task(request,pk): 36 | task = models.Task.objects.get(pk=pk) 37 | form = TaskForm(request.POST or None, instance=task) 38 | if form.is_valid(): 39 | form.save() 40 | return redirect(reverse('task_app:list_task')) 41 | 42 | return render(request,'task_app/update_task.html',context={'task':task,'form':form}) 43 | 44 | @login_required 45 | def delete_task(request,pk): 46 | task = models.Task.objects.get(pk=pk) 47 | task.delete() 48 | 49 | return redirect(reverse('task_app:list_task')) 50 | 51 | @login_required 52 | def searchbar(request): 53 | if request.method == "POST": 54 | searched = request.POST["searched"] 55 | tasks = models.Task.objects.filter(Q(title__contains=searched)|Q(description__contains=searched)) 56 | return render(request,'task_app/searchbar.html',context={'searched':searched,'tasks':tasks}) 57 | else: 58 | return render(request,'task_app/searchbar.html') -------------------------------------------------------------------------------- /task_app/templates/task_app/navbar.html: -------------------------------------------------------------------------------- 1 | {% extends 'task_app/base.html' %} {% block content %} 2 | 3 | 70 |
{% block content2 %}{% endblock content2 %}
71 | 72 | {% endblock content %} 73 | -------------------------------------------------------------------------------- /task_app/templates/task_app/base.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 | 4 | 5 | 6 | 7 | 8 | {% comment %} bootsrap links & scripts {% endcomment %} 9 | 15 | 20 | 25 | 30 | {% comment %} Fontawsome script {% endcomment %} 31 | 35 | 36 | {% comment %} custom css style {% endcomment %} 37 | 62 | Task Manager 63 | 64 | 65 | {% if messages %} {% for message in messages %} 66 | 77 | 78 | {% endfor %} {% endif %} {% block content %}{% endblock content %} 79 | 80 | 81 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Task-Manager 2 | Task-Manager is a Web App developed using Python Django framwork. 3 | 4 | This Web App demonstrates CRUD functionality and User Authentification system of the Django framwork with function-based views. 5 | 6 | Its main functions are : 7 | 1. Creating Your Own account by registering and filling up the form provided by the register template. 8 | 2. Logging In if you already have an account and also Logging Out of your account. 9 | 3.If you happen to make any error a warning message will pop off to notify you that you've made an error. 10 | 3. You can access your tasks through the list tasks window and you can operate these functions on them : Create , Read, Update, Delete any task. 11 | 4. You can use the search bar the search for any term you provide and it will give you your search results based on wether the term has occured in any of your tasks. 12 | 5. The database used for this project is SQLite3. 13 | 14 | ### This is the Login page: 15 | 16 | ![Capture1](https://user-images.githubusercontent.com/116681645/216663799-cee5ce08-76d6-4dda-95e3-93960d746c6a.PNG) 17 | 18 | ### This is the Registration page: 19 | 20 | ![Capture2](https://user-images.githubusercontent.com/116681645/216663818-74725be4-7d35-448d-8f9b-0af247b309cb.PNG) 21 | 22 | ### This is The Main View of the user: 23 | 24 | ![Capture3](https://user-images.githubusercontent.com/116681645/216663840-f57d0a2e-5f79-419d-aa7a-3be0afe9c6bd.PNG) 25 | 26 | ### This is the Add task view: 27 | 28 | ![Capture4](https://user-images.githubusercontent.com/116681645/216663850-ba085ae1-1550-4857-a262-94ca86bc6dcb.PNG) 29 | 30 | ### This is the Update task view: 31 | 32 | ![Capture5](https://user-images.githubusercontent.com/116681645/216663866-613e637b-7d2f-4310-b8bc-be3c9d5476ec.PNG) 33 | 34 | ### This is how your search results will be demonstrated: 35 | 36 | ![Capture6](https://user-images.githubusercontent.com/116681645/216663778-2eff81ef-741a-4cec-a7c0-e8a43699a163.PNG) 37 | 38 | ## Setup 39 | 40 | The first thing to do is to clone the repository: 41 | 42 | ```sh 43 | $ git clone https://github.com/Chouaib-Djerdi/Task-Manager.git 44 | $ cd task_manager 45 | ``` 46 | 47 | Create a virtual environment to install dependencies in and activate it: 48 | 49 | ```sh 50 | $ virtualenv2 --no-site-packages env 51 | $ source env/bin/activate 52 | ``` 53 | 54 | Then install the dependencies: 55 | 56 | ```sh 57 | (env)$ pip install -r requirements.txt 58 | ``` 59 | Note the `(env)` in front of the prompt. This indicates that this terminal 60 | session operates in a virtual environment set up by `virtualenv2`. 61 | 62 | Once `pip` has finished downloading the dependencies: 63 | ```sh 64 | (env)$ cd task_manager 65 | (env)$ python manage.py runserver 66 | ``` 67 | And navigate to `http://127.0.0.1:8000/members/register_user/`. 68 | 69 | -------------------------------------------------------------------------------- /task_manager/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for task_manager project. 3 | 4 | Generated by 'django-admin startproject' using Django 4.1.3. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/4.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/4.1/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | from decouple import config 15 | 16 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 17 | BASE_DIR = Path(__file__).resolve().parent.parent 18 | 19 | 20 | # Quick-start development settings - unsuitable for production 21 | # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ 22 | 23 | # SECURITY WARNING: keep the secret key used in production secret! 24 | SECRET_KEY = config("SECRET_KEY") 25 | 26 | # SECURITY WARNING: don't run with debug turned on in production! 27 | DEBUG = True 28 | 29 | ALLOWED_HOSTS = [] 30 | 31 | 32 | # Application definition 33 | 34 | INSTALLED_APPS = [ 35 | 'members.apps.MembersConfig', 36 | 'task_app.apps.TaskAppConfig', 37 | 'django.contrib.admin', 38 | 'django.contrib.auth', 39 | 'django.contrib.contenttypes', 40 | 'django.contrib.sessions', 41 | 'django.contrib.messages', 42 | 'django.contrib.staticfiles', 43 | ] 44 | 45 | MIDDLEWARE = [ 46 | 'django.middleware.security.SecurityMiddleware', 47 | 'django.contrib.sessions.middleware.SessionMiddleware', 48 | 'django.middleware.common.CommonMiddleware', 49 | 'django.middleware.csrf.CsrfViewMiddleware', 50 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 51 | 'django.contrib.messages.middleware.MessageMiddleware', 52 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 53 | ] 54 | 55 | ROOT_URLCONF = 'task_manager.urls' 56 | 57 | TEMPLATES = [ 58 | { 59 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 60 | 'DIRS': [], 61 | 'APP_DIRS': True, 62 | 'OPTIONS': { 63 | 'context_processors': [ 64 | 'django.template.context_processors.debug', 65 | 'django.template.context_processors.request', 66 | 'django.contrib.auth.context_processors.auth', 67 | 'django.contrib.messages.context_processors.messages', 68 | ], 69 | }, 70 | }, 71 | ] 72 | 73 | WSGI_APPLICATION = 'task_manager.wsgi.application' 74 | 75 | 76 | # Database 77 | # https://docs.djangoproject.com/en/4.1/ref/settings/#databases 78 | 79 | DATABASES = { 80 | 'default': { 81 | 'ENGINE': 'django.db.backends.sqlite3', 82 | 'NAME': BASE_DIR / 'db.sqlite3', 83 | } 84 | } 85 | 86 | 87 | # Password validation 88 | # https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators 89 | 90 | AUTH_PASSWORD_VALIDATORS = [ 91 | { 92 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 93 | }, 94 | { 95 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 96 | }, 97 | { 98 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 99 | }, 100 | { 101 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 102 | }, 103 | ] 104 | 105 | 106 | # Internationalization 107 | # https://docs.djangoproject.com/en/4.1/topics/i18n/ 108 | 109 | LANGUAGE_CODE = 'en-us' 110 | 111 | TIME_ZONE = 'UTC' 112 | 113 | USE_I18N = True 114 | 115 | USE_TZ = True 116 | 117 | 118 | # Static files (CSS, JavaScript, Images) 119 | # https://docs.djangoproject.com/en/4.1/howto/static-files/ 120 | 121 | LOGIN_URL = '/members/login_user/' 122 | 123 | STATIC_URL = 'members/static/' 124 | 125 | # Default primary key field type 126 | # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field 127 | 128 | DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' 129 | --------------------------------------------------------------------------------