Jobs.
parent
4f4f03880e
commit
21a825f10a
|
@ -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)
|
|
@ -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']
|
|
@ -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
|
|
@ -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 %}
|
|
@ -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)
|
|
@ -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')
|
||||
}
|
|
@ -103,6 +103,7 @@ INSTALLED_APPS = (
|
|||
|
||||
'accounts',
|
||||
'blogs',
|
||||
'jobs',
|
||||
'snipts',
|
||||
'utils',
|
||||
)
|
||||
|
|
|
@ -112,6 +112,9 @@
|
|||
</button>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a href="/jobs/" {% if '/jobs/' in request.path %} class="active"{% endif %}>Jobs</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
{% if request.user.is_authenticated %}
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
<li>
|
||||
<a href="/search/">Search</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/jobs/">Jobs</a>
|
||||
</li>
|
||||
{% if not request.user.is_authenticated %}
|
||||
<li>
|
||||
<a class="button" href="/login/">Log in</a>
|
||||
|
|
|
@ -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
11
urls.py
|
@ -5,13 +5,15 @@ from django.views.generic import TemplateView
|
|||
from django.http import HttpResponseRedirect
|
||||
from django.contrib import admin
|
||||
from snipts.api import (PublicSniptResource, PublicTagResource,
|
||||
PublicUserResource, PrivateSniptResource,
|
||||
PrivateFavoriteResource, PrivateUserProfileResource,
|
||||
PrivateTagResource, PrivateUserResource)
|
||||
PublicUserResource, PrivateSniptResource,
|
||||
PrivateFavoriteResource, PrivateUserProfileResource,
|
||||
PrivateTagResource, PrivateUserResource)
|
||||
from snipts.views import search
|
||||
from tastypie.api import Api
|
||||
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 os
|
||||
|
@ -45,6 +47,7 @@ urlpatterns = patterns('',
|
|||
url(r'^humans.txt$', TemplateView.as_view(template_name='humans.txt')),
|
||||
url(r'^sitemap.xml$', sitemap),
|
||||
url(r'^tags/$', tags),
|
||||
url(r'^jobs/$', jobs),
|
||||
|
||||
url(r'^pro/$', TemplateView.as_view(template_name='pro.html')),
|
||||
url(r'^pro/signup/$', pro_signup),
|
||||
|
|
30
views.py
30
views.py
|
@ -11,10 +11,12 @@ from django.db.models import Count
|
|||
from snipts.models import Snipt
|
||||
from taggit.models import Tag
|
||||
|
||||
import hashlib, stripe
|
||||
import hashlib
|
||||
import stripe
|
||||
|
||||
from settings_local import STRIPE_SECRET_KEY
|
||||
|
||||
|
||||
@render_to('homepage.html')
|
||||
def homepage(request):
|
||||
|
||||
|
@ -28,7 +30,8 @@ def homepage(request):
|
|||
).order_by('?')
|
||||
|
||||
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:
|
||||
user.email_md5 = hashlib.md5(user.email.lower()).hexdigest()
|
||||
|
@ -43,6 +46,7 @@ def homepage(request):
|
|||
'users_count': User.objects.all().count(),
|
||||
}
|
||||
|
||||
|
||||
@ajax_request
|
||||
def lexers(request):
|
||||
lexers = get_lexers_list()
|
||||
|
@ -69,12 +73,14 @@ def lexers(request):
|
|||
|
||||
return {'objects': objects}
|
||||
|
||||
|
||||
def login_redirect(request):
|
||||
if request.user.is_authenticated():
|
||||
return HttpResponseRedirect('/' + request.user.username + '/')
|
||||
else:
|
||||
return HttpResponseRedirect('/')
|
||||
|
||||
|
||||
@login_required
|
||||
@render_to('pro-signup.html')
|
||||
def pro_signup(request):
|
||||
|
@ -82,6 +88,7 @@ def pro_signup(request):
|
|||
return HttpResponseRedirect('/' + request.user.username + '/')
|
||||
return {}
|
||||
|
||||
|
||||
@login_required
|
||||
@render_to('pro-signup-complete.html')
|
||||
def pro_signup_complete(request):
|
||||
|
@ -93,11 +100,9 @@ def pro_signup_complete(request):
|
|||
|
||||
plan = 'snipt-pro-monthly'
|
||||
|
||||
customer = stripe.Customer.create(
|
||||
card = token,
|
||||
plan = plan,
|
||||
email = request.user.email
|
||||
)
|
||||
customer = stripe.Customer.create(card=token,
|
||||
plan=plan,
|
||||
email=request.user.email)
|
||||
|
||||
profile = request.user.profile
|
||||
profile.is_pro = True
|
||||
|
@ -109,6 +114,7 @@ def pro_signup_complete(request):
|
|||
else:
|
||||
return HttpResponseBadRequest()
|
||||
|
||||
|
||||
def sitemap(request):
|
||||
|
||||
tags = Tag.objects.filter(snipt__public=True)
|
||||
|
@ -116,9 +122,10 @@ def sitemap(request):
|
|||
tags = tags.order_by('-count')[:1000]
|
||||
|
||||
return render_to_response('sitemap.xml',
|
||||
{'tags': tags},
|
||||
context_instance=RequestContext(request),
|
||||
mimetype='application/xml')
|
||||
{'tags': tags},
|
||||
context_instance=RequestContext(request),
|
||||
mimetype='application/xml')
|
||||
|
||||
|
||||
@render_to('tags.html')
|
||||
def tags(request):
|
||||
|
@ -127,7 +134,8 @@ def tags(request):
|
|||
all_tags = all_tags.annotate(count=Count('taggit_taggeditem_items__id'))
|
||||
|
||||
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 = sorted(popular_tags, key=lambda tag: tag.name)
|
||||
|
||||
|
|
Loading…
Reference in New Issue