{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/comments/42919949","id":42919949,"diff_hunk":"@@ -1,75 +1,137 @@\n-## Django Framework Skeleton for Google App Engine\n+## Python Django Skeleton for Google App Engine\n \n A skeleton for building Python applications on Google App Engine with the\n-[Django framework](https://www.djangoproject.com/), using [djangoappengine](http://djangoappengine.readthedocs.org/en/latest/).\n-\n-This skeleton is a bare-bones \"hello world\" application.\n+[Django Web Framework](https://www.djangoproject.com/) using \n+[Cloud SQL](https://cloud.google.com/sql/docs/introduction).\n \n See our other [Google Cloud Platform github\n repos](https://github.com/GoogleCloudPlatform) for sample applications and\n-scaffolding for other Python frameworks and use cases.\n+scaffolding for other python frameworks and use cases.\n+\n+Note that this project no longer uses the built-in Django library but\n+uses `pip -t` to vendor Django 1.8 into the lib/ folder. \n+\n+This project is based on the introductory [Django Tutorial](https://docs.djangoproject.com/en/1.8/intro/tutorial01/)\n+polls applications.\n+\n+## Project Creation\n+\n+The basic skeleton of this project was created using the standard Django commands:\n+\n+   ```\n+   django-admin startproject mysite\n+   ```\n+\n+The DATABASE field in the myproject/settings.py is modified to use CloudSQL locally, and through\n+a Unix socket when deployed to AppEngine. The static file handler is also set up \n+in the app.yaml.\n+\n+## Enable Cloud SQL\n+\n+This project assumes you are using [CloudSQL](https://cloud.google.com/sql/docs/introduction)\n+as your database. CloudSQL is a managed MySQL instance hosted by Google Cloud, although you\n+could also host a MySQL instance elsewhere and use that. For better scalability, consider\n+[Cloud Datastore](https://cloud.google.com/datastore/docs/concepts/overview?hl=en), although\n+you must use a custom backend such as [Djangae](https://github.com/potatolondon/djangae) for your\n+models to work with it.\n \n ## Run Locally\n 1. Install the [App Engine Python SDK](https://developers.google.com/appengine/downloads).\n-See the README file for directions. You'll need Python 2.7, [pip 1.4 or later](http://www.pip-installer.org/en/latest/installing.html), and [mercurial](http://mercurial.selenic.com/) (`hg`) installed too.\n-If you're missing `hg` you can install it with `pip install mercurial` once you have `pip` installed.\n+See the README file for directions. You'll need python 2.7 and [pip 1.4 or later](http://www.pip-installer.org/en/latest/installing.html) installed too.\n \n-2. Clone this repo with:\n+1. Clone this repo with\n \n    ```\n    git clone https://github.com/GoogleCloudPlatform/appengine-django-skeleton.git\n    ```\n-3. Install dependencies in the project's directory - App Engine\n-   can only import libraries from inside your project directory.\n-   ```\n-   cd appengine-django-skeleton\n+1. Install dependencies in the project's lib directory.\n+   Note: App Engine can only import libraries from inside your project directory. The pip -t flag installs dependencies into the\n+   directory specified, so here it's used to install the lastest Django version into lib/.\n \n-   ./build.sh\n    ```\n-4. Run this project locally from the command line:\n+   cd appengine-try-python-django\n+   pip install -r requirements.txt -t lib\n+   ```\n+1. Create a new CloudSQL instance. \n+    * From the [Google Cloud Console](http://console.developer.google.com), go to Storage > CloudSQL> Create Instance\n+    * Under Acces Control > IP Address > Request IPv4 Address. This address will be your HOST for remote access to the \n+      CloudSQL instance in mysite/settings.py, so replace `<your-database-host>` with this address.\n+    * Under Databases, click New database and create the name for your database in mysite/settings.py. Replace\n+      `<your-database-name>` with this value.\n+    * Under Access Control > Authorization > Allowed Networks, click Add item, and add Network 0.0.0.0/0. This opens up","path":"README.md","position":75,"original_position":75,"commit_id":"629b6b1a53fd98a11f27b1718a293c0871cae8f8","original_commit_id":"629b6b1a53fd98a11f27b1718a293c0871cae8f8","user":{"login":"waprin","id":1075173,"avatar_url":"https://avatars.githubusercontent.com/u/1075173?v=3","gravatar_id":"","url":"https://api.github.com/users/waprin","html_url":"https://github.com/waprin","followers_url":"https://api.github.com/users/waprin/followers","following_url":"https://api.github.com/users/waprin/following{/other_user}","gists_url":"https://api.github.com/users/waprin/gists{/gist_id}","starred_url":"https://api.github.com/users/waprin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waprin/subscriptions","organizations_url":"https://api.github.com/users/waprin/orgs","repos_url":"https://api.github.com/users/waprin/repos","events_url":"https://api.github.com/users/waprin/events{/privacy}","received_events_url":"https://api.github.com/users/waprin/received_events","type":"User","site_admin":false},"body":"done","created_at":"2015-10-23T22:11:14Z","updated_at":"2015-10-23T22:11:14Z","html_url":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton/pull/2#discussion_r42919949","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/comments/42919949"},"html":{"href":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton/pull/2#discussion_r42919949"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2","id":48523070,"html_url":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton/pull/2","diff_url":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton/pull/2.diff","patch_url":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton/pull/2.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/issues/2","number":2,"state":"open","locked":false,"title":"Redo This Skeleton App","user":{"login":"waprin","id":1075173,"avatar_url":"https://avatars.githubusercontent.com/u/1075173?v=3","gravatar_id":"","url":"https://api.github.com/users/waprin","html_url":"https://github.com/waprin","followers_url":"https://api.github.com/users/waprin/followers","following_url":"https://api.github.com/users/waprin/following{/other_user}","gists_url":"https://api.github.com/users/waprin/gists{/gist_id}","starred_url":"https://api.github.com/users/waprin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waprin/subscriptions","organizations_url":"https://api.github.com/users/waprin/orgs","repos_url":"https://api.github.com/users/waprin/repos","events_url":"https://api.github.com/users/waprin/events{/privacy}","received_events_url":"https://api.github.com/users/waprin/received_events","type":"User","site_admin":false},"body":"This completely changes the skeleton app from Django non-rel to\r\nCloudSQL. The reasons for doing this are\r\n\r\n1) CloudSQL is a more natural introduction for most Djagno users\r\n2) Currently vendoring is the only way to get a modern Djagno version\r\n2) Cloud DPEs will be maintaining Django samples going forward and\r\nwe will independently work on samples to get the Django ORM working\r\nwith Datastore, and probably not Django Non-rel since it's a heavily\r\ndivergent fork","created_at":"2015-10-22T22:44:54Z","updated_at":"2015-10-23T22:11:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2dfd8a102df0e14644defdb3c3ed15481dfd47f6","assignee":{"login":"jonparrott","id":250995,"avatar_url":"https://avatars.githubusercontent.com/u/250995?v=3","gravatar_id":"","url":"https://api.github.com/users/jonparrott","html_url":"https://github.com/jonparrott","followers_url":"https://api.github.com/users/jonparrott/followers","following_url":"https://api.github.com/users/jonparrott/following{/other_user}","gists_url":"https://api.github.com/users/jonparrott/gists{/gist_id}","starred_url":"https://api.github.com/users/jonparrott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonparrott/subscriptions","organizations_url":"https://api.github.com/users/jonparrott/orgs","repos_url":"https://api.github.com/users/jonparrott/repos","events_url":"https://api.github.com/users/jonparrott/events{/privacy}","received_events_url":"https://api.github.com/users/jonparrott/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/issues/2/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/statuses/629b6b1a53fd98a11f27b1718a293c0871cae8f8","head":{"label":"waprin:master","ref":"master","sha":"629b6b1a53fd98a11f27b1718a293c0871cae8f8","user":{"login":"waprin","id":1075173,"avatar_url":"https://avatars.githubusercontent.com/u/1075173?v=3","gravatar_id":"","url":"https://api.github.com/users/waprin","html_url":"https://github.com/waprin","followers_url":"https://api.github.com/users/waprin/followers","following_url":"https://api.github.com/users/waprin/following{/other_user}","gists_url":"https://api.github.com/users/waprin/gists{/gist_id}","starred_url":"https://api.github.com/users/waprin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waprin/subscriptions","organizations_url":"https://api.github.com/users/waprin/orgs","repos_url":"https://api.github.com/users/waprin/repos","events_url":"https://api.github.com/users/waprin/events{/privacy}","received_events_url":"https://api.github.com/users/waprin/received_events","type":"User","site_admin":false},"repo":{"id":44777426,"name":"appengine-django-skeleton","full_name":"waprin/appengine-django-skeleton","owner":{"login":"waprin","id":1075173,"avatar_url":"https://avatars.githubusercontent.com/u/1075173?v=3","gravatar_id":"","url":"https://api.github.com/users/waprin","html_url":"https://github.com/waprin","followers_url":"https://api.github.com/users/waprin/followers","following_url":"https://api.github.com/users/waprin/following{/other_user}","gists_url":"https://api.github.com/users/waprin/gists{/gist_id}","starred_url":"https://api.github.com/users/waprin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waprin/subscriptions","organizations_url":"https://api.github.com/users/waprin/orgs","repos_url":"https://api.github.com/users/waprin/repos","events_url":"https://api.github.com/users/waprin/events{/privacy}","received_events_url":"https://api.github.com/users/waprin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/waprin/appengine-django-skeleton","description":"A skeleton for creating App Engine applications using the Django framework.","fork":true,"url":"https://api.github.com/repos/waprin/appengine-django-skeleton","forks_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/forks","keys_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/keys{/key_id}","collaborators_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/teams","hooks_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/hooks","issue_events_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/issues/events{/number}","events_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/events","assignees_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/assignees{/user}","branches_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/branches{/branch}","tags_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/tags","blobs_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/git/refs{/sha}","trees_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/git/trees{/sha}","statuses_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/statuses/{sha}","languages_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/languages","stargazers_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/stargazers","contributors_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/contributors","subscribers_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/subscribers","subscription_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/subscription","commits_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/commits{/sha}","git_commits_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/git/commits{/sha}","comments_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/comments{/number}","issue_comment_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/issues/comments{/number}","contents_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/contents/{+path}","compare_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/compare/{base}...{head}","merges_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/merges","archive_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/downloads","issues_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/issues{/number}","pulls_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/pulls{/number}","milestones_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/milestones{/number}","notifications_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/labels{/name}","releases_url":"https://api.github.com/repos/waprin/appengine-django-skeleton/releases{/id}","created_at":"2015-10-22T22:40:11Z","updated_at":"2015-10-22T22:44:12Z","pushed_at":"2015-10-23T19:20:04Z","git_url":"git://github.com/waprin/appengine-django-skeleton.git","ssh_url":"git@github.com:waprin/appengine-django-skeleton.git","clone_url":"https://github.com/waprin/appengine-django-skeleton.git","svn_url":"https://github.com/waprin/appengine-django-skeleton","homepage":"","size":281,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"bb728e6090f2a7ebd384cc8451376f921aefe82c","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":14054606,"name":"appengine-django-skeleton","full_name":"GoogleCloudPlatform/appengine-django-skeleton","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton","description":"A skeleton for creating App Engine applications using the Django framework.","fork":true,"url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/releases{/id}","created_at":"2013-11-01T21:27:14Z","updated_at":"2015-08-07T16:05:48Z","pushed_at":"2015-10-23T19:20:04Z","git_url":"git://github.com/GoogleCloudPlatform/appengine-django-skeleton.git","ssh_url":"git@github.com:GoogleCloudPlatform/appengine-django-skeleton.git","clone_url":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton.git","svn_url":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton","homepage":"","size":403,"stargazers_count":48,"watchers_count":48,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":29,"mirror_url":null,"open_issues_count":1,"forks":29,"open_issues":1,"watchers":48,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2"},"html":{"href":"https://github.com/GoogleCloudPlatform/appengine-django-skeleton/pull/2"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/issues/2"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/issues/2/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/pulls/2/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/appengine-django-skeleton/statuses/629b6b1a53fd98a11f27b1718a293c0871cae8f8"}}}}