CSci 284 - Flask Project (Abbreviated Description)
For your final project, your will create a database-driven website either solo or in teams of 2. There are several "milestones" (checkpoints) as indicated below:
More details for what each milestone entails, some examples, and what to turn in can be found by following the above links. Also you can visit the complete final project page.
Data Sources
Any proposed project will need a source of data in order to populate database tables. You should be able to find many data sources; collections of different types of data are highly prized. Here are a few that we've used over the years:
- CORGIS Dataset Project
- FiveThirtyEight Datasets
- Kaggle Datasets - so many of these, search by subject area
An A project will meet all of the following conditions:
- There should be at least five underlying database tables that are meaningfully connected to each other. At least one of these tables will be too big to load into the database by hand; you'll probably write python code to load it up.
- An alternative to finding a big data set and using python to load it into the database would be to build something that generates data, like the rock-paper-scissors game. For example, you could construct a survey and have a bunch of your friends answer it.
- Either way, you are required to have a specific "data plan" approved by me on or before the date for Milestone 2. See the links above for more details on that.
- All the pages should have a professional-looking unified style derived from .css files that are tucked away in a single directory apart from your web pages. On your pages, tags that have a style=... attribute should only be used if absolutely necessary. Use ids and classes when possible.
- The site's homepage should include a header with a site menu.
- You should have at least one robust querying page that allows users to slice and dice your data in various ways.
- The available querying options should have both "listing" and "grouping" type queries. For example, if we were looking at the rps tables, a "listing" query would be: find all the matches where player A played against player B. A "grouping" table would be something like: find the overall record of player A against each of other player.
- At least some of the results pages should have links to other pre-defined queries. For example, suppose the user wants to see the record of a player A's results against each other player. On that results screen, you might make each player's name a link to a full list of all those matches against player A.
- Your project should incorporate anything additional I add to this page or mention in a subsequent class.
Final Report:
- what new SQL/Flask/Python/HTML/CSS did you learn for the project?
- if done as a team, describe the division of labor: who did what?
- attach the results of calling DESCRIBE for each table used in the final demonstrated project
More things to keep in mind (I may continue to add to this list):
- In all tables, text should be left-aligned and numbers should be right-aligned. Break this rule in a particular case only if you can articulate a good reason for doing so.
- Do not use SET MYSQL_BIG_SELECTS = 1
- Indexing Rule of Thumb: to avoid slow queries, create an index for each column that is used in a WHERE or INNER JOIN
- ...