diff options
Diffstat (limited to 'sbhs/views.py')
-rw-r--r-- | sbhs/views.py | 435 |
1 files changed, 268 insertions, 167 deletions
diff --git a/sbhs/views.py b/sbhs/views.py index 41525a6..803d460 100644 --- a/sbhs/views.py +++ b/sbhs/views.py @@ -13,7 +13,7 @@ import subprocess # import serial from textwrap import dedent from time import gmtime, strftime -from datetime import datetime +from datetime import datetime, timedelta, date from django.urls import reverse from django.conf import settings @@ -29,7 +29,7 @@ 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 + Http404, HttpResponseServerError, JsonResponse from .models import Board, Experiment, Profile, Slot#, Webcam from .forms import UserLoginForm, UserRegistrationForm, SlotCreationForm @@ -42,11 +42,12 @@ from . import switch_off from . import switch_onn +LIMIT = 2 # ser = serial.Serial('/dev/ttyUSB0') # required for experiment views currentdir = os.path.dirname( - os.path.abspath(inspect.getfile(inspect.currentframe()))) + os.path.abspath(inspect.getfile(inspect.currentframe()))) parentdir = os.path.dirname(currentdir) sys.path.insert(0, parentdir) @@ -55,12 +56,12 @@ sys.path.insert(0, parentdir) def index(request, next_url=None): - if request.user.is_authenticated(): - return render(request,'account/home.html') - return render(request,"pages/pages_index.html") + 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") + return render(req, "pages/about.html") def info(request): @@ -71,190 +72,290 @@ def downloads(req): def theory(req): - return render(req, "pages/theory.html") + return render(req, "pages/theory.html") def procedure(req): - return render(req, "pages/procedure.html") + return render(req, "pages/procedure.html") def experiments(req): - return render(req, "pages/experiments.html") + return render(req, "pages/experiments.html") def feedback(req): - return render(req, "pages/feedback.html") + 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') + 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) - }) + 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') + 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') + 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') + 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) + 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',{}) + 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) + 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) + user = request.user + slot_history = Slot.objects.filter(user=user).order_by("start_time") + context = {} + now = timezone.now() + 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() + if request.POST.get("book_date") == "book_date": + form = SlotCreationForm(request.POST) + if form.is_valid(): + new_slot = form.save(commit=False) + if new_slot.start_time >= now: + new_slot.end_time = new_slot.start_time + timedelta( + minutes=settings.SLOT_DURATION + ) + 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.' + ) + if request.POST.get("book_now") == "book_now": + slot_now = Slot.objects.create(user=user, start_time=now, + end_time=now+timedelta(minutes=55) + ) + messages.success(request,'Slot created successfully.') + return redirect("slot_new") + + else: + form = SlotCreationForm() + context['history']=slot_history + context['form']=form + context['now'] = now + return render(request,'slot/new.html',context) + + +################## Moderator Views ########################## + +@login_required +def dashboard_index(request): + context = {} + return render(request,'dashboard/dashboard_index.html',context) + +###################Experiment Views ###################### + +def check_connection(request): + message = {"message":"TESTOK"} + return JsonResponse(message, safe=True, status=200) + +@login_required +def initial_login(request): + """ Logs in an user for conducting the experiment on the specified + board. + Input: req:request object. + Output: HttpResponse object. + """ + + username = request.POST.get("username") + rpi_ip = '' + try: + assigned_mid = 2 + except Exception as e: + return JsonResponse({ + "STATUS":400, + "MESSAGE":{ + "IS_IP":"1", + "DATA":"Invalid username" + } + }) + rpi_ip = '10.102.54.71' + if rpi_ip is None: + return JsonResponse({ + "STATUS":400, + "MESSAGE":{ + "IS_IP":"1", + "DATA":"Board is currently offline" + } + }) + return JsonResponse({ + "STATUS":200, + "MESSAGE":{ + "IS_IP":"1", + "DATA":rpi_ip + } + }) + + +@csrf_exempt +def initiation(request): + username = request.POST.get("username") + password = request.POST.get("password") + user = authenticate(username=username, password=password) + if user: + if user.is_active: + now = timezone.now() + slots = Slot.objects.filter(user=user, + start_time__gte=now, + end_time__lt = now + ) + + slot = slots.last() + if slot: + filename = '' + message = { + "STATUS":1, + "MESSAGE": filename + } + else: + message = { + "STATUS":0, + "MESSAGE":"Slot has ended. Please book the next slot \ + to continue the experiment" + } + else: + message = { + "STATUS":0, + "MESSAGE":"Your account is not activated. Please check your \ + mail for activation link" + } + else: + message = { + "STATUS":0, + "MESSAGE":"Invalid username and password" + } + + return JsonResponse(message, safe=True, status=200)
\ No newline at end of file |