In this homework you will start using the datastore to store the pins that each user adds to his account and later displaying them. Note that you will not be storing the images themselves (the *.png or *.jpg). You will only be storing the URL to the image.
First, create a directory called
/pic
in your project and add a few of your favorite jpegs from the net. You will use these when debugging your app. They will save you time as your browser will not have to keep fetching images from the net (and, you can code offline).You will then create a
Pin(db.Model)
with imgUrl
, caption
, date
, and owner
properties. That is, each Pin will have a URL, a caption, a date of creation, and an owner associated with it. Each pin will also have a unique id
, but you can just use the built-in key
. That is, the Pin's id will be given by self.key().id()
.The way your app will work is as follows:
- As before, on 'GET *' if the user is not logged in he is shown the login page. If he is logged in then 'GET /' returns a form asking him for the img URL and caption. You do not need to check if it is a valid URL.
- When the user hits 'submit' on the form (for adding a image) you will generate a 'POST /pin/' that sends the information of the new pin to the server. Your server code will store this new pin information in the datastore and then forward the user (
self.redirect()
) to the new pin's page: /pin/1234 (or, whatever number you have the pin). - '/pin/1234' will show pin 1234. It will also show the URL and caption values in text boxes, allowing the user to change this. If the user changes them and clicks on the 'update Pin info' button you will generate a 'POST /pin/1234' with the new information and update the info on the server accordingly, then come back to 'GET /pin/1234' which will then be updated.
- The '/pin/1234' will also have a 'delete this pin' button which does as it says.
- A 'GET /pin/' will return a page with thumbnails of all the pins owned by the user, each one linked to its pin page. In the header of all pages it will say 'My Pins' which is just a link to '/pin'.
What we are going for here is a fairly standard REST API for getting and editing your pins.
To summarize:
GET / | when logged-in, shows a form for adding a pin | ||||||
GET /pin | lists all the users' pins and links us to each one. | ||||||
POST /pin | creates a new pin | ||||||
GET /pin/123 | shows pin 123, and a form for editing it | ||||||
POST /pin/123 | updates pin 123 (caption or url), or deletes it |
Required Reading
- You will need to read the Datastore example and consult the Datastore API for all the details of its operation (you only need to know the basics for this homework).
- You will be using the users API to let users log in and determining if the person is logged-in or not. Almost everything you need from 'users' is covered in this Using Users Service example.
Deadline
As always, push it your github repo by Monday, September 24 @9am
No comments:
Post a Comment