This commit is contained in:
Fergal Moran
2015-11-08 19:17:18 +00:00
parent fcfc1044c0
commit 2c38baf18a
16 changed files with 197 additions and 39 deletions

View File

@@ -512,5 +512,8 @@ class ShowSerializer(serializers.ModelSerializer):
class BlogSerializer(serializers.ModelSerializer):
slug = serializers.ReadOnlyField(required=False)
user = InlineUserProfileSerializer(read_only=True)
class Meta:
model = Blog

View File

@@ -353,4 +353,8 @@ class ShowViewSet(viewsets.ModelViewSet):
class BlogViewSet(viewsets.ModelViewSet):
queryset = Blog.objects.all()
serializer_class = serializers.BlogSerializer()
serializer_class = serializers.BlogSerializer
lookup_field = 'slug'
def perform_create(self, serializer):
serializer.save(user=self.request.user.userprofile)

View File

@@ -1,6 +1,5 @@
import requests
from bs4 import BeautifulSoup
from requests.packages.urllib3.connection import ConnectionError
from dss import settings

View File

@@ -18,7 +18,7 @@ MEDIA_ROOT = os.environ.get('MEDIA_ROOT', '/home/fergalm/Dropbox/development/dee
STATIC_ROOT = os.environ.get('STATIC_ROOT', '/home/fergalm/Dropbox/development/deepsouthsounds.com/cache/static')
CACHE_ROOT = os.environ.get('CACHE_ROOT', '/home/fergalm/Dropbox/development/deepsouthsounds.com/cache/cache')
MEDIA_URL = os.environ.get('MEDIA_URL', 'http://deepsouthsounds.com/media/') # '{0}media/'.format(CDN_URL)
MEDIA_URL = os.environ.get('MEDIA_URL', 'http://localhost/DSSMedia/') # '{0}media/'.format(CDN_URL)
REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
BROKER_URL = os.environ.get('BROKER_URL', 'amqp://guest:guest@localhost:5672//')

View File

@@ -19,7 +19,6 @@ SOCIAL_AUTH_PIPELINE = (
'social.pipeline.user.get_username',
'social.pipeline.social_auth.associate_by_email',
'social.pipeline.user.create_user',
'spa.pipeline.save_profile',
'social.pipeline.social_auth.associate_user',
'social.pipeline.social_auth.load_extra_data',
'social.pipeline.user.user_details'

View File

@@ -11,7 +11,8 @@ urlpatterns = patterns(
url(r'^admin/', include(admin.site.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
(r'^grappelli/', include('grappelli.urls')),
(r'^social/', include('spa.social.urls')),
(r'^__redir/blog/', include('spa.blog.urls')),
(r'^__redir/social/', include('spa.social.urls')),
(r'^arges/', include('spa.social.urls')),
url(r'', include('user_sessions.urls', 'user_sessions')),
url(r'^', include('api.urls')),

0
spa/blog/__init__.py Normal file
View File

7
spa/blog/urls.py Executable file
View File

@@ -0,0 +1,7 @@
from django.conf.urls import patterns, url
urlpatterns = patterns(
'',
url(r'^blog/(?P<slug>[\w\d_.-]+)/?$', 'spa.blog.views.entry', name='blog_entry_slug'),
url(r'^$', 'spa.blog.views.index', name='blog_index')
)

58
spa/blog/views.py Executable file
View File

@@ -0,0 +1,58 @@
import urllib.request, urllib.error, urllib.parse
import logging
from django.conf.urls import url
from django.contrib.sites.models import Site
from django.core.urlresolvers import resolve
from django.http import Http404
from django.shortcuts import render_to_response
from django.template.context import RequestContext
import requests
from allauth.socialaccount.models import SocialToken
from core.utils.url import wrap_full
from dss import settings
from spa.models import Playlist, Blog
from spa.models.mix import Mix
from spa.models.userprofile import UserProfile
logger = logging.getLogger(__name__)
"""
Handles callbacks from non javascript browsers
"""
def _getPayload(request):
return {
"app_id": settings.FACEBOOK_APP_ID,
"site_url": 'http://%s' % Site.objects.get_current().domain,
"site_image_url": '%s/img/dss-large.png' % settings.STATIC_URL,
}
def entry(request, slug):
try:
blog = Blog.objects.get(slug=slug)
extras = {
"content": blog.body,
}
payload = dict(list(_getPayload(request).items()) + list(extras.items()))
response = render_to_response(
'blog/entry.html',
payload,
context_instance=RequestContext(request)
)
return response
except Blog.DoesNotExist:
raise Http404
except Exception as ex:
logger.error(ex)
def index(request):
response = render_to_response(
"blog/index.html",
_getPayload(request),
context_instance=RequestContext(request))
return response

View File

@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0017_blog'),
]
operations = [
migrations.AddField(
model_name='blog',
name='published',
field=models.BooleanField(default=False),
),
]

View File

@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0018_blog_published'),
]
operations = [
migrations.AddField(
model_name='blog',
name='slug',
field=models.SlugField(default='arse'),
preserve_default=False,
),
]

View File

@@ -0,0 +1,29 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('spa', '0019_blog_slug'),
]
operations = [
migrations.CreateModel(
name='BlogComment',
fields=[
('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')),
('object_created', models.DateTimeField(auto_now_add=True)),
('object_updated', models.DateTimeField(auto_now=True, db_index=True)),
('comment', models.CharField(max_length=1024)),
('date_created', models.DateField(auto_now_add=True)),
('blog', models.ForeignKey(to='spa.Blog')),
('user', models.ForeignKey(null=True, to='spa.UserProfile', blank=True)),
],
options={
'abstract': False,
},
),
]

View File

@@ -1,3 +1,4 @@
from core.utils.url import unique_slugify
from spa.models import BaseModel, UserProfile
from django.db import models
@@ -5,6 +6,21 @@ from django.db import models
class Blog(BaseModel):
user = models.ForeignKey(UserProfile, null=True, blank=True)
date_created = models.DateField(auto_now=True)
published = models.BooleanField(default=False)
slug = models.SlugField()
title = models.CharField(max_length=1024)
body = models.TextField()
def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
if not self.id:
self.slug = unique_slugify(self, self.title)
super(Blog, self).save(force_insert, force_update, using, update_fields)
class BlogComment(BaseModel):
blog = models.ForeignKey(Blog)
user = models.ForeignKey(UserProfile, null=True, blank=True)
comment = models.CharField(max_length=1024)
date_created = models.DateField(auto_now_add=True)

View File

@@ -1,34 +0,0 @@
from django.core.files.base import ContentFile
from requests import request, ConnectionError
def save_profile(backend, user, response, is_new, *args, **kwargs):
if backend.name == 'google-oauth2':
if response.get('image') and response['image'].get('url'):
url = response['image'].get('url')
profile = user.userprofile
try:
response = request('GET', url)
response.raise_for_status()
except ConnectionError:
pass
else:
profile.avatar_image.save('',
ContentFile(response.content),
save=False)
profile.save()
elif backend.name == 'facebook':
profile = user.userprofile
url = 'http://graph.facebook.com/{0}/picture'.format(response['id'])
try:
response = request('GET', url, params={'type': 'large'})
response.raise_for_status()
except ConnectionError:
pass
else:
profile.avatar_image.save('',
ContentFile(response.content),
save=False
)
profile.save()

18
templates/blog/entry.html Normal file
View File

@@ -0,0 +1,18 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:og="http://ogp.me/ns#"
xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<meta property="fb:app_id" content="{{ app_id }}"/>
<meta property="og:url" content="{{ mix_url }}/"/>
<meta property="og:site_name" content="Deep South Sounds"/>
<meta property="og:type" content="deepsouthsounds:blog"/>
<meta property="og:title" content="{{ title }}"/>
<meta property="og:description" content="{{ description }}"/>
<meta property="og:image" content="{{ image }}"/>
</head>
<body>
{{ content }}
</body>
</html>

19
templates/blog/index.html Normal file
View File

@@ -0,0 +1,19 @@
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:og="http://ogp.me/ns#"
xmlns:fb="https://www.facebook.com/2008/fbml">
<head>
<meta property="fb:app_id" content="{{ app_id }}"/>
<meta property="og:url" content="{{ mix_url }}/"/>
<meta property="og:site_name" content="Deep South Sounds"/>
<meta property="og:type" content="deepsouthsounds:blog"/>
<meta property="og:title" content="{{ title }}"/>
<meta property="og:description" content="{{ description }}"/>
<meta property="og:image" content="{{ image }}"/>
</head>
<body>
<h1>Blog Index</h1>
{{ content }}
</body>
</html>