Final project submission deadline: April 20, 2018 at 11:59 pm
Total: 3200 points
Late assignment policy does NOT apply; late projects are not accepted. If you have a concern about deadlines and dates please let Jackie and an advisor in OSA know immediately.
Unless you have otherwise spoken with Jackie, you must submit the HW6 Project Plan before submitting your final project.
You do NOT need to fork or clone this, and should not -- only the instructions live here.
YOU SHOULD READ THIS ENTIRE SET OF INSTRUCTIONS CAREFULLY BEFORE BEGINNING YOUR WORK.
In this final project assignment, your goal is to build on provided code to build a complete working interactive application, using the material you have learned in this class. Requirements are listed below.
Unlike most HW in this class, you should not share any code you are working on for this assignment. It should be your own work. You may talk generally about concepts ("where's some good documentation for WTForms", "I'm getting this error, what do you suggest I try to do?") but nothing specific (like "can you look at my code and help talk me through it" -- that's great for HW, but not for the final project).
By submitting the assignment you are asserting that you completed this project with academic integrity and did not share your code with others.
You may, of course, talk with any instructors, post (without showing your code) on Piazza (we will monitor and edit any question with too much information in it), and use the internet, any resources from HW, section, or lecture, textbook, readings, etc.
If you use any code from the internet or directly from class, you must cite it. You CANNOT fulfill creative requirements for this assignment (e.g. defining a complete view function) with any code that comes from lecture, section, the internet, a friend, or a previous assignment, although if you include it AND cite it (see syllabus for how to cite code in a comment), that's completely OK, it just won't count for points.
(Setup code, like app.config settings, or the code to make user authentication work, is always approximately the same and will not vary much from one person to another, if it all. You do not have to cite that, but you do need to make sure you have what you need and that it works correctly!)
We have not provided any setup code for the final project (though in HW6, you will be working on some!). You will be building this project completely from scratch (with the basis of all you've already practiced and learned in SI 364, etc).
You will push all of your work (making sure not to publicly share your API keys) to a private repository on GitHub and share that repository with all three of us instructors. Note that some requirements are dependent upon another one being completed successfully, as in all applications!
This final project assignment may be of any theme or any subject you want, and involve any data (as long as it is appropriate to share with our whole class, and does not include any discriminatory content -- penalty may vary if this is the case. Please avoid it).
You may not earn any points for making a request to the iTunes API since we have used it so many times in class.
You may use any code that is exactly the same as code used in lecture or section or a previous HW.
You will NOT receive points for any code that you submitted for the midterm. Keep this in mind if you plan to use a similar theme in this project as you used on the midterm. Small amendments to it, additions, etc, if it was your own original work on the midterm, are fine and will count.
It is not enough to decide that the app you want to write does not have "that type of feature required" -- the final project assignment requires fulfilling all of these things for the credit that goes with them, so make your plan accordingly.
Reading code you have been given already, written already, and looking at examples from lecture, section, and past HW is one of the best ways to approach this. While you can't use the code directly, it can answer a lot of possible questions and provide great examples! Visual design will not earn you points for this assignment though you may certainly include it if you want -- do not prioritize it over the functionality, which is what this final project assignment is about.
(I recommend treating this as a checklist and checking things off as you get them done!)
-
Create a
README.mdfile for your app that includes the full list of requirements from this page. The ones you have completed should be bolded or checked off. (You bold things in Markdown by using two asterisks, like this:**This text would be bold** and this text would not be) -
The
README.mdfile should use markdown formatting and be clear / easy to read. -
The
README.mdfile should include a 1-paragraph (brief OK) description of what your application does -
The
README.mdfile should include a detailed explanation of how a user can user the running application (e.g. log in and see what, be able to save what, enter what, search for what... Give us examples of data to enter if it's not obviously stated in the app UI!) -
The
README.mdfile should include a list of every module that must be installed withpipif it's something you installed that we didn't use in a class session. If there are none, you should note that there are no additional modules to install. -
The
README.mdfile should include a list of all of the routes that exist in the app and the names of the templates each one should render OR, if a route does not render a template, what it returns (e.g./form->form.html, like the list we provided in the instructions for HW2 and like you had to on the midterm, or/delete -> deletes a song and redirects to index page, etc).
Note that many of these requirements of things your application must DO or must INCLUDE go together! Note also that you should read all of the requirements before making your application plan***.***
-
Ensure that your
SI364final.pyfile has all the setup (app.configvalues, import statements, code to run the app if that file is run, etc) necessary to run the Flask application, and the application runs correctly onhttp://localhost:5000(and the other routes you set up). Your main file must be calledSI364final.py, but of course you may include other files if you need. -
A user should be able to load
http://localhost:5000and see the first page they ought to see on the application. -
Include navigation in
base.htmlwith links (usinga hreftags) that lead to every other page in the application that a user should be able to click on. (e.g. in the lecture examples from the Feb 9 lecture, like this ) -
Ensure that all templates in the application inherit (using template inheritance, with
extends) frombase.htmland include at least one additionalblock. -
Must use user authentication (which should be based on the code you were provided to do this e.g. in HW4).
-
Must have data associated with a user and at least 2 routes besides
logoutthat can only be seen by logged-in users. -
At least 3 model classes besides the
Userclass. -
At least one one:many relationship that works properly built between 2 models.
-
At least one many:many relationship that works properly built between 2 models.
-
Successfully save data to each table.
-
Successfully query data from each of your models (so query at least one column, or all data, from every database table you have a model for) and use it to effect in the application (e.g. won't count if you make a query that has no effect on what you see, what is saved, or anything that happens in the app).
-
At least one query of data using an
.all()method and send the results of that query to a template. -
At least one query of data using a
.filter_by(...and show the results of that query directly (e.g. by sending the results to a template) or indirectly (e.g. using the results of the query to make a request to an API or save other data to a table). -
At least one helper function that is not a
get_or_createfunction should be defined and invoked in the application. -
At least two
get_or_createfunctions should be defined and invoked in the application (such that information can be saved without being duplicated / encountering errors). -
At least one error handler for a 404 error and a corresponding template.
-
At least one error handler for any other error (pick one -- 500? 403?) and a corresponding template.
-
Include at least 4 template
.htmlfiles in addition to the error handling template files.- At least one Jinja template for loop and at least two Jinja template conditionals should occur amongst the templates.
-
At least one request to a REST API that is based on data submitted in a WTForm OR data accessed in another way online (e.g. scraping with BeautifulSoup that does accord with other involved sites' Terms of Service, etc).
- Your application should use data from a REST API or other source such that the application processes the data in some way and saves some information that came from the source to the database (in some way).
-
At least one WTForm that sends data with a
GETrequest to a new page. -
At least one WTForm that sends data with a
POSTrequest to the same page. (NOT counting the login or registration forms provided for you in class.) -
At least one WTForm that sends data with a
POSTrequest to a new page. (NOT counting the login or registration forms provided for you in class.) -
At least two custom validators for a field in a WTForm, NOT counting the custom validators included in the log in/auth code.
-
Include at least one way to update items saved in the database in the application (like in HW5).
-
Include at least one way to delete items saved in the database in the application (also like in HW5).
-
Include at least one use of
redirect. -
Include at least two uses of
url_for. (HINT: Likely you'll need to use this several times, really.) -
Have at least 5 view functions that are not included with the code we have provided. (But you may have more! Make sure you include ALL view functions in the app in the documentation and navigation as instructed above.)
Note: Maximum possible % is 102%.
- (100 points) Include a use of an AJAX request in your application that accesses and displays useful (for use of your application) data.
- (100 points) Create, run, and commit at least one migration.
- (100 points) Include file upload in your application and save/use the results of the file. (We did not explicitly learn this in class, but there is information available about it both online and in the Grinberg book.)
- (100 points) Deploy the application to the internet (Heroku) — only counts if it is up when we grade / you can show proof it is up at a URL and tell us what the URL is in the README. (Heroku deployment as we taught you is 100% free so this will not cost anything.)
- (100 points) Implement user sign-in with OAuth (from any other service), and include that you need a specific-service account in the README, in the same section as the list of modules that must be installed.
- Commit all changes to your git repository. Should include at least the files:
README.mdSI364final.py- A
templates/directory with all templates you have created inside it - May include others (e.g. may include a
staticfolder if you are including or uploading static files, but this is not necessary!)
- Your GitHub repository should be private! (Check out how to get a Student Developer Pack to do so.)
- Create a GitHub account called
364finalon your GitHub account. (You are NOT forking and cloning anything this time, you are creating your own repo from start to finish.)- Invite users
aerenchyma(Jackie),pandeymauli(Mauli) andWatel(Sonakshi, or[email protected]) as collaborators on the repository. Here's the reminder of how to add a collaborator to a repository.
- Invite users
- Submit the link to your GitHub repository to the SI 364 Final Project assignment on our Canvas site. The link should be of the form:
https://github.com/YOURGITHUBUSERNAME/364final(if it doesn't look like that, you are probably linking to something specific inside the repo, so make sure it does look like that).
All set!