Merge remote-tracking branch 'remotes/origin/draceditor'
This commit is contained in:
commit
bb9865cd97
|
@ -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/'
|
||||||
|
|
|
@ -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'),
|
||||||
|
|
|
@ -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!'))
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue