Erster Commit Stand 03.12 Mitternacht

This commit is contained in:
Holger Trampe 2019-12-03 00:03:58 +01:00
commit b7c6c4cbd2
1982 changed files with 149501 additions and 0 deletions

0
README.md Normal file
View File

0
areas/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

5
areas/admin.py Normal file
View File

@ -0,0 +1,5 @@
from django.contrib import admin
from .models import Areas
# Register your models here.
admin.site.register(Areas)

5
areas/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class AreasConfig(AppConfig):
name = 'areas'

21
areas/forms.py Normal file
View File

@ -0,0 +1,21 @@
from django import forms
from django.forms import ModelForm
from django.forms.widgets import TextInput
from .models import Areas
from multiselectfield import MultiSelectField
from dal import autocomplete
from django.contrib.auth.models import User
from django import forms
class AreaAddAreaForm(forms.ModelForm):
class Meta:
model = Areas
labels = {
"name" : "Bereichsname",
"color" : "Farbe",
"desc" : "Kurze Beschreibung"
}
fields = ['name', 'color', 'desc']

View File

@ -0,0 +1,26 @@
# Generated by Django 2.2.7 on 2019-12-02 17:34
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('users', '0038_auto_20191202_1757'),
]
operations = [
migrations.CreateModel(
name='Areas',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(blank=True, max_length=200)),
('color', models.CharField(blank=True, max_length=60)),
('desc', models.CharField(blank=True, max_length=3000)),
('agency', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='users.Agency')),
],
),
]

View File

@ -0,0 +1,30 @@
# Generated by Django 2.2.7 on 2019-12-02 19:01
import colorful.fields
from django.db import migrations, models
import multiselectfield.db.fields
class Migration(migrations.Migration):
dependencies = [
('areas', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='areas',
name='usersfield',
field=multiselectfield.db.fields.MultiSelectField(blank=True, max_length=200),
),
migrations.AlterField(
model_name='areas',
name='color',
field=colorful.fields.RGBColorField(colors=['#FFB900', '#E74856', '#0078D7', '#0099BC', '#7A7574'], default='#0099BC'),
),
migrations.AlterField(
model_name='areas',
name='desc',
field=models.TextField(blank=True, max_length=3000),
),
]

View File

@ -0,0 +1,42 @@
# Generated by Django 2.2.7 on 2019-12-02 21:55
import colorful.fields
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('areas', '0002_auto_20191202_2001'),
]
operations = [
migrations.RemoveField(
model_name='areas',
name='usersfield',
),
migrations.AddField(
model_name='areas',
name='created_by',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='areas',
name='created_date',
field=models.DateField(blank=True, default=datetime.date.today),
),
migrations.AlterField(
model_name='areas',
name='color',
field=colorful.fields.RGBColorField(blank=True, colors=['#FFB900', '#E74856', '#0078D7', '#0099BC', '#7A7574'], default='#0099BC'),
),
migrations.AlterField(
model_name='areas',
name='name',
field=models.CharField(max_length=200),
),
]

View File

@ -0,0 +1,17 @@
# Generated by Django 2.2.7 on 2019-12-02 21:55
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('areas', '0003_auto_20191202_2255'),
]
operations = [
migrations.RemoveField(
model_name='areas',
name='created_by',
),
]

View File

@ -0,0 +1,26 @@
# Generated by Django 2.2.7 on 2019-12-02 21:56
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('areas', '0004_remove_areas_created_by'),
]
operations = [
migrations.RenameField(
model_name='areas',
old_name='created_date',
new_name='created_area_date',
),
migrations.AddField(
model_name='areas',
name='created_area_by',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
]

View File

@ -0,0 +1,20 @@
# Generated by Django 2.2.7 on 2019-12-02 22:00
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('areas', '0005_auto_20191202_2256'),
]
operations = [
migrations.AlterField(
model_name='areas',
name='created_area_by',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
),
]

View File

Binary file not shown.

41
areas/models.py Normal file
View File

@ -0,0 +1,41 @@
from django.db import models
from users.models import Agency
from django.urls import reverse
from colorful.fields import RGBColorField
from multiselectfield import MultiSelectField
from django.contrib.auth.models import User
import datetime
'''
Model Areas
Verwaltet alle gespeicherten Bereiche für die Agentur. Wird eine neue erstellt,
wird dieser die Agency zugewiesen. Das Farb-Feld ist für später, damit im
Ogranigramm eine Farbe für den jeweiligen Bereich festgelegt wird.
users speichert alle primary-Keys der User, welche diesem Bereich zugeordnet sind!
'''
class Areas(models.Model):
# Wenn die Area gelöscht wird, wird NICHT die Agency gelöscht
agency = models.ForeignKey(Agency, on_delete=models.PROTECT)
name = models.CharField(max_length=200, blank=False)
color = RGBColorField(colors=['#FFB900', '#E74856', '#0078D7', '#0099BC', '#7A7574'], default='#0099BC', blank=True)
desc = models.TextField(max_length=3000, blank=True)
#usersfield = MultiSelectField(choices=(()), blank=True)
#usersfield = forms.ModelMultipleChoiceField(queryset=User.objects.all())
#usersfield = forms.ModelChoiceField(queryset=User.objects.filter(profile__pk=1))
created_area_by = models.ForeignKey(User, on_delete=models.PROTECT)
created_area_date = models.DateField(default=datetime.date.today, blank=True)
def __str__(self):
return f'{self.name}'
# Hier Path für Templates des Models mit Parametern
def get_absolute_url(self):
return reverse('areas-update', kwargs={'pk':self.pk})

View File

@ -0,0 +1,22 @@
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<div class="media">
<div class="media-body">
<h2 class="account-heading">Bereich {{ object.name }} löschen?</h2>
<hr>
</div>
</div>
<!-- Für das Speichern der Bilder enctype -->
<form method="POST">
{% csrf_token %}
<p>Alle unter diesem Bereich erstellten Aufgaben und Standards werden gelöscht!</p>
<div class="form-group">
<button type="submit" class="btn btn-danger">Bereich löschen</button>&nbsp;
<a href="{% url 'areas-management' %}" class="btn btn-success">Abbrechen</a>
</div>
</form>
</div>
{% endblock content %}

View File

@ -0,0 +1,15 @@
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section col-6">
<h3>Neuen Bereich anlegen</h3>
<hr>
<form method="POST">
{% csrf_token %}
{{ form|crispy }}
<hr>
<button type="submit" class="btn btn-success" href="{% url 'areas-addarea' %} ">Bereich anlegen</button>&nbsp;
<a class="btn" href="{% url 'areas-management' %} ">Abbrechen</a>
</form>
</div>
{% endblock content %}

View File

@ -0,0 +1,63 @@
{% extends "users/base.html" %}
{% block content %}
<div class="content-section col-12">
<h3>Bereichsverwaltung</h3>
<hr>
<p>
Bereiche unterteilen die Agentur in verschiedene Verantwortungsbereiche.
</p>
<div class="row">
<div class="content-section col-4">
<a class="btn btn-primary" href="{% url 'areas-addarea' %} ">Neuen Bereich anlegen</a>
</div>
</div>
<hr>
<div class="row">
{% for item in areas_of_agency %}
<!-- Area Chart -->
<div class="col-xl-4 mb-4">
<div class="card shadow">
<!-- Card Header - Dropdown -->
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">{{item.name }}</h6>
<div class="dropdown no-arrow">
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in" aria-labelledby="dropdownMenuLink">
<div class="dropdown-header">Bereichsinfo</div>
<a class="dropdown-item" href="{% url 'areas-manage' item.pk %}">Bearbeiten</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="{% url 'areas-delete' item.pk %}" >Löschen</a>
</div>
</div>
</div>
<!-- Card Body -->
<div class="card-body">
<div class="row">
<div class="col-md-8">
<h6><b>Name</b></h6>
<p>
{{ item.name }}
</p>
<h6><b>Erstellt von</b></h6>
<p>
{{ item.created_area_by.first_name }} {{ item.created_area_by.last_name }}
</p>
<h6><b>Erstellt am</b></h6>
<p>
{{ item.created_area_date }}
</p>
<h6><b>Farbe</b></h6>
<p>
<div style="width: 60px; height: 20px; background-color: {{ item.color }}"></div>
</p>
</div>
</div>
</div>
</div>
</div>
{% endfor%}
</div>
{% endblock content %}

View File

@ -0,0 +1,15 @@
{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section col-6">
<h3>Bereich aktualisieren</h3>
<hr>
<form method="POST">
{% csrf_token %}
{{ form|crispy }}
<hr>
<button type="submit" class="btn btn-success">Bereich aktualisieren</button>&nbsp;
<a class="btn" href="{% url 'areas-management' %} ">Abbrechen</a>
</form>
</div>
{% endblock content %}

3
areas/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

20
areas/urls.py Normal file
View File

@ -0,0 +1,20 @@
from django.urls import path
from django.contrib.auth import views as auth_views
from django.contrib.auth.decorators import login_required, permission_required
from .views import AreasManagement, AreasAddArea, AreaDeleteView, AreaUpdateView
'''
'' - Startseite nach erfolgreichem LOGIN
logout - Logoutseite nach LOGOUT
Permissions definiert in models.py bei USERS und dann hier vor die View geschrieben!
'''
urlpatterns = [
path('', permission_required('users.tasks_management')(AreasManagement.as_view(template_name="areas/areas_management.html")), name='areas-management'),
path('addarea/', permission_required('users.tasks_management')(AreasAddArea.as_view(template_name="areas/areas_add.html")), name='areas-addarea'),
path('areas/<int:pk>/delete', permission_required('users.users_usermanagement')(AreaDeleteView.as_view()), name='areas-delete'),
path('area/<int:pk>/', permission_required('users.users_usermanagement')(AreaUpdateView.as_view()), name='areas-manage')
]

73
areas/views.py Normal file
View File

@ -0,0 +1,73 @@
from django.shortcuts import render
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, View
from .models import Areas
from django.contrib import messages
from .forms import AreaAddAreaForm
from django.contrib.auth.models import User
class AreasManagement(LoginRequiredMixin, ListView):
model = Areas
# Adding active_link
# Loading only user same agency
# Change context and return for template-data
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
# # Get all Users of the Same Agency as logged user
areas_of_agency = Areas.objects.filter(agency__pk=self.request.user.profile.agency.pk)
context.update({'active_link' : 'areasmanagement', 'areas_of_agency':areas_of_agency})
return context
class AreasAddArea(LoginRequiredMixin, CreateView):
model = Areas
success_url = '/areas'
#fields = ['name', 'color', 'desc', 'usersfield']
form_class = AreaAddAreaForm
#def get(self,request,*args, **kwargs):
# # User ist der hier Aufgerufene, bzw. das Profil!
# return render (request, self.template_name, {'form':self.form_class(self.request.user), 'active_link': 'areasmanagement'})
# Adding active_link
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({'active_link' : 'areasmanagement'})
return context
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Bereich angelegt!')
# SAVE OBJECTS TO SIGNALE!
form.instance.agency = self.request.user.profile.agency
form.instance.created_area_by = self.request.user
return super().form_valid(form)
class AreaDeleteView(LoginRequiredMixin, DeleteView):
model = Areas
success_url = '/areas'
template_name = 'areas/area_confirm_delete.html'
def get_context_data(self, **kwargs):
context = super(AreaDeleteView, self).get_context_data(**kwargs)
context['active_link'] = 'areasmanagement'
return context
# Hier andere Nutzer ändern, wenn man Usersmanagement darf!
class AreaUpdateView(LoginRequiredMixin, UpdateView):
model = Areas
form_class= AreaAddAreaForm
template_name = 'areas/areas_update.html'
success_url = '/areas'
def get_context_data(self, **kwargs):
context = super(AreaUpdateView, self).get_context_data(**kwargs)
context['active_link'] = 'areasmanagement'
return context
def form_valid(self, form):
# Send message to the site
messages.success(self.request, f'Bereich aktualisiert!')
return super().form_valid(form)

View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

166
digitaleagentur/settings.py Normal file
View File

@ -0,0 +1,166 @@
"""
Django settings for digitaleagentur project.
Generated by 'django-admin startproject' using Django 2.2.7.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
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__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '_qv2t2lmsctjxpbb4rrp=op%_20_hxzonv^mvty1o85c)l$s^q'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'users.apps.UsersConfig',
'areas.apps.AreasConfig',
'tasks.apps.TasksConfig',
'standards.apps.StandardsConfig',
'crispy_forms',
'colorful',
'dal',
'dal_select2',
'multiselectfield',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
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.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'digitaleagentur.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'digitaleagentur.wsgi.application'
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME' : 'digitaleagentur',
'USER' : 'root',
'PASSWORD' : '',
'PORT' : 3306
}
}
# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/
LANGUAGE_CODE = 'de-de'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# REDIRCETTARGET AFTER SUCCHESSFULLY LOGIN
LOGIN_REDIRECT_URL = 'users-dashboard'
# LOGIN PAGE FOR LOGIN-REDIRECT
LOGIN_URL = 'login'
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = '/static/'
# CRISPY
CRISPY_TEMPLATE_PACK = 'bootstrap4'
# Bildspeicherpfad
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
# FOR COLORFIELD
GRAPPELLI_CLEAN_INPUT_TYPES = False
# ROLLS
'''
Rolle in der BASE.html unter USERS entsprechend einfügen und URL einfügen, damit das Modul auch gefunden wird!
0 = NICHT DIESE ROLLE
1 = HAT DIESE ROLLE
Wenn adminstrator = 1 dann darf keine andere Rolle 1 sein! Sonst wird das Menü links mehrfach ausgegeben
'''
#ROLLS = {"administrator": 0, "usermanagement": 0, "areamanagement": 0, "taskmanagement": 0}
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = "htrampe@gmail.com"
EMAIL_HOST_PASSWORD = "dtcpcpzvpnrkacnw"

28
digitaleagentur/urls.py Normal file
View File

@ -0,0 +1,28 @@
from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from django.conf import settings
from django.conf.urls.static import static
from users.views import AgencyCreateView
from . import views
'''
ADMINPAGE - Verwaltung der Super-User
- LOGIN-Page
dashboard/ --> Nach Login werden hier die URLS aus der Users-App eingebunden und dort alle URLS eingeladen
'''
urlpatterns = [
path('', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
path('admin/', admin.site.urls),
path('dashboard/', include('users.urls'), name="dashboard"),
path('areas/', include('areas.urls'), name="areas-management"),
path('password-reset/', auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'), name='password-reset'),
path('password-reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset_done.html'), name='password_reset_done'),
path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'), name='password_reset_confirm'),
path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset_complete.html'), name='password_reset_complete'),
path('register/', AgencyCreateView.as_view(template_name='users/register.html'), name='register'),
path('register/done', views.registerdone, name='register-done'),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3
digitaleagentur/views.py Normal file
View File

@ -0,0 +1,3 @@
from django.shortcuts import render
def registerdone(request):
return render (request, 'users/registercomplete.html')

16
digitaleagentur/wsgi.py Normal file
View File

@ -0,0 +1,16 @@
"""
WSGI config for digitaleagentur project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'digitaleagentur.settings')
application = get_wsgi_application()

21
manage.py Normal file
View File

@ -0,0 +1,21 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'digitaleagentur.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 KiB

BIN
media/default.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

0
standards/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3
standards/admin.py Normal file
View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

5
standards/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class StandardsConfig(AppConfig):
name = 'standards'

View File

3
standards/models.py Normal file
View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

3
standards/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
standards/views.py Normal file
View File

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

0
tasks/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3
tasks/admin.py Normal file
View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

5
tasks/apps.py Normal file
View File

@ -0,0 +1,5 @@
from django.apps import AppConfig
class TasksConfig(AppConfig):
name = 'tasks'

View File

Binary file not shown.

3
tasks/models.py Normal file
View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

3
tasks/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
tasks/views.py Normal file
View File

@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

0
users/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More