diff options
author | CruiseDevice | 2018-08-20 14:27:51 +0530 |
---|---|---|
committer | CruiseDevice | 2018-08-20 14:40:22 +0530 |
commit | 181145960d94abb1fe6ebe0a2a568ed497a043ad (patch) | |
tree | 4e71e86b1ee8030ff873164a9f2178f86aff9e7a /sbhs/views.py | |
parent | a4b050af22d7235393c2d5d78f825975d25456ad (diff) | |
download | sbhs_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.py | 261 |
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) |