summaryrefslogtreecommitdiff
path: root/sbhs/views.py
diff options
context:
space:
mode:
authorCruiseDevice2018-08-20 14:27:51 +0530
committerCruiseDevice2018-08-20 14:40:22 +0530
commit181145960d94abb1fe6ebe0a2a568ed497a043ad (patch)
tree4e71e86b1ee8030ff873164a9f2178f86aff9e7a /sbhs/views.py
parenta4b050af22d7235393c2d5d78f825975d25456ad (diff)
downloadsbhs_server-181145960d94abb1fe6ebe0a2a568ed497a043ad.tar.gz
sbhs_server-181145960d94abb1fe6ebe0a2a568ed497a043ad.tar.bz2
sbhs_server-181145960d94abb1fe6ebe0a2a568ed497a043ad.zip
application views and its urls
Diffstat (limited to 'sbhs/views.py')
-rw-r--r--sbhs/views.py261
1 files changed, 259 insertions, 2 deletions
diff --git a/sbhs/views.py b/sbhs/views.py
index 91ea44a..41525a6 100644
--- a/sbhs/views.py
+++ b/sbhs/views.py
@@ -1,3 +1,260 @@
-from django.shortcuts import render
+import os
+import sys
+import time
+import json
+import random
+import zipfile
+import inspect
+import pytz
+# import MySQLdb
+import datetime
+import requests
+import subprocess
+# import serial
+from textwrap import dedent
+from time import gmtime, strftime
+from datetime import datetime
-# Create your views here.
+from django.urls import reverse
+from django.conf import settings
+from django.db import connection
+from django.utils import timezone
+from django.db.models import Count
+# import automatic_slot_booking
+from django.contrib import messages
+from django.template.loader import render_to_string
+from django.views.decorators.csrf import csrf_exempt
+from django.contrib.auth.decorators import login_required
+from django.contrib.auth import login, logout, authenticate
+from django.shortcuts import render, redirect, get_object_or_404
+from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
+from django.http import HttpResponse, HttpResponseRedirect,\
+ Http404, HttpResponseServerError
+
+from .models import Board, Experiment, Profile, Slot#, Webcam
+from .forms import UserLoginForm, UserRegistrationForm, SlotCreationForm
+from . import sbhs
+from .send_emails import send_user_mail
+from sbhs_server import credentials as credentials
+
+from sbhs.decorators import email_verified
+from . import switch_off
+from . import switch_onn
+
+
+# ser = serial.Serial('/dev/ttyUSB0')
+
+# required for experiment views
+currentdir = os.path.dirname(
+ os.path.abspath(inspect.getfile(inspect.currentframe())))
+parentdir = os.path.dirname(currentdir)
+sys.path.insert(0, parentdir)
+
+
+################# pages views #######################
+
+
+def index(request, next_url=None):
+ if request.user.is_authenticated():
+ return render(request,'account/home.html')
+ return render(request,"pages/pages_index.html")
+
+def about(req):
+ return render(req, "pages/about.html")
+
+
+def info(request):
+ return render(request,"pages/info.html")
+
+def downloads(req):
+ return redirect("http://sbhs.os-hardware.in/downloads")
+
+
+def theory(req):
+ return render(req, "pages/theory.html")
+
+def procedure(req):
+ return render(req, "pages/procedure.html")
+
+def experiments(req):
+ return render(req, "pages/experiments.html")
+
+def feedback(req):
+ return render(req, "pages/feedback.html")
+
+#########Account Views ###########
+@email_verified
+def account_index(request):
+ if request.user.is_authenticated():
+ return render(request,'account/home.html')
+
+ return render(request,'account/account_index.html',{
+ 'login_form':UserLoginForm(request.POST or None),
+ 'registration_form':UserRegistrationForm(request.POST or None)
+ })
+
+def user_login(request):
+ user = request.user
+ context = {}
+ if user.is_authenticated():
+ return account_index(request)
+
+ if request.method == 'POST':
+ form = UserLoginForm(request.POST)
+ if form.is_valid():
+ cd = form.cleaned_data
+ user = authenticate(username=cd['username'],
+ password=cd['password'])
+ if user is not None:
+ if user.is_active:
+ login(request,user)
+ return redirect('account_enter')
+ else:
+ messages.success(request,"Account Disabled")
+ return redirect('account_enter')
+ else:
+ messages.success(request, "Username and/or Password is \
+ invalid")
+ return redirect('account_enter')
+ else:
+ context={
+ "login_form": form
+ }
+ else:
+ form = UserLoginForm()
+ context = {
+ "login_form":form
+ }
+ return redirect('account_enter')
+
+def user_logout(request):
+ logout(request)
+ return redirect('account_enter')
+
+def user_register(request):
+ user = request.user
+ if user.is_authenticated():
+ return render(request,'account/home.html')
+ context={}
+ if request.method == 'POST':
+ form = UserRegistrationForm(request.POST)
+ if form.is_valid():
+ u_name, pwd, user_email, key= form.save()
+ new_user = authenticate(username=u_name,password=pwd)
+ login(request, new_user)
+ if user_email and key:
+ success, msg = send_user_mail(user_email, key)
+ context = {
+ 'activation_msg':msg
+ }
+ return render(request,'account/activation_status.html',
+ context
+ )
+ return redirect('account_enter')
+ else:
+ return redirect('account_enter')
+ else:
+ return redirect('account_enter')
+
+def activate_user(request, key):
+ profile = get_object_or_404(Profile, activation_key=key)
+ context = {}
+ context['success'] = False
+ if profile.is_email_verified:
+ context['activation_msg'] = "Your account is already verified"
+ return render(request,'account/activation_status.html',context)
+ if timezone.now() > profile.key_expiry_time:
+ content['msg'] = dedent(
+ """
+ Your activation time expired. Please try again
+ """
+ )
+ else:
+ context['success'] = True
+ profile.is_email_verified=True
+ profile.save()
+ context['msg'] = "Your account is activated"
+ return render(request,'account/activation_status.html',context)
+
+def new_activation(request, email=None):
+ context = {}
+ if request.method == 'POST':
+ email = request.POST.get('email')
+ try:
+ user = User.objects.get(email=email)
+ except MultipleObjectsReturned:
+ context['email_err_msg'] = 'Multiple entries found for this email \
+ Please change your email'
+ return render(request,'account/activation_status.html',context)
+ except ObjectDoesNotExist:
+ context['success'] = False
+ context['msg'] = "Your account is not verified. Please verify your \
+ account"
+ return render(request, 'account/activation_status.html',context)
+
+ if not user.profile.is_email_verified:
+ user.profile.activation_key = generate_activation_key(user.username)
+ user.profile.key_expiry_time = timezone.now() \
+ + timezone.timedelta(minutes=20)
+ user.profile.save()
+ new_user_data = User.objects.get(email=email)
+ success, msg = send_user_mail(new_user_data.email, \
+ new_user_data.profile.activation_key)
+
+ if success:
+ context['activation_msg'] = msg
+ else:
+ context['msg'] = msg
+ else:
+ context['activation_msg'] = "Your account is already verified"
+ return render(request,'account/activation_status.html',{})
+
+def update_email(request):
+ context = {}
+ if request.method == 'POST':
+ email = request.POST.get('email')
+ username = request.POST.get('username')
+ user = get_object_or_404(User, username=username)
+ user.email = email
+ user.save()
+ return new_activation(request, email)
+ else:
+ context['email_err_msg'] = "Please Update your email"
+ return render(request,'account/activation_status.html',context)
+
+@login_required
+@email_verified
+def slot_new(request):
+ user = request.user
+ slot_history = Slot.objects.filter(user=user).order_by("start_time")
+ context = {}
+ now = datetime.now(pytz.timezone("UTC"))
+ if not request.user.is_authenticated():
+ return redirect('account_enter')
+ if request.method == 'POST':
+ if request.POST.get('delete') == "delete":
+ slots = request.POST.getlist("slots")
+ Slot.objects.filter(id__in=slots).delete()
+ return redirect('slot_new')
+ else:
+ form = SlotCreationForm(request.POST)
+
+ if form.is_valid():
+ new_slot = form.save(commit=False)
+ if new_slot.start_time >= now:
+ new_slot.user = user
+ new_slot.save()
+ messages.success(request,'Slot created successfully.')
+ else:
+ messages.error(request,
+ 'Start time selected'
+ + ' is before today.'
+ + 'Please choose again.'
+ )
+ return redirect('slot_new')
+ else:
+ form = SlotCreationForm()
+ context['history']=slot_history
+ context['form']=form
+ context['now'] = now
+ return render(request,'slot/new.html',context)