{"id":24196924,"url":"https://github.com/iofall/django-blog","last_synced_at":"2026-04-08T21:32:36.181Z","repository":{"id":46817591,"uuid":"265940626","full_name":"iofall/Django-Blog","owner":"iofall","description":"Django-Blog project is a full stack Django website with a Medium Style Editor. Available at:","archived":false,"fork":false,"pushed_at":"2022-12-08T10:00:28.000Z","size":4178,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-25T23:34:55.856Z","etag":null,"topics":["bootstrap","css","django","html","javascript","python"],"latest_commit_sha":null,"homepage":"https://cedarfall-blog.herokuapp.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iofall.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-21T20:02:52.000Z","updated_at":"2021-09-23T19:16:20.000Z","dependencies_parsed_at":"2023-01-24T23:00:24.745Z","dependency_job_id":null,"html_url":"https://github.com/iofall/Django-Blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/iofall/Django-Blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iofall%2FDjango-Blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iofall%2FDjango-Blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iofall%2FDjango-Blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iofall%2FDjango-Blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iofall","download_url":"https://codeload.github.com/iofall/Django-Blog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iofall%2FDjango-Blog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31575592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap","css","django","html","javascript","python"],"created_at":"2025-01-13T19:39:21.107Z","updated_at":"2026-04-08T21:32:36.165Z","avatar_url":"https://github.com/iofall.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eDjango-Blog\u003c/h1\u003e\n\nDjango-Blog is a Full Stack Django Website which allows you to create blog posts with Medium style formatting using the open source [Medium Editor](https://github.com/yabwe/medium-editor).\n\n[![Heroku](https://img.shields.io/website?down_color=lightgrey\u0026down_message=offline\u0026up_color=brightgreen\u0026up_message=online\u0026url=https%3A%2F%2Fcedarfall-blog.herokuapp.com%2F)](https://cedarfall-blog.herokuapp.com/)\n[![Python](https://img.shields.io/badge/Python-3.8.3-blue)](https://www.python.org/)\n[![Django](https://img.shields.io/badge/Django-3.0.3-blue)](https://www.djangoproject.com/)\n\n### Try It Out\n\n**Link:** https://cedarfall-blog.herokuapp.com/\n\n**Test Username:** John\n\n**Test Password:** pass@123\n\n### Local Installation\n\n1. Clone this repository to your local machine and `cd` into it.\n\n2. Create a virtual environment using\n   \n   ```\n   python3 -m venv myvenv\n   \n   # Or\n   \n   python -m venv myvenv\n   ```\n   `myvenv` will be the name of your virtual environment.\n   \n3. Activate the virtual environment\n\n   ```\n   myvenv\\Scripts\\activate\n   ```\n\n4. Install the requirements given in `requirements.txt`\n\n   ```\n   pip install -r requirements.txt\n   ```\n\n5. Inside `settings.py` file make the following changes:\n\n   ```python\n   # import django_heroku\n   \n   SECRET_KEY = \"123\"\n   \n   DEBUG = False\n   \n   # django_heroku.settings(locals(), allowed_hosts=False, secret_key=False)\n   ```\n\n6. You now have all the requirements for running the Django app in your browser. However we don't have a database connection yet, we are using the `Heroku PostgreSQL` database in production. Locally we will use the `sqlite` database available  by default. To use this database, you just need to migrate your models using `python manage.py makemigrations` and then `python manage.py migrate`\n\n7. Next step is to create a `super user` that will allow us to create and edit blog posts, approve comments etc. Create a superuser using `python manage.py createsuperuser` and follow the prompts.\n\n8. Locate the `manage.py` file and navigate to its directory. Run the command to start the server\n\n   ```\n   python manage.py runserver\n   ```\n\n9. Copy the URL and open in your browser.\n\n10. You now should have the complete app running locally.\n\n### **Features**\n\n#### **Responsive UI**\n\n![Navbar](demo/Navbar.png)\n\n![Home Screen 1](demo/Home-Screen-1.png)\n\n![Home Screen 2](demo/Home-Screen-2.png)\n\n#### Medium Style Editor\n\nQuickly add and style your content with various tabs available in the helper tool.\n\n![Medium Style Editor](demo/Medium-Style-Editor.png)\n\n**Custom Styling**\n\nYou can also use your own `HTML` and styling to get the look you want by using the `HTML` tags, this also provides you with full access to `Bootstrap` classes.\n\nThis may pose a security risk as discussed in the **Limitations** section.\n\n#### Drafts\n\nClear separation between the main blog and your drafts, posts aren't visible to the general public unless you `publish` them\n\n![Drafts](demo/Drafts.png)\n\n#### Easy Edits\n\nEasily edit posts and add comments in your blog post. Anyone can come and add comments to your post.\n\n![Edits](demo/Edits.png)\n\n#### Approve Comments\n\nOnly approved comments are visible to visitors, easily approve or remove comments on your post.\n\n![Comments](demo/Comments.png)\n\n#### **Custom Time Filter**\n\nCustom template filter used to filter time based on current time. This mimics the functionality of Facebook or YouTube.\n\n![Time Filter](demo/Time-Filter.png)\n\n### Limitations\n\n- Although the `HTML` tab in the Medium Style Editor provides great flexibility, it should be disabled because of possibility of XSS attacks.\n- There is no direct way to attach classes to the Medium Style Editor's options. For example when you use the `image` option, no classes are attached to that image, making it unresponsive. Here we have used JavaScript OnClick Event Listeners to attach classes to make the images responsive.\n- Image uploads are not allowed to save space, any images that have been shown in this project have been online images through Pexels.\n- The data or rather the HTML that the Medium Style Editor generates is not clean.\n\n### Further Work\n\nTo address these limitations, we could make use of `Editor.js` which produces clean JSON data. We must also remove the `HTML` option for styling and instead provide some abstraction for complicated styling to ensure better use and security.\n\n### Acknowledgements\n\nThis project was created with reference to **Jose Portilla's Full Stack Django Development Course**, although it has been heavily modified.\n\nAlso thanks to [Pexels](https://www.pexels.com/) for their amazing images.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiofall%2Fdjango-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiofall%2Fdjango-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiofall%2Fdjango-blog/lists"}