Due: Thu, 10 Jul 2014, 10pm
70 pts, 7% of total grade.


Create a Django app hosted on PythonAnywhere with Python and Twitter Bootstrap that emulates IMDB to track something.

The rest of this description uses world crises just as an example.

Your group must propose a similar topic with similar resources.

For the purposes of grading, do not change the PythonAnywhere website between the time that you submit it and the time that it is graded.

IMDB has two major kinds of pages: movies/shows and people. Movies/shows link to people and people link back to movies/shows.

World Crisis will have three major kinds of pages: crises, organizations, and people, and again each will link to the others.

There will be three phases.

Phase Features
I Collect data on ten crises, ten organizations, and ten people.
Identify common attributes of the data and insure that every data item has a value for that attribute.
Make sure to collect enough information to make it a rich experience.
Create a RESTful API using Apiary. Log into Apiary with your GitHub credentials and connect Apiary to your private repos.
Think carefully about the types and format of the requests and responses, primary keys, foreign key constraints, and validations.
Create a set of Django models to represent the data and that corresponds to the API.
Think carefully about the types of the models and about the many-to-many relationships between people, organizations, crises.
Create a static HTML page for three unique crises, three unique organizations, and three unique people that displays all of the data collected.
The pages must be served by Django on PythonAnywhere using Django templates to embed the static content into HTML.
Design the splash page well. Design the navigation well.
Use Twitter Bootstrap to present information in an organized way. Make sure to embed the different media. Make sure that everything that can be linkable is.
Create a responsive design that looks good on mobile devices.
Create a set of unit tests of the Django models.
Write an initial technical report.
The audience comprises other software developers, as opposed to users.
For this phase make it at least 10 pages.
Document the RESTful API and the Django models well.
Format the report clearly, attractively, and consistently, using good headers, figures, and grammar.

The pages must contain the following:

Page Features
Splash the group name
the group members
a way to navigate to the nine static HTML pages
Crisis name, kind, location, date and time, human impact, economic impact, resources needed, ways to help, citations, external links
embedded images (e.g. Bing, Flickr, Google)
embedded videos (e.g. Bing, Google, Vimeo)
embedded maps (e.g. Google Maps)
embedded social network feeds (e.g. Facebook, Twitter)
Organization name, kind, location, history, contact info, citations, external links
embedded images (e.g. Bing, Flickr, Google)
embedded videos (e.g. Bing, Google, Vimeo)
embedded maps (e.g. Google Maps)
embedded social network feeds (e.g. Facebook, Twitter)
Person name, kind, location, citations, external links
embedded images (e.g. Bing, Flickr, Google)
embedded videos (e.g. Bing, Google, Vimeo)
embedded maps (e.g. Google Maps)
embedded social network feeds (e.g. Facebook, Twitter)

The technical report must contain the following:

Section Features
Title The group name.
The group members.
Introduction What is the problem?
What are the use cases?
Design RESTful API
Django models
Tests unit tests of the Django models
Other Proof-read your report. Get another group to read it. Read it aloud.
Create diagrams with captions.
Create sections and subsections effectively.


Pick a project leader for the group. A group member can only be project leader once.

Once the grader has graded the project, that will be the project grade.

The project leader will always receive the project grade.

The project leader can add or subtract up to 10 points to or from any member of the group in exchange for adding or subtracting the same amount of points from the other member(s) of the group.

For example, the leader could add 10 points to person A, and subtract 5 points from person B and person C.

The leader will report those adjustments in the Google Form.


  1. Estimate time to completion.
  2. Create a public Git repository at GitHub, named cs373-idb.
  3. Add these requirements to the issue tracker at GitHub, at least 10 issues.
    Add at least 10 more issues, one for each bug or feature, both open and closed with a good description and a label.
  4. Clone your public code repo onto your local directory.
  5. Make at least 5 commits, one for each bug or feature.
    If you cannot describe your changes in a sentence, you are not committing often enough.
    Make meaningful commit messages identifying the corresponding issue in the issue tracker (see here).
  6. Write unit tests in that test corner cases and failure cases until you have an average of 3 tests for each Django model call, confirm the expected failures, and add, commit, and push to the public code repo.
  7. Implement and debug the simplest possible solution with assertions that check pre-conditions, post-conditions, argument validity, and return-value validity, until all tests pass, and add, commit, and push to the private code repo.
  8. Run pydoc on, which will create models.html, that then documents the interfaces to your models.
    Create inline comments if you need to explain the why of a particular implementation.
    Use a consistent coding convention with good variable names, good indentation, blank lines, and blank spaces.
  9. Create a log of your commits in IDB.log.
  10. Obtain the git SHA with
    git rev-parse HEAD
  11. Fill in the Google Form.
  12. It is your responsibility to protect your code from the rest of the students in the class. If your code gets out, you are as guilty as the recipient of academic dishonesty.

Requirements for getting a non-zero grade.

  1. [  5 pts] GitHub public repo with a log of the commits.
  2. [  5 pts] GitHub issue tracker with issues from requirements and more.
  3. [10 pts] RESTful API at Apiary.
  4. [10 pts] Set of Django models.
  5. [10 pts] Website using Django and Twitter Bootstrap at PythonAnywhere.
  6. [10 pts] Average of 3 unit tests per Django model call.
  7. [  5 pts] Pydoc documentation.
  8. [10 pts] Technical Report, double-spaced, 10 pages.
  9. [  5 pts] Google Form with time estimate.


  1. *.py
  2. apiary.apib
  3. models.html
  4. Report.pdf
  5. tests.out




Name GitHub ID Google Form
Tyler Hunt tylershunt Google Form