Browse Source

Authentication

master
Denis Tereshkin 9 years ago
parent
commit
93b3c87f6d
  1. 5
      forms.py
  2. 7
      templates/dashboard/base.html
  3. 14
      templates/dashboard/login.html
  4. 2
      urls.py
  5. 64
      views.py

5
forms.py

@ -9,6 +9,10 @@ def get_all_accounts_and_strategies(): @@ -9,6 +9,10 @@ def get_all_accounts_and_strategies():
all_strategies.add(trade.strategyId)
return (all_accounts, all_strategies)
class LoginForm(forms.Form):
username = forms.CharField(max_length=64)
password = forms.CharField(widget=forms.PasswordInput)
class NewTradeForm(forms.Form):
timestamp = forms.DateTimeField()
account = forms.CharField(max_length=256)
@ -28,4 +32,3 @@ class ClosedTradeFilterForm(forms.Form): @@ -28,4 +32,3 @@ class ClosedTradeFilterForm(forms.Form):
all_accounts, all_strategies = get_all_accounts_and_strategies()
self.fields['accounts'] = forms.MultipleChoiceField(choices=zip(list(all_accounts), list(all_accounts)), required=False)
self.fields['strategies'] = forms.MultipleChoiceField(choices=zip(list(all_strategies), list(all_strategies)), required=False)

7
templates/dashboard/base.html

@ -19,6 +19,12 @@ @@ -19,6 +19,12 @@
<li><a href="{% url 'trades_index' %}">Trades</a></li>
<li><a href="{% url 'closed_trades_index' %}">Closed</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
{% if user.username %}
<li><a href="#">Logged in as: {{ user.username }}</a></li>
<li><a href="{% url 'logout' %}">Logout</a></li>
{% endif %}
</ul>
</nav>
{% bootstrap_messages %}
@ -28,4 +34,3 @@ @@ -28,4 +34,3 @@
</div>
</body>
</html>

14
templates/dashboard/login.html

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
{% extends "dashboard/base.html" %}
{% load static %}
{% load bootstrap3 %}
{% block content %}
<form action="{% url 'login' %}" method="POST">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
{% bootstrap_form login_form %}
{% bootstrap_button button_type='submit' content='Submit' %}
</form>
{% endblock %}

2
urls.py

@ -5,6 +5,8 @@ from . import views @@ -5,6 +5,8 @@ from . import views
urlpatterns = [
url(r'^$', views.overview, name='overview'),
url(r'^login$', views.login_view, name='login'),
url(r'^logout$', views.logout_view, name='logout'),
url(r'^add_instance$', views.add_instance, name='add_instance'),
url(r'^delete_instance/(?P<instance_id>[^/]+)$', views.delete_instance, name='delete_instance'),
url(r'^trades/$', views.trades_index, name='trades_index'),

64
views.py

@ -4,14 +4,56 @@ from django.template import loader @@ -4,14 +4,56 @@ from django.template import loader
from django.shortcuts import render, get_object_or_404
from django.urls import reverse
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.db import transaction
from django.contrib.auth import authenticate, login, logout
from .models import RobotInstance, Trade, ClosedTrade
from .forms import NewTradeForm, ClosedTradeFilterForm
from .forms import NewTradeForm, ClosedTradeFilterForm, LoginForm
import redis
import json
import datetime
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
nextlink = request.POST.get('next', '')
if form.is_valid():
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
if nextlink == "":
return HttpResponseRedirect(reverse('overview'))
else:
return HttpResponseRedirect(nextlink)
else:
return HttpResponseRedirect(reverse('login'))
else:
template = loader.get_template('dashboard/login.html')
context = {
'login_form' : form,
'next' : nextlink
}
return HttpResponse(template.render(context, request))
else:
form = LoginForm()
template = loader.get_template('dashboard/login.html')
nextlink = request.GET.get('next', '')
context = {
'login_form' : form,
'next' : nextlink
}
return HttpResponse(template.render(context, request))
raise Http404("Invalid method")
def logout_view(request):
logout(request)
return HttpResponseRedirect(reverse('login'))
@login_required
def overview(request):
r = redis.StrictRedis(unix_socket_path='/var/run/redis/redis')
robot_instances = RobotInstance.objects.order_by('instanceId')
@ -55,10 +97,12 @@ def overview(request): @@ -55,10 +97,12 @@ def overview(request):
template = loader.get_template('dashboard/overview.html')
context = {
'robot_instances' : robot_instances,
'robot_states' : robot_states
'robot_states' : robot_states,
'user' : request.user
}
return HttpResponse(template.render(context, request))
@login_required
def add_instance(request):
instance_id = request.POST['instance_id']
if instance_id == "" or RobotInstance.objects.filter(instanceId=instance_id).count() > 0:
@ -68,11 +112,13 @@ def add_instance(request): @@ -68,11 +112,13 @@ def add_instance(request):
new_instance.save()
return HttpResponseRedirect(reverse('overview'))
@login_required
def delete_instance(request, instance_id):
instance = get_object_or_404(RobotInstance, instanceId=instance_id)
instance.delete()
return HttpResponseRedirect(reverse('overview'))
@login_required
def trades_index(request):
now = datetime.datetime.utcnow()
new_trade_form = NewTradeForm(initial={'timestamp' : now})
@ -80,15 +126,18 @@ def trades_index(request): @@ -80,15 +126,18 @@ def trades_index(request):
template = loader.get_template('dashboard/trades.html')
context = {
'trades' : trades,
'new_trade_form' : new_trade_form
'new_trade_form' : new_trade_form,
'user' : request.user
}
return HttpResponse(template.render(context, request))
@login_required
def delete_trade(request, trade_id):
trade = get_object_or_404(Trade, pk=trade_id)
trade.delete()
return HttpResponseRedirect(reverse('trades_index'))
@login_required
def add_trade(request):
if request.method == 'POST':
form = NewTradeForm(request.POST)
@ -106,7 +155,8 @@ def add_trade(request): @@ -106,7 +155,8 @@ def add_trade(request):
template = loader.get_template('dashboard/trades.html')
context = {
'trades' : trades,
'new_trade_form' : form
'new_trade_form' : form,
'user' : request.user
}
return HttpResponse(template.render(context, request))
raise Http404("Invalid method")
@ -178,6 +228,7 @@ def make_cumulative_profits(closed_trades): @@ -178,6 +228,7 @@ def make_cumulative_profits(closed_trades):
result[trade.account]['elements'].append(element)
return result
@login_required
def closed_trades_index(request):
aggregate_unbalanced_trades()
form = ClosedTradeFilterForm(request.GET)
@ -207,7 +258,8 @@ def closed_trades_index(request): @@ -207,7 +258,8 @@ def closed_trades_index(request):
context = {
'closed_trades' : closed_trades,
'closed_trades_filter_form' : form,
'cumulative_profits' : cum_profits
'cumulative_profits' : cum_profits,
'user' : request.user
}
return HttpResponse(template.render(context, request))
@ -216,7 +268,7 @@ def do_rebalance(): @@ -216,7 +268,7 @@ def do_rebalance():
ClosedTrade.objects.all().delete()
Trade.objects.all().update(balanced=False)
@login_required
def rebalance_closed_trades(request):
do_rebalance()
return HttpResponseRedirect(reverse('closed_trades_index'))

Loading…
Cancel
Save