These are the source files for the internal website that I use to teach my course OTIS. It is pretty standard Django, so you should be able to spin up a local server on a standard Unix environment.
Video tutorial: https://youtu.be/W27XcqeXp20
If you're just trying to get a local copy of the OTIS-WEB code
and don't plan to submit any code back, then skip steps 0 and 4,
and replace YOUR_USERNAME
in step 2 with vEnhance
.
-
Create an account on GitHub if you haven't already, and fork the repository.
-
Install the following standard tools:
python
(version 3.10),pip
,git
. (For each tool, search "[name of thing to install] [your OS]" on the web.) -
Clone this repository using the command
git clone https://github.com/YOUR_USERNAME/otis-web
. -
Run
git submodule update --init --recursive
in order to pull theevans_django_tools
submodule. -
Type
git checkout -b feature
to checkout a new branch namedfeature
; this will make your life a bit easier than working onmain
. If you already know what feature you're trying to implement, you can use that, e.g.git checkout -b add-bunny-pictures
. -
Install Poetry. This enables you to use the
poetry
command; verify this by checkingpoetry --help
produces a help message. -
Once you have
poetry
, hitpoetry install
. This will automatically create a Python virtual environment and install stuff inside it. (If you are an expert familiar with Python virtual environments and want to use your own rather than Poetry's auto-created one, then activate said environment before runningpoetry install
.)On some systems,
poetry install
could fail when trying to installmysqlclient
. You will have to separately installpkg-config
mysql in that case; see that link for instructions, under the "Install" section. -
If it isn't already activated, activate the Python virtual environment that was created in the previous step. The easiest way to do so is to run
poetry shell
.(Note: you have to do this step every time you start working on the project. That is, always run
poetry shell
before doing any work, or for experts, activate the virtual environment using your preferred method.) -
If everything is working,
python manage.py check
should run with no errors. -
Run
python manage.py migrate
to create the local database. -
Run
python manage.py createsuperuser
to create an admin user. -
Run
python manage.py runserver
. The command will spin up a continuously running server. -
Point your browser to
http://127.0.0.1:8000
. You should be able to log in with the user you defined in step 9. -
The website is functional now, but it is a bit bare-bones. To populate it with some test data, use
http://127.0.0.1:8000/admin
or run./fixtures/load-all.sh
.
Optional steps:
- If you need to set up environment variables,
copy
env
to.env
and uncomment the relevant lines. - If you want to test the Stripe stuff, a few more steps are needed.
Briefly: install the Stripe CLI.
Create some API keys and
stripe login
. Add these API keys to.env
(the threeSTRIPE_*
variables). Then runstripe listen --forward-to localhost:8000/payments/webhook/
.
- Follow steps 0 - 3 from the above tutorial.
- Make sure to install Docker and make sure you download a version compatible with your computer.
- Set up the 3 environment variables at the bottom of
env
by copying them to.env
and uncommenting them. Note that you should not have any spaces (it is fine to leave the values as it is, but if you want to change anything, just make sure there is no whitespace surrounding the=
). - Run
docker compose build
. Wait for it to finish. - To start the server, run
docker compose up -d
. To execute a command inside the container, rundocker exec -it otis-web /bin/bash
. To stop the server, rundocker compose down
. - Follow steps 11 - 12 from above.
Note: You may need to delete db.sqlite3 if you're not getting desired results, as it serves as a cache. At this point, spinning up 2 separate containers with separate data stores is not supported.
Submit an issue on GitHub.
For OTIS students: pull requests welcome! If you think the website can be improved in some way, feel free to implement it. See contributing guidelines. It's OK if you don't have much code experience; I'm willing to guide you along.
526561645265616452656164