-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
46 changed files
with
925 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
web: gunicorn iriot.wsgi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# Heroku Django Starter Template | ||
|
||
An utterly fantastic project starter template for Django 1.9. | ||
|
||
## Features | ||
|
||
- Production-ready configuration for Static Files, Database Settings, Gunicorn, etc. | ||
- Enhancements to Django's static file serving functionality via WhiteNoise | ||
|
||
## How to Use | ||
|
||
To use this project, follow these steps: | ||
|
||
1. Create your working environment. | ||
2. Install Django (`$ pip install django`) | ||
3. Create a new project using this template | ||
|
||
## Creating Your Project | ||
|
||
Using this template to create a new Django app is easy:: | ||
|
||
$ django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile helloworld | ||
|
||
You can replace ``helloworld`` with your desired project name. | ||
|
||
## Deployment to Heroku | ||
|
||
$ git init | ||
$ git add -A | ||
$ git commit -m "Initial commit" | ||
|
||
$ heroku create | ||
$ git push heroku master | ||
|
||
$ heroku run python manage.py migrate | ||
|
||
See also, a [ready-made application](https://github.com/heroku/python-getting-started), ready to deploy. | ||
|
||
## Further Reading | ||
|
||
- [Gunicorn](https://warehouse.python.org/project/gunicorn/) | ||
- [WhiteNoise](https://warehouse.python.org/project/whitenoise/) | ||
- [dj-database-url](https://warehouse.python.org/project/dj-database-url/) |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from django.contrib import admin | ||
|
||
# Register your models here. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
from django import forms | ||
from django.contrib.auth.models import User | ||
|
||
class UserForm(forms.ModelForm): | ||
password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control'})) | ||
first_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'})) | ||
last_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'})) | ||
username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'})) | ||
email = forms.EmailField(widget=forms.TextInput(attrs={'class':'form-control'})) | ||
class Meta: | ||
model = User | ||
fields = ('username', 'first_name', 'last_name', 'email', 'password') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
from django.db import models | ||
|
||
# Create your models here. | ||
|
||
from django.contrib.auth.models import User |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{% extends "master/base.html" %} | ||
{% block body_block %} | ||
<h1>Login</h1> | ||
|
||
<form id="login_form" method="post" action="/accounts/login/"> | ||
{% csrf_token %} | ||
<label for="username">Username</label> | ||
<input class="form-control" type="text" name="username" value="" size="50" /> | ||
<br /> | ||
<label for="password">Password</label> | ||
<input class="form-control" type="password" name="password" value="" size="50" /> | ||
<br /> | ||
|
||
<input type="submit" value="submit" class="btn btn-default" /> | ||
</form> | ||
{% endblock %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
{% extends "master/base.html" %} | ||
{% block body_block %} | ||
<h1>Register</h1> | ||
|
||
{% if registered %} | ||
<H2>You are Registered. <a href="{% url 'master:index' %}">Continue to Home Page.</a></H2> | ||
{% else %} | ||
|
||
<form id="user_form" method="post" action="/accounts/register/" enctype="multipart/form-data"> | ||
|
||
{% csrf_token %} | ||
|
||
<!-- Display each form. The as_p method wraps each element in a paragraph | ||
(<p>) element. This ensures each element appears on a new line, | ||
making everything look neater. --> | ||
{% for field in user_form.visible_fields %} | ||
<div class="form-group"> | ||
{{ field.errors }} | ||
<label>{{ field.label }}</label> | ||
{{ field }} | ||
</div> | ||
{% endfor %} | ||
|
||
<!-- Provide a button to click to submit the form. --> | ||
<input class="btn btn-primary" type="submit" name="submit" value="Register" /> | ||
</form> | ||
{% endif %} | ||
{% endblock %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from django.test import TestCase | ||
|
||
# Create your tests here. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
from django.conf.urls import url | ||
|
||
from . import views | ||
|
||
urlpatterns = [ | ||
url(r'^register/$', views.register, name='register'), | ||
url(r'^login/$', views.user_login, name='login'), | ||
url(r'^logout/$', views.user_logout, name='logout'), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
from django.shortcuts import render | ||
from django.http import HttpResponse, HttpResponseRedirect | ||
from django.contrib.auth import authenticate, login, logout | ||
from .forms import UserForm | ||
from django.contrib.auth.decorators import login_required | ||
from django.contrib import messages | ||
from django.core.urlresolvers import reverse | ||
from django.contrib.auth.models import User | ||
|
||
def register(request): | ||
|
||
# A boolean value for telling the template whether the registration was successful. | ||
# Set to False initially. Code changes value to True when registration succeeds. | ||
registered = False | ||
|
||
# If it's a HTTP POST, we're interested in processing form data. | ||
if request.method == 'POST': | ||
# Attempt to grab information from the raw form information. | ||
# Note that we make use of both UserForm and UserProfileForm. | ||
user_form = UserForm(data=request.POST) | ||
|
||
# If the two forms are valid... | ||
if user_form.is_valid(): | ||
# Save the user's form data to the database. | ||
user = user_form.save() | ||
|
||
# Now we hash the password with the set_password method. | ||
# Once hashed, we can update the user object. | ||
user.set_password(user.password) | ||
|
||
user.save() | ||
|
||
registered = True | ||
|
||
# Invalid form or forms - mistakes or something else? | ||
# Print problems to the terminal. | ||
# They'll also be shown to the user. | ||
else: | ||
print(user_form.errors) | ||
|
||
# Not a HTTP POST, so we render our form using two ModelForm instances. | ||
# These forms will be blank, ready for user input. | ||
else: | ||
user_form = UserForm() | ||
|
||
# Render the template depending on the context. | ||
return render(request, 'accounts/register.html', {'user_form': user_form, 'registered': registered} ) | ||
|
||
def user_login(request): | ||
|
||
# If the request is a HTTP POST, try to pull out the relevant information. | ||
if request.method == 'POST': | ||
# Gather the username and password provided by the user. | ||
# This information is obtained from the login form. | ||
# We use request.POST.get('<variable>') as opposed to request.POST['<variable>'], | ||
# because the request.POST.get('<variable>') returns None, if the value does not exist, | ||
# while the request.POST['<variable>'] will raise key error exception | ||
username = request.POST.get('username') | ||
password = request.POST.get('password') | ||
|
||
# Use Django's machinery to attempt to see if the username/password | ||
# combination is valid - a User object is returned if it is. | ||
user = authenticate(username=username, password=password) | ||
|
||
# If we have a User object, the details are correct. | ||
# If None (Python's way of representing the absence of a value), no user | ||
# with matching credentials was found. | ||
if user: | ||
# Is the account active? It could have been disabled. | ||
if user.is_active: | ||
# If the account is valid and active, we can log the user in. | ||
# We'll send the user back to the homepage. | ||
login(request, user) | ||
return HttpResponseRedirect('/') | ||
else: | ||
# An inactive account was used - no logging in! | ||
messages.warning(request, 'Your account is disabled. Please contact support.') | ||
return HttpResponseRedirect('/') | ||
else: | ||
# Bad login details were provided. So we can't log the user in. | ||
# TODO: USE FLASH MESSAGES ----------------- | ||
messages.warning(request, 'Invalid Login.') | ||
return HttpResponseRedirect(reverse('accounts:login')) | ||
|
||
# The request is not a HTTP POST, so display the login form. | ||
# This scenario would most likely be a HTTP GET. | ||
else: | ||
# No context variables to pass to the template system, hence the | ||
# blank dictionary object... | ||
return render(request, 'accounts/login.html', {}) | ||
|
||
|
||
# Use the login_required() decorator to ensure only those logged in can access the view. | ||
@login_required | ||
def user_logout(request): | ||
# Since we know the user is logged in, we can now just log them out. | ||
logout(request) | ||
messages.success(request, 'You are now logged out.') | ||
return HttpResponseRedirect('/') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# This file must be used with "source bin/activate" *from bash* | ||
# you cannot run it directly | ||
|
||
deactivate () { | ||
unset -f pydoc >/dev/null 2>&1 | ||
|
||
# reset old environment variables | ||
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all | ||
if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then | ||
PATH="$_OLD_VIRTUAL_PATH" | ||
export PATH | ||
unset _OLD_VIRTUAL_PATH | ||
fi | ||
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then | ||
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" | ||
export PYTHONHOME | ||
unset _OLD_VIRTUAL_PYTHONHOME | ||
fi | ||
|
||
# This should detect bash and zsh, which have a hash command that must | ||
# be called to get it to forget past commands. Without forgetting | ||
# past commands the $PATH changes we made may not be respected | ||
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then | ||
hash -r 2>/dev/null | ||
fi | ||
|
||
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then | ||
PS1="$_OLD_VIRTUAL_PS1" | ||
export PS1 | ||
unset _OLD_VIRTUAL_PS1 | ||
fi | ||
|
||
unset VIRTUAL_ENV | ||
if [ ! "${1-}" = "nondestructive" ] ; then | ||
# Self destruct! | ||
unset -f deactivate | ||
fi | ||
} | ||
|
||
# unset irrelevant variables | ||
deactivate nondestructive | ||
|
||
VIRTUAL_ENV="/Users/jameswindsor/Documents/Capstone/iRiot-WebApp" | ||
export VIRTUAL_ENV | ||
|
||
_OLD_VIRTUAL_PATH="$PATH" | ||
PATH="$VIRTUAL_ENV/bin:$PATH" | ||
export PATH | ||
|
||
# unset PYTHONHOME if set | ||
if ! [ -z "${PYTHONHOME+_}" ] ; then | ||
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" | ||
unset PYTHONHOME | ||
fi | ||
|
||
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then | ||
_OLD_VIRTUAL_PS1="$PS1" | ||
if [ "x" != x ] ; then | ||
PS1="$PS1" | ||
else | ||
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" | ||
fi | ||
export PS1 | ||
fi | ||
|
||
# Make sure to unalias pydoc if it's already there | ||
alias pydoc 2>/dev/null >/dev/null && unalias pydoc | ||
|
||
pydoc () { | ||
python -m pydoc "$@" | ||
} | ||
|
||
# This should detect bash and zsh, which have a hash command that must | ||
# be called to get it to forget past commands. Without forgetting | ||
# past commands the $PATH changes we made may not be respected | ||
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then | ||
hash -r 2>/dev/null | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
# This file must be used with "source bin/activate.csh" *from csh*. | ||
# You cannot run it directly. | ||
# Created by Davide Di Blasi <[email protected]>. | ||
|
||
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' | ||
|
||
# Unset irrelevant variables. | ||
deactivate nondestructive | ||
|
||
setenv VIRTUAL_ENV "/Users/jameswindsor/Documents/Capstone/iRiot-WebApp" | ||
|
||
set _OLD_VIRTUAL_PATH="$PATH" | ||
setenv PATH "$VIRTUAL_ENV/bin:$PATH" | ||
|
||
|
||
|
||
if ("" != "") then | ||
set env_name = "" | ||
else | ||
set env_name = `basename "$VIRTUAL_ENV"` | ||
endif | ||
|
||
# Could be in a non-interactive environment, | ||
# in which case, $prompt is undefined and we wouldn't | ||
# care about the prompt anyway. | ||
if ( $?prompt ) then | ||
set _OLD_VIRTUAL_PROMPT="$prompt" | ||
set prompt = "[$env_name] $prompt" | ||
endif | ||
|
||
unset env_name | ||
|
||
alias pydoc python -m pydoc | ||
|
||
rehash | ||
|
Oops, something went wrong.