Merge remote-tracking branch 'remotes/origin/draceditor'

This commit is contained in:
Oly 2017-02-28 09:02:24 +00:00
commit bb9865cd97
6 changed files with 72 additions and 1 deletions

View File

@ -41,6 +41,7 @@ THIRD_PARTY_APPS = (
'allauth.socialaccount.providers.facebook', # registration 'allauth.socialaccount.providers.facebook', # registration
'stdimage', 'stdimage',
'rest_framework', 'rest_framework',
'draceditor',
) )
# Apps specific for this project go here. # Apps specific for this project go here.
@ -197,6 +198,10 @@ STATICFILES_FINDERS = (
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-root # See: https://docs.djangoproject.com/en/dev/ref/settings/#media-root
MEDIA_ROOT = str(APPS_DIR('media')) MEDIA_ROOT = str(APPS_DIR('media'))
import time
DRACEDITOR_UPLOAD_PATH = 'images/uploads/{}'.format(time.strftime("%Y/%m/%d/"))
DRACEDITOR_UPLOAD_URL = '/api/uploader/' # change to local uploader
MAX_IMAGE_UPLOAD_SIZE = 5242880 # 5MB
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url # See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url
MEDIA_URL = '/media/' MEDIA_URL = '/media/'

View File

@ -15,6 +15,7 @@ from mhackspace.members.views import MemberListView
from mhackspace.subscriptions import views as subscription from mhackspace.subscriptions import views as subscription
from mhackspace.base.feeds import LatestEntriesFeed from mhackspace.base.feeds import LatestEntriesFeed
from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed from mhackspace.blog.feeds import BlogFeed, BlogCategoryFeed
from mhackspace.base.views import markdown_uploader
from mhackspace.blog.views import blog, PostViewSet, CategoryViewSet from mhackspace.blog.views import blog, PostViewSet, CategoryViewSet
from mhackspace.feeds.views import FeedViewSet, ArticleViewSet from mhackspace.feeds.views import FeedViewSet, ArticleViewSet
@ -33,6 +34,11 @@ urlpatterns = [
url(r'^api/v1/', include(router.urls, namespace='v1')), url(r'^api/v1/', include(router.urls, namespace='v1')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^draceditor/', include('draceditor.urls')),
url(
r'^api/uploader/$',
markdown_uploader, name='markdown_uploader_page'
),
url(r'^blog/$', blog, name='contact'), url(r'^blog/$', blog, name='contact'),
url(r'^blog/rss/$', BlogFeed()), url(r'^blog/rss/$', BlogFeed()),
url(r'^blog/(?P<slug>[0-9A-Za-z_\-]+)/$', blog, name='blog-item'), url(r'^blog/(?P<slug>[0-9A-Za-z_\-]+)/$', blog, name='blog-item'),

57
mhackspace/base/views.py Normal file
View File

@ -0,0 +1,57 @@
import os
import json
import uuid
from django.conf import settings
from django.http import HttpResponse
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.decorators import login_required
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
from draceditor.utils import LazyEncoder
@login_required
def markdown_uploader(request):
"""
Makdown image upload for locale storage
and represent as json to markdown editor.
"""
if request.method == 'POST' and request.is_ajax():
if 'markdown-image-upload' in request.FILES:
image = request.FILES['markdown-image-upload']
image_types = [
'image/png', 'image/jpg',
'image/jpeg', 'image/pjpeg', 'image/gif'
]
if image.content_type not in image_types:
data = json.dumps({
'status': 405,
'error': _('Bad image format.')
}, cls=LazyEncoder)
return HttpResponse(
data, content_type='application/json', status=405)
if image._size > settings.MAX_IMAGE_UPLOAD_SIZE:
to_MB = settings.MAX_IMAGE_UPLOAD_SIZE / (1024 * 1024)
data = json.dumps({
'status': 405,
'error': _('Maximum image file is %(size) MB.') % {'size': to_MB}
}, cls=LazyEncoder)
return HttpResponse(
data, content_type='application/json', status=405)
img_uuid = "{0}-{1}".format(uuid.uuid4().hex[:10], image.name.replace(' ', '-'))
tmp_file = os.path.join(settings.DRACEDITOR_UPLOAD_PATH, img_uuid)
def_path = default_storage.save(tmp_file, ContentFile(image.read()))
img_url = os.path.join(settings.MEDIA_URL, def_path)
data = json.dumps({
'status': 200,
'link': img_url,
'name': image.name
})
return HttpResponse(data, content_type='application/json')
return HttpResponse(_('Invalid request!'))
return HttpResponse(_('Invalid request!'))

View File

@ -1,4 +1,5 @@
from django.contrib import admin from django.contrib import admin
from django.db import models
from django.contrib.admin import ModelAdmin from django.contrib.admin import ModelAdmin
from mhackspace.blog.models import Post, Category from mhackspace.blog.models import Post, Category

View File

@ -1,6 +1,7 @@
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from django.urls import reverse from django.urls import reverse
from draceditor.models import DraceditorField
from mhackspace.users.models import User from mhackspace.users.models import User
from stdimage.models import StdImageField from stdimage.models import StdImageField
@ -34,7 +35,7 @@ class Post(models.Model):
"height": 220, "height": 220,
"crop": True}}) "crop": True}})
description = models.TextField() description = DraceditorField()
published_date = models.DateTimeField(default=timezone.now) published_date = models.DateTimeField(default=timezone.now)
updated_date = models.DateTimeField(default=timezone.now) updated_date = models.DateTimeField(default=timezone.now)
active = models.BooleanField(default=True) active = models.BooleanField(default=True)

View File

@ -62,3 +62,4 @@ git+https://github.com/olymk2/scaffold.git
djangorestframework==3.5.4 djangorestframework==3.5.4
django-filter==1.0.1 django-filter==1.0.1
draceditor