master
Nick Sergeant 2013-09-05 13:28:35 -04:00
parent 4f4f03880e
commit 21a825f10a
14 changed files with 155 additions and 133 deletions

0
jobs/__init__.py Normal file
View File

8
jobs/admin.py Normal file
View File

@ -0,0 +1,8 @@
from django.contrib import admin
from jobs.models import Job
class JobAdmin(admin.ModelAdmin):
list_display = ('title', 'company', 'location', 'url',)
admin.site.register(Job, JobAdmin)

View File

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'Job'
db.create_table(u'jobs_job', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=255)),
('company', self.gf('django.db.models.fields.CharField')(max_length=255)),
('location', self.gf('django.db.models.fields.CharField')(max_length=255)),
('url', self.gf('django.db.models.fields.CharField')(max_length=255)),
('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
))
db.send_create_signal(u'jobs', ['Job'])
def backwards(self, orm):
# Deleting model 'Job'
db.delete_table(u'jobs_job')
models = {
u'jobs.job': {
'Meta': {'object_name': 'Job'},
'company': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'location': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'url': ('django.db.models.fields.CharField', [], {'max_length': '255'})
}
}
complete_apps = ['jobs']

View File

16
jobs/models.py Normal file
View File

@ -0,0 +1,16 @@
from django.db import models
class Job(models.Model):
"""An individual Job."""
title = models.CharField(max_length=255)
company = models.CharField(max_length=255)
location = models.CharField(max_length=255)
url = models.CharField(max_length=255)
created = models.DateTimeField(auto_now_add=True, editable=False)
modified = models.DateTimeField(auto_now=True, editable=False)
def __unicode__(self):
return self.title

View File

@ -0,0 +1,31 @@
{% extends "base.html" %}
{% load pagination_tags %}
{% block page-title %}Snipt Jobs{% endblock %}
{% block body-class %}{{ block.super }} static jobs{% endblock %}
{% block breadcrumb %}
<li><a href="/jobs/">Snipt Jobs</a></li>
{% endblock %}
{% block content %}
<section class="jobs">
<ul>
{% for job in jobs %}
<li>
<a href="{{ job.url }}" class="group">
<span class="left">
<span class="job">{{ job.title }}</span>
<span class="company">{{ job.company }}</span>
</span>
<span class="right">
<span class="location">{{ job.location }}</span>
</span>
</a>
</li>
{% endfor %}
</ul>
</section>
{% endblock %}

16
jobs/tests.py Normal file
View File

@ -0,0 +1,16 @@
"""
This file demonstrates writing tests using the unittest module. These will pass
when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):
"""
Tests that 1 + 1 always equals 2.
"""
self.assertEqual(1 + 1, 2)

9
jobs/views.py Normal file
View File

@ -0,0 +1,9 @@
from annoying.decorators import render_to
from jobs.models import Job
@render_to('jobs/jobs.html')
def jobs(request):
return {
'jobs': Job.objects.all().order_by('-created')
}

View File

@ -103,6 +103,7 @@ INSTALLED_APPS = (
'accounts', 'accounts',
'blogs', 'blogs',
'jobs',
'snipts', 'snipts',
'utils', 'utils',
) )

View File

@ -112,6 +112,9 @@
</button> </button>
</li> </li>
{% endif %} {% endif %}
<li>
<a href="/jobs/" {% if '/jobs/' in request.path %} class="active"{% endif %}>Jobs</a>
</li>
</ul> </ul>
</nav> </nav>
{% if request.user.is_authenticated %} {% if request.user.is_authenticated %}

View File

@ -35,6 +35,9 @@
<li> <li>
<a href="/search/">Search</a> <a href="/search/">Search</a>
</li> </li>
<li>
<a href="/jobs/">Jobs</a>
</li>
{% if not request.user.is_authenticated %} {% if not request.user.is_authenticated %}
<li> <li>
<a class="button" href="/login/">Log in</a> <a class="button" href="/login/">Log in</a>

View File

@ -1,118 +0,0 @@
{% extends "base.html" %}
{% load pagination_tags %}
{% block page-title %}Snipt Jobs{% endblock %}
{% block body-class %}{{ block.super }} static jobs{% endblock %}
{% block breadcrumb %}
<li><a href="/jobs/">Snipt Jobs</a></li>
{% endblock %}
{% block content %}
<section class="jobs">
<h4>New (7)</h4>
<ul>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
</ul>
<h4>Past week (27)</h4>
<ul>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
<li>
<a href="#" class="group">
<span class="left">
<span class="job">Visual Designer</span>
<span class="company">Acto A/S</span>
</span>
<span class="right">
<span class="location">Dallas, TX, USA</span>
<span class="date">Oct 15, 2012</span>
</span>
</a>
</li>
</ul>
</section>
{% endblock %}

11
urls.py
View File

@ -5,13 +5,15 @@ from django.views.generic import TemplateView
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.contrib import admin from django.contrib import admin
from snipts.api import (PublicSniptResource, PublicTagResource, from snipts.api import (PublicSniptResource, PublicTagResource,
PublicUserResource, PrivateSniptResource, PublicUserResource, PrivateSniptResource,
PrivateFavoriteResource, PrivateUserProfileResource, PrivateFavoriteResource, PrivateUserProfileResource,
PrivateTagResource, PrivateUserResource) PrivateTagResource, PrivateUserResource)
from snipts.views import search from snipts.views import search
from tastypie.api import Api from tastypie.api import Api
from utils.views import SniptRegistrationView from utils.views import SniptRegistrationView
from views import (homepage, lexers, login_redirect, pro_signup, sitemap, tags, pro_signup_complete) from jobs.views import jobs
from views import (homepage, lexers, login_redirect, pro_signup, sitemap, tags,
pro_signup_complete)
import admin as custom_admin import admin as custom_admin
import os import os
@ -45,6 +47,7 @@ urlpatterns = patterns('',
url(r'^humans.txt$', TemplateView.as_view(template_name='humans.txt')), url(r'^humans.txt$', TemplateView.as_view(template_name='humans.txt')),
url(r'^sitemap.xml$', sitemap), url(r'^sitemap.xml$', sitemap),
url(r'^tags/$', tags), url(r'^tags/$', tags),
url(r'^jobs/$', jobs),
url(r'^pro/$', TemplateView.as_view(template_name='pro.html')), url(r'^pro/$', TemplateView.as_view(template_name='pro.html')),
url(r'^pro/signup/$', pro_signup), url(r'^pro/signup/$', pro_signup),

View File

@ -11,10 +11,12 @@ from django.db.models import Count
from snipts.models import Snipt from snipts.models import Snipt
from taggit.models import Tag from taggit.models import Tag
import hashlib, stripe import hashlib
import stripe
from settings_local import STRIPE_SECRET_KEY from settings_local import STRIPE_SECRET_KEY
@render_to('homepage.html') @render_to('homepage.html')
def homepage(request): def homepage(request):
@ -28,7 +30,8 @@ def homepage(request):
).order_by('?') ).order_by('?')
for user in users_with_gravatars: for user in users_with_gravatars:
public_snipts_count = Snipt.objects.filter(user=user, public=True).values('pk').count() public_snipts_count = Snipt.objects.filter(
user=user, public=True).values('pk').count()
if public_snipts_count: if public_snipts_count:
user.email_md5 = hashlib.md5(user.email.lower()).hexdigest() user.email_md5 = hashlib.md5(user.email.lower()).hexdigest()
@ -43,6 +46,7 @@ def homepage(request):
'users_count': User.objects.all().count(), 'users_count': User.objects.all().count(),
} }
@ajax_request @ajax_request
def lexers(request): def lexers(request):
lexers = get_lexers_list() lexers = get_lexers_list()
@ -69,12 +73,14 @@ def lexers(request):
return {'objects': objects} return {'objects': objects}
def login_redirect(request): def login_redirect(request):
if request.user.is_authenticated(): if request.user.is_authenticated():
return HttpResponseRedirect('/' + request.user.username + '/') return HttpResponseRedirect('/' + request.user.username + '/')
else: else:
return HttpResponseRedirect('/') return HttpResponseRedirect('/')
@login_required @login_required
@render_to('pro-signup.html') @render_to('pro-signup.html')
def pro_signup(request): def pro_signup(request):
@ -82,6 +88,7 @@ def pro_signup(request):
return HttpResponseRedirect('/' + request.user.username + '/') return HttpResponseRedirect('/' + request.user.username + '/')
return {} return {}
@login_required @login_required
@render_to('pro-signup-complete.html') @render_to('pro-signup-complete.html')
def pro_signup_complete(request): def pro_signup_complete(request):
@ -93,11 +100,9 @@ def pro_signup_complete(request):
plan = 'snipt-pro-monthly' plan = 'snipt-pro-monthly'
customer = stripe.Customer.create( customer = stripe.Customer.create(card=token,
card = token, plan=plan,
plan = plan, email=request.user.email)
email = request.user.email
)
profile = request.user.profile profile = request.user.profile
profile.is_pro = True profile.is_pro = True
@ -109,6 +114,7 @@ def pro_signup_complete(request):
else: else:
return HttpResponseBadRequest() return HttpResponseBadRequest()
def sitemap(request): def sitemap(request):
tags = Tag.objects.filter(snipt__public=True) tags = Tag.objects.filter(snipt__public=True)
@ -116,9 +122,10 @@ def sitemap(request):
tags = tags.order_by('-count')[:1000] tags = tags.order_by('-count')[:1000]
return render_to_response('sitemap.xml', return render_to_response('sitemap.xml',
{'tags': tags}, {'tags': tags},
context_instance=RequestContext(request), context_instance=RequestContext(request),
mimetype='application/xml') mimetype='application/xml')
@render_to('tags.html') @render_to('tags.html')
def tags(request): def tags(request):
@ -127,7 +134,8 @@ def tags(request):
all_tags = all_tags.annotate(count=Count('taggit_taggeditem_items__id')) all_tags = all_tags.annotate(count=Count('taggit_taggeditem_items__id'))
popular_tags = Tag.objects.filter(snipt__public=True) popular_tags = Tag.objects.filter(snipt__public=True)
popular_tags = popular_tags.annotate(count=Count('taggit_taggeditem_items__id')) popular_tags = popular_tags.annotate(
count=Count('taggit_taggeditem_items__id'))
popular_tags = popular_tags.order_by('-count')[:20] popular_tags = popular_tags.order_by('-count')[:20]
popular_tags = sorted(popular_tags, key=lambda tag: tag.name) popular_tags = sorted(popular_tags, key=lambda tag: tag.name)