60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
from braces.views import LoginRequiredMixin
|
|
from django.core.urlresolvers import reverse
|
|
from django.db.models import Count
|
|
from django.shortcuts import get_object_or_404, render
|
|
from django.views.generic import RedirectView, UpdateView
|
|
from rest_framework.authtoken.models import Token
|
|
|
|
from network.base.forms import StationForm
|
|
from network.base.models import Antenna, Observation, Station
|
|
from network.base.perms import schedule_perms
|
|
from network.users.forms import UserForm
|
|
from network.users.models import User
|
|
|
|
|
|
class UserRedirectView(LoginRequiredMixin, RedirectView):
|
|
permanent = False
|
|
|
|
def get_redirect_url(self):
|
|
return reverse("users:view_user",
|
|
kwargs={"username": self.request.user.username})
|
|
|
|
|
|
class UserUpdateView(LoginRequiredMixin, UpdateView):
|
|
|
|
form_class = UserForm
|
|
|
|
model = User
|
|
|
|
def get_success_url(self):
|
|
return reverse("users:view_user",
|
|
kwargs={"username": self.request.user.username})
|
|
|
|
def get_object(self):
|
|
return User.objects.get(username=self.request.user.username)
|
|
|
|
|
|
def view_user(request, username):
|
|
"""View for user page."""
|
|
user = get_object_or_404(User, username=username)
|
|
observations = Observation.objects.filter(author=user)[0:10]
|
|
stations = Station.objects.filter(owner=user).annotate(total_obs=Count('observations'))
|
|
token = ''
|
|
|
|
can_schedule = False
|
|
if request.user.is_authenticated():
|
|
can_schedule = schedule_perms(request.user)
|
|
|
|
if request.user == user:
|
|
try:
|
|
token = Token.objects.get(user=user)
|
|
except Token.DoesNotExist:
|
|
token = Token.objects.create(user=user)
|
|
form = StationForm()
|
|
antennas = Antenna.objects.all()
|
|
|
|
return render(request, 'users/user_detail.html',
|
|
{'user': user, 'observations': observations, 'stations': stations,
|
|
'token': token, 'form': form, 'antennas': antennas,
|
|
'can_schedule': can_schedule})
|