{"id":30799044,"url":"https://github.com/raghav-patidar1/django-blog-api","last_synced_at":"2026-04-12T11:48:52.341Z","repository":{"id":312654891,"uuid":"1048219599","full_name":"raghav-patidar1/django-blog-api","owner":"raghav-patidar1","description":"A RESTful Blog API built with Django \u0026 Django REST Framework (DRF), featuring user signup, account management, and secure login with JWT authentication, as well as managing blog posts, categories, and comments with role-based permissions, filtering support, pagination and enforced auto image deletion for optimized storage.","archived":false,"fork":false,"pushed_at":"2025-09-01T06:24:31.000Z","size":182,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-01T07:44:33.582Z","etag":null,"topics":["django","django-filter","djangorestframework","jwt","mysql","python","restful-api","swagger-ui"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raghav-patidar1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-01T05:48:46.000Z","updated_at":"2025-09-01T06:24:35.000Z","dependencies_parsed_at":"2025-09-01T07:44:36.839Z","dependency_job_id":"82382e1f-ac13-4b3b-b29c-8ee7ca9b6ba6","html_url":"https://github.com/raghav-patidar1/django-blog-api","commit_stats":null,"previous_names":["raghav-patidar1/django-blog-api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/raghav-patidar1/django-blog-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raghav-patidar1%2Fdjango-blog-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raghav-patidar1%2Fdjango-blog-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raghav-patidar1%2Fdjango-blog-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raghav-patidar1%2Fdjango-blog-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raghav-patidar1","download_url":"https://codeload.github.com/raghav-patidar1/django-blog-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raghav-patidar1%2Fdjango-blog-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273805641,"owners_count":25171560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["django","django-filter","djangorestframework","jwt","mysql","python","restful-api","swagger-ui"],"created_at":"2025-09-05T19:03:01.227Z","updated_at":"2026-04-12T11:48:47.323Z","avatar_url":"https://github.com/raghav-patidar1.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blog API\n\nA RESTful Blog API built with Django \u0026 Django REST Framework (DRF), featuring user signup, account management, and secure login with JWT authentication, as well as managing blog posts, categories, and comments with role-based permissions, filtering support, pagination and enforced auto image deletion for optimized storage.\n\n## Tech Stack\n\n- **Backend:** Python, Django, Django REST Framework\n- **Database:** MySQL\n- **Auth:** JWT Authentication (SimpleJWT)\n- **Other:** Django-Filter, Pagination, Swagger (drf-spectacular)\n\n## Modules\n\n- Users\n- Categories\n- Posts \n- Comments\n\n## ER Diagram\n\n![img](https://github.com/raghav-patidar1/django-blog-api/blob/main/assets/blog-ER-diagram.png)\n\n## Users Module\n- New user can signup\n- User can retrieve, update and delete his account\n- Existing user can login with JWT tokens\n- Admin can list all users\n  \n![img](https://github.com/raghav-patidar1/django-blog-api/blob/main/assets/users-module.PNG)\n\n## Categories Module\n- Admin can create, update and delete category\n- User can retrieve a specific category or list of categories\n- User can fetch all posts under a specific category\n  \n![img](https://github.com/raghav-patidar1/django-blog-api/blob/main/assets/categories-module.PNG)\n\n## Posts Module\n- User can fetch all posts\n- User can fetch all his posts by user id\n- User can create new posts\n- User can retreive specific posts by id\n- User can update and delete his posts (Owner only)\n- Admin can delete specific post by id\n- Posts API includes pagination, filtering, and ordering\n- User can search posts using title, content, author, year and month\n- Each post includes an image\n- User can fetch all his posts by userid\n  \n![img](https://github.com/raghav-patidar1/django-blog-api/blob/main/assets/posts-module.PNG)\n\n## Comments Module\n- User can add comments on a post\n- User can list all comments on a specific post by post id\n- User can retreive specific comment by post id and comment id\n- User can update and delete his comment on a specific post by post id and comment id (Owner only)\n- Comments API includes pagination\n  \n![img](https://github.com/raghav-patidar1/django-blog-api/blob/main/assets/comments-module.PNG)\n\n## Prerequisites\n\nTo run this project successfully, ensure you have the following:\n\n- Python 3.12+\n\n## Installation\n\n### Clone Repository\n    \n  ```bash\n  https://github.com/raghav-patidar1/django-blog-api.git\n  cd django-blog-api\n  ```\n\n### Create and Activate Virtual Environment\n  ```bash\n  python -m venv venv\n\n  source venv/bin/activate   # On Linux/Mac\n  venv\\Scripts\\activate      # On Windows\n  ```\n\n### Install Dependencies\n  ```bash\n  pip install -r requirements.txt\n  ```\n\n### Setup Environment Variables\n  1. Copy `.env.example` → `.env`:\n     \n      ```bash\n      cp .env.example .env\n      ```\n  2. Fill in your credentials (Django and MySQL settings).\n\n     Example `.env`configuration file for a live server. \n      ```bash\n      SECRET_KEY=\"your django secret key\"\n      DEBUG=True\n      MYSQL_DB_NAME=\"mysql database name\"\n      MYSQL_USER=\"mysql username\"\n      MYSQL_PASSWORD=\"mysql password\"\n      MYSQL_HOST=\"mysql host\"\n      MYSQL_PORT=\"3306\"\n      \n      ```\n\n      To generate a Django secret key:\n      ```bash\n      python -c \"from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())\"\n      ```\n\n### Apply Migrations\n\n  ```bash\n  python manage.py makemigrations\n  python manage.py migrate\n  ```\n\n### Run Development Server\n\n  ```bash\n  python manage.py runserver\n  ```\n\n### Access API Docs\n\nAPI Base URL: `http://localhost:8000/`\n\n👉 [Click here](http://localhost:8000/api/schema/swagger-ui/) to go through Swagger-UI API documentation after running server.\n\n\n## Contribution\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Acknowledgements  \n- [Django Documentation](https://docs.djangoproject.com/)  \n- [Django REST Framework](https://www.django-rest-framework.org/) \n- [DRF SimpleJWT](https://django-rest-framework-simplejwt.readthedocs.io/en/latest/) \n- [Django-filter](https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html) \n- [drf-spectacular](https://drf-spectacular.readthedocs.io/en/latest/) \n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraghav-patidar1%2Fdjango-blog-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraghav-patidar1%2Fdjango-blog-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraghav-patidar1%2Fdjango-blog-api/lists"}