http://protected-journey-8694.herokuapp.com/
- FrontEnd, UI: jQuery, Ajax, HTML/CSS
- Middlewear, API: Django Rest Framework
- Backend: PostGre (Prod), SQLite3 (Dev)
- Python virtualenv
- Heroku App Deployment Cloud (versioning: requirements.txt and Running the server: Procfile)
- Gunicorn WebServer
- https://github.com/cjgiridhar/galex/blob/master/journal/models.py
- https://github.com/cjgiridhar/galex/tree/master/journal/templates/journal
- https://github.com/cjgiridhar/galex/blob/master/journal/views.py
- Used it to create users and add articles
- https://github.com/cjgiridhar/galex/blob/master/journal/admin.py
- List: http://protected-journey-8694.herokuapp.com/api/articles/
- Detail: http://protected-journey-8694.herokuapp.com/api/articles/1/
- JSON Serializer: https://github.com/cjgiridhar/galex/blob/master/journal/serializers.py
- Docs: http://protected-journey-8694.herokuapp.com/docs/
- https://github.com/cjgiridhar/galex/blob/master/journal/views.py
- Default level: Debug (Not to be done on Prod but added here for getting logs of heroku)
- Exceptions like: Http404, ObjectDoesNotExist used
- Performance: File based caching of views (Article list refreshed every 10 mins and Detail every 15 mins), Template fragmented caching for sidebar
- Scaling: Gunicorn works on multiple worker processes (eliminates GIL), Setting on Heroku dynamo is WEB_CONCURRENCY=3
- Memory Handling: Used --max-requests 1200 on unicorn to restart a worker once 1200 requests are done
- Async requests: Could also work with gevent (greenlets) for better handling of I/O requests
- Throttling of Requests: UserRateThrottle for Rest APIs
- 3 tests added for adding, reading articles and comparing data
- https://github.com/cjgiridhar/galex/blob/master/journal/tests.py
- Security: Authentication, Authorization for Rest APIs & CSRF token
- Template inheritance can be done & carousel to be added in What Read Next