This project is a dynamic digital portfolio website, showcasing my education and experience. It's built with Python Flask and Jinja2 for backend and content rendering, and incorporates SQLAlchemy as the ORM system. The site uses Bootstrap for responsive design and is deployed on Red Hat OpenShift. This forms part of my CMT120 coursework.
- Demo Website (on OpenShift): (Activate the Cardiff University VPN to access.)
- User authentication system for login functionality.
- Implementation of cascading deletions, where removing user automatically deletes all its linked data.
- Design of a low-coupling test data script for more efficient testing.
- Redirecting users without proper authorization away from restricted pages
- Dynamic navigation bar that alters its appearance based on user login status.
- Use of Bootstrap for a responsive and adaptable site layout.
- Display of flash messages during editing, Login, and Logout for better user interaction.
- venv
python3 -m venv venv
source venv/bin/activate
- Install Packages
pip install -r requirements.txt
- Generate Test Data for DB
python3 <path/to>/db_creation.py
- Run Flask Locally
flask run
![Screenshot 2024-01-12 at 08 40 20](https://private-user-images.githubusercontent.com/73396926/296231503-8456e8d5-654c-4461-8df3-2e2742ebcf77.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwMDAyMTYsIm5iZiI6MTcyMzk5OTkxNiwicGF0aCI6Ii83MzM5NjkyNi8yOTYyMzE1MDMtODQ1NmU4ZDUtNjU0Yy00NDYxLThkZjMtMmUyNzQyZWJjZjc3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE4VDE2NTE1NlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBkNDQ2MTNhOTk3Yjg2NmMxZDliYWViZjdhMTJkMGU1MjJkZTZkM2Q3ODUwOTdlYzI5YTczNmI1NjA3MWViZDMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.5Y-YQreTl7Y_VcHHf1owv_wD7-VI2v6N_bL_DYpfKOI)
![Screenshot 2024-01-12 at 08 40 57](https://private-user-images.githubusercontent.com/73396926/296231542-24111655-71d1-404e-a0eb-3f3c84336610.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwMDAyMTYsIm5iZiI6MTcyMzk5OTkxNiwicGF0aCI6Ii83MzM5NjkyNi8yOTYyMzE1NDItMjQxMTE2NTUtNzFkMS00MDRlLWEwZWItM2YzYzg0MzM2NjEwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE4VDE2NTE1NlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI2Y2EzNjBmNTY0YTJhYTczNjBmZWY1NDMzMWQ1YzYzYTY3N2I3ZGVlZTNmOTI2ZmNkMTQzOGI2NTE5OWE0OGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.55jSBHgtWc1z2SAYIsMaypyg5Dqg9ZzLUYPMv4WqYN0)
![Screenshot 2024-01-12 at 08 41 29](https://private-user-images.githubusercontent.com/73396926/296231565-bd6dbc11-92ee-4976-8686-e193ebbccc62.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQwMDAyMTYsIm5iZiI6MTcyMzk5OTkxNiwicGF0aCI6Ii83MzM5NjkyNi8yOTYyMzE1NjUtYmQ2ZGJjMTEtOTJlZS00OTc2LTg2ODYtZTE5M2ViYmNjYzYyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MTglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODE4VDE2NTE1NlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWJjYmZhNjRkMTk2M2JjM2MwY2JiZjhkN2QzN2U4MDA0NDFjNWMxMWZhMzkzYzYyOWIzYTE2ODEwMGFlMTEzMDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.61HzYHBLcZlUEIj2LoCByGzh8S-LjvPIdPxzTiqJK5U)