<p align="center">
<img src="https://user-images.githubusercontent.com/19711677/86859686-cd429700-c088-11ea-8f60-9c7879d7fcc9.PNG">
</p>
<h1 align="center">django-bona-blog</h1>
<p align="center">
A Django blog app with features of a standard blogging platform.
</p>
<a href="https://badge.fury.io/py/django-bona-blog"><img src="https://badge.fury.io/py/django-bona-blog.svg" alt="PyPI version" height="28"></a>
[](https://img.shields.io/github/license/Williano/Bona-Blog-Mobile?style=for-the-badge)
[](https://img.shields.io/github/stars/Williano/django-bona-blog?style=for-the-badge)
[](https://img.shields.io/github/forks/Williano/Bona-Blog-Mobile?style=for-the-badge)
[](https://img.shields.io/github/issues/Williano/Bona-Blog-Mobile?style=for-the-badge)
## Table of contents
* [General info](#general-info)
* [Standalone Project](#standalone-project)
* [Screenshots](#screenshots)
* [Features](#features)
* [Technologies](#technologies)
* [Setup](#setup)
* [Status](#status)
* [Contact](#contact)
* [License](#license)
* [Contributing](#contributing)
## General info
An Open-Source Django blogging app like [Medium](https://medium.com/) and [Real Python](https://realpython.com/). It has [features](#features) of a standard blogging platform.
## Standalone Project
There is a standalone version of this django package. You can get it from its [GitHub Repo](https://github.com/Williano/Bona-Blog).
## Screenshots
Authors Dashboard Page
:-------------------------:

Create Article Page
:-------------------------:

Authors Profile Details Page
:-------------------------:

Home Page | List of Categories Page
:-------------------------:|:-------------------------:
 | 
Category Articles List Page | Author Articles List Page
:-------------------------:|:-------------------------:
 | 
Article Detail Page
:-------------------------:

## Features
* [Mobile App Version](https://github.com/Williano/Bona-Blog-Mobile)
* Dashboard for Authors
* WYSIWYG Editor
* Account Verification
* Author Login
* Author Password Reset
* API for Clients
* Category List
* Category Articles List
* New Category Submission
* Related Articles
* Comments
* Articles Search
* Article Social Media Share
* Article Minute Read
* Article Number of Words
* Article Number of Views
* Article Tags
* Tag Related Articles
* Markdown Support
* Responsive on all devices
* Pagination
* Clean Code
* 90% test coverage
## Technologies
* Python 3.6
* Javascript
* Jquery
* Ajax
* PrismJS
* Django 3
* HTML5
* CSS3
* Bootstrap 4
* Ion Icons
* Font awesome
* CKEditor
* SQLite
* PostgreSQL
## Setup
To run this app, you will need to follow these 3 steps:
#### 1. Requirements
- a Laptop
- Text Editor or IDE (eg. vscode, PyCharm)
- Python 3.6 +
- Django 2.2+
#### 2. Install Python and Pipenv
- [Python3](https://www.python.org/downloads/)
- [Pipenv](https://pipenv-es.readthedocs.io/es/stable/)
#### 3. Local Setup and Running on Windows, Linux and Mac OS
##### a. Install package with pip or pipenv
```
$ pip install django-bona-blog
```
or
```
$ pipenv install django-bona-blog
```
##### b. Add ```django_filter, ckeditor, taggit, crispy_forms``` and ```rest_framework``` to your ```INSTALLED_APPS``` in ```settings.py```:
```
INSTALLED_APPS = (
...
'django_filters',
'rest_framework',
'taggit',
'ckeditor',
'ckeditor_uploader',
'crispy_forms',
)
```
##### c. Add ```CKEditor Configuration``` to ```settings.py```:
```
# CKEditor Settings
CKEDITOR_UPLOAD_PATH = 'uploads/'
CKEDITOR_IMAGE_BACKEND = "pillow"
CKEDITOR_CONFIGS = {
'default':
{'toolbar': 'full',
'width': 'auto',
'extraPlugins': ','.join([
'codesnippet',
'youtube'
]),
},
}
```
##### d. Add ```blog``` to ```INSTALLED_APPS``` in ```settings.py``` for your Django project:
```
INSTALLED_APPS = (
...
'blog.apps.BlogConfig',
)
```
##### e. Add ``blog.urls, tinmyce.urls and api.urls`` to ``urls.py`` of your project:
```
from django.urls import include
urlpatterns = [
...
path('ckeditor/', include('ckeditor_uploader.urls')),
path('blog/', include('blog.urls')),
path('api/v1/', include('blog.api.v1.routers.routers')),
]
```
##### f. Add configuration to serve static files in development to ```urls.py``` of your project:
```
from django.conf.urls.static import static
from django.conf import settings
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
```
##### g. Create blog database tables
```
$ python manage.py migrate blog
```
##### h. Add ```dashboard``` configuration to your project ```settings.py```:
```
# Account Settings
LOGIN_URL = '/account/login/'
LOGIN_REDIRECT_URL = '/author/dashboard/'
LOGOUT_REDIRECT_URL = '/account/logout/'
```
##### i. Add ```email configuration``` for ```account signup and password reset```
```
# Email Settings (Development)
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# Email Settings (Production)
EMAIL_BACKEND = ''
EMAIL_HOST = ''
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ""
EMAIL_PORT = 587
EMAIL_USE_TLS = True
```
##### j. Add ```static files configuration``` for ```serving staticfiles```
```
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "blog/static"),]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_FINDERS = [
"django.contrib.staticfiles.finders.FileSystemFinder",
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
]
```
##### k. Add ```media files configuration``` for ```serving media files```
```
# Media files (User uploaded images)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
```
##### l. Collect ```static files```
```
$ python manage.py collectstatic
```
##### Running Tests
```
$ python manage.py test blog.tests
```
## Status
Project is: _done_
## Contact
Created by [Williano](https://williano.github.io/) - feel free to contact me!
## License
>You can check out the full license [here](https://github.com/Williano/django-bona-blog/blob/master/LICENSE)
This project is licensed under the terms of the **MIT** license.
## Contributing
1. Fork it (<https://github.com/Williano/django-bona-blog.git>)
2. Create your feature branch (`git checkout -b feature/fooBar`)
3. Commit your changes (`git commit -am 'Add some fooBar'`)
4. Push to the branch (`git push origin feature/fooBar`)
5. Create a new Pull Request