Initial login templates and views

master
Bradlee Speice 2013-02-05 14:20:26 -05:00
parent c5fec8cfd3
commit 4f9b717674
8 changed files with 71 additions and 33 deletions

View File

@ -1,10 +1,11 @@
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
web_urls = patterns('web.views.views', web_urls = patterns('web.views',
# Examples: # Examples:
# url(r'^$', 'Melodia.views.home', name='home'), # url(r'^$', 'Melodia.views.home', name='home'),
# url(r'^Melodia/', include('Melodia.foo.urls')), # url(r'^Melodia/', include('Melodia.foo.urls')),
url(r'^$|main/', 'main'), url(r'^$|main/', 'index.main'),
url(r'^login/', 'login_page'), url(r'^login/', 'authentication.login'),
url(r'^logout/', 'authentication.logout'),
) )

View File

@ -1,18 +1,33 @@
from django.http import HttpResponse from django.http import HttpResponse
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, forms from django.contrib.auth import login as django_login
from django import forms as django_forms from django.contrib.auth import logout as django_logout
from django.contrib.auth import forms
from django.template import RequestContext from django.template import RequestContext
from django.shortcuts import render_to_response, redirect from django.shortcuts import render_to_response, redirect
#Melodia-specific utilities #Melodia-specific utilities
from web_utils import json_response as json from web_utils import json_response as json
@login_required def _user_authenticate(request):
def main(request): form = forms.AuthenticationForm(data=request.POST)
return render_to_response("main", context_instance = RequestContext(request)) if form.is_valid():
try:
cleaned_data = form.clean()
django_login(request, form.get_user())
return redirect("/")
def login_page(request): except:
#Invalid login, or ValidationError
return render_to_response("login", context_instance = RequestContext(request,
{"auth_form": forms.AuthenticationForm(data=request.POST),
"login_error": "Internal error trying to log in."} ))
else:
return render_to_response("login", context_instance = RequestContext(request,
{"auth_form": forms.AuthenticationForm(data=request.POST),
"login_error": "Unrecognized username or password."} ))
def login(request):
if request.method == "POST": if request.method == "POST":
#Someone is trying to log in #Someone is trying to log in
return _user_authenticate(request) return _user_authenticate(request)
@ -20,21 +35,6 @@ def login_page(request):
return render_to_response("login", context_instance = RequestContext(request, return render_to_response("login", context_instance = RequestContext(request,
{"auth_form": forms.AuthenticationForm()} )) {"auth_form": forms.AuthenticationForm()} ))
def _user_authenticate(request): def logout(request):
form = forms.AuthenticationForm(data=request.POST) django_logout(request)
if form.is_valid(): return redirect("/login")
try:
cleaned_data = form.clean()
print cleaned_data
login(request, form.get_user())
return redirect("/")
except django_forms.ValidationError:
#Invalid login
return json(success = False,
message = "Either the username or the password was not recognized.")
else:
return render_to_response("login", context_instance = RequestContext(request,
{"auth_form": forms.AuthenticationForm(data=request.POST),
"login_error": form.errors} ))

13
web/views/index.py Normal file
View File

@ -0,0 +1,13 @@
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, forms
from django import forms as django_forms
from django.template import RequestContext
from django.shortcuts import render_to_response, redirect
#Melodia-specific utilities
from web_utils import json_response as json
@login_required
def main(request):
return render_to_response("index", context_instance = RequestContext(request))

View File

@ -36,7 +36,18 @@ List of block elements in this page:
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="brand" href="#">{% block navbar_title %}{% endblock %}</a> <a class="brand" href="#">{% block navbar_title %}{% endblock %}</a>
{% block navbar_content %}{% endblock %}
{% block navbar_content %}
<div class="btn-group pull-right">
<a class="btn" href="#">{{ user.username }}</a>
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret" /></a>
<ul class="dropdown-menu">
<li id="btn_logout"><a href="/logout">Logout</a></li>
</ul>
</div>
{% endblock %}
</div> </div>
</div> </div>
</div> </div>

View File

@ -0,0 +1,11 @@
{# This component assumes it has been placed in a sidebar, and controls options related to playlists. #}
<ul class="nav nav-list">
<li class="nav-header">Playlists</li>
{% for playlist in Playlist.objects.all %}
<li>{{ playlist.name }}</li>
{% endfor %}
</ul>
<!-- vim: ft=htmldjango

View File

@ -5,7 +5,7 @@
{% block navbar_title %}Melodia{% endblock %} {% block navbar_title %}Melodia{% endblock %}
{% block sidebar_content %} {% block sidebar_content %}
<a href="#">Sidebar content goes here.</a> {% include "components/playlist_sidebar" %}
{% endblock %} {% endblock %}
{% block body_content %} {% block body_content %}

View File

@ -3,8 +3,10 @@
{% block page_title %}Login to Melodia{% endblock %} {% block page_title %}Login to Melodia{% endblock %}
{% block navbar_title %}Login to Melodia{% endblock %} {% block navbar_title %}Login to Melodia{% endblock %}
{# Disable navbar content other than the title #}
{% block navbar_content %}{% endblock %}
{# Specifying a blank sidebar, rather than sidebar_content, allows us to remove the sidebar entirely. #} {# Similar to navbar, but remove entire sidebar #}
{% block sidebar %}{% endblock %} {% block sidebar %}{% endblock %}
{% block body %} {% block body %}
@ -22,8 +24,8 @@
<button class="btn btn-primary">Login to Melodia</button> <button class="btn btn-primary">Login to Melodia</button>
</form> </form>
{% if auth_form.non_field_errors %} {% if login_error %}
<div class="alert alert-error span4 offset4">{{ auth_form.non_field_errors }}</div> <div class="alert alert-error span4 offset4">{{ login_error }}</div>
{% endif %} {% endif %}
</center> </center>

View File

@ -4,7 +4,7 @@ from django.http import HttpResponse
def json_response(**kwargs): def json_response(**kwargs):
#This is used to make sure that we have a standard json response #This is used to make sure that we have a standard json response
response = [] response = {}
for key, value in kwargs.iteritems(): for key, value in kwargs.iteritems():
response[key] = value response[key] = value