A Web application that demonstrates use of Python's Flask framework. The application makes use of libraries such as the Jinja templating library and WTForms. Architectural design patterns and principles including Repository, Dependency Inversion and Single Responsibility have been used to design the application. The application uses Flask Blueprints to maintain a separation of concerns between application functions. Testing includes unit and end-to-end testing using the pytest tool.
Installation via requirements.txt
$ cd COMPSCI-235-A3
$ py -3 -m venv venv
$ venv\Scripts\activate
$ pip install -r requirements.txt
When using PyCharm, set the virtual environment using 'File'->'Settings' and select 'Project:COMPSCI-235' from the left menu. Select 'Project Interpreter', click on the gearwheel button and select 'Add'. Click the 'Existing environment' radio button to select the virtual environment.
Running the application
From the COMPSCI-235-A3 directory, and within the activated virtual environment (see venv\Scripts\activate above):
$ flask run
The COMPSCI-235/.env file contains variable settings. They are set with appropriate values.
FLASK_APP
: Entry point of the application (should always bewsgi.py
).FLASK_ENV
: The environment in which to run the application (eitherdevelopment
orproduction
).SECRET_KEY
: Secret key used to encrypt session data.TESTING
: Set to False for running the application. Overridden and set to True automatically when testing the application.WTF_CSRF_SECRET_KEY
: Secret key used by the WTForm library.
Testing requires that file COMPSCI-235-A3/conftest.py be edited to set the value of TEST_DATA_PATH
. You should set this to the absolute path of the COMPSCI-235-A3/tests/data directory.
E.g.
TEST_DATA_PATH = os.path.join('D:', os.sep, 'pyc', 'venv', 'COMPSCI-235-A3', 'tests', 'data')
assigns TEST_DATA_PATH with the following value (the use of os.path.join and os.sep ensures use of the correct platform path separator):
D\pyc\venv\COMPSCI-235-A3\tests\data)
You can then run tests from within PyCharm.