Working_URL: http://f62016e9.ngrok.io
Presentation_URL: http://prezi.com/e3mdfoisyaj6/?utm_campaign=share&utm_medium=copy
###Setup! First thing : on ubuntu or mac terminal run gedit /etc/hosts/ and add the following
127.0.0.1 NSITHack.com
Outcome the hosts file now looks like this :
127.0.0.1 NSITHack.com
127.0.0.1 localhost
127.0.1.1 jx-dell-3
This was necessary to add fb login and also for AngularJS routes
Tech used: Django, Django rest framework, MySql,AngularJS, css3, materializecss, bower, ROR
###Features facebook oauth token based auth profile views with profile pictures Help apparent to everyone. No signup required To help someone, user must be registered with us, so that we can store the data efficiently sharing url provided to the user afte reporting the Disaster for sharing to ask for help Disaster reporting
###Django setup: mkvirtualenvwrapper venv source virtualenvwrapper.sh workon venv cd into votingapp/voteApp
pip install -r requirements.txt
After pulling the repository, make sure you have the DB created in mysql with same name that is specified in the settings.py file. Grant all privileges to the specified user by the following command :
Read settings.py file, go to DATABASES dictionary and read the name of the database, user name and password
First thing is first:
gedit ~/.bashrc
export PROJECT_DB_NAME='Project'
export PROJECT_DB_ROOT_USER='username'
export PROJECT_DB_ROOT_USER_PWD='password'
export email_user='email@gmail'
export email_password='2 step validation password token'
Make sure MY SQL is installed
type in the terminal :
mysql -u root -p >
Enter your password and press enter >
create database 'DBNAME IN SETTINGS.py'>
GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%' WITH GRANT OPTION;
quit() >
Run python manage.py makemigrations > python manage.py migrate
Make sure you have your super user created and if not then
python manage.py createsuperuser >
Enter email,username,password
You have your superuser
NOTE: Do not commit any db changes or migrations, to avoid this, migrations directory has been included in gitignore
Whenever you install any dependency by pip run the following command:
pip freeze>requirements.txt
##Front end configuration
after pulling the repository, make sure you have bower and npm installed globally, if not then here are the commands :
Installation Instructions for Linux Distributions : /* Remove all older packages of node */
dpkg --get-selections | grep node
sudo apt-get remove --purge node
sudo apt-get remove --purge nodejs
/* Now install */
sudo apt-get install nodejs
sudo apt-get install npm
sudo ln -s /usr/bin/nodejs /usr/bin/node
/* Getting started with frontend project */ cd to your static
cd static
now in your project's base directory(the path where you see static files) run the following command
bower install
this will install all the dependencies in the static folder as the path is set in .bowerrc in the base directory
/* To run the project */
Make sure you have all the requirements in the requirements.txt satisfied then while your terminal is in base dir and virtualenv activated
run the following command
python manage.py runserver
/* Small note */
python manage.py makemigrations
python manage.py migrate
###API_VIEWS: /Disaster/
URL : http://NSITHack.com:8000/disaster/sys/disaster/{{pk}}
method GET:
lists or retrieves(if pk is there) all the questions asked
request {}
response is JSON containin array of objects like this {
"id": 2 (id of Disaster),
"disaster_description":"",
"disaster_city":"Delhi",
"disaster_lat":"float field",
""disaster_long:"float field",
"disaster_name": "EarthQuake",
"pub_date": "2016-03-25T14:02:39.266374Z",
"reportedby": 13
}
method POST:
permissions: User can be anonymous
request {
"disaster_description":"",
"disaster_city":"Delhi",
"disaster_lat":"float field",
""disaster_long:"float field",
"disaster_name": "EarthQuake",
}
response{
JSON of containing disaster id to generate url to be shared
}
/Help/
URL : http://NSITHack.com:8000/disaster/sys/help/
method GET(list):
retrieves all the instances of willingToHelp table belonging to a given city if pk isnt given in get req
method GET(retrieve):
retrieves all the instances of willingToHelp table belonging to a given city if pk isnt given in get req
method POST:
permissions: User should be authenticated and owner of question whose choices are being created
request {
'disaster':'pk',
}
response{
JSON of question like above
}
/As soon as new disaster is created, a signal is triggered which will be responsible for sending user specific push notification, tornado, sockjs and swamp dragon. Firebase support is a instable so we did not want to go with that. We ended up taking the hard way about it This could not be implemented in the given time frame as frontend with angular was a bit tricky. So will be needing time plus real time notifications without using cloud services like FIREBASE etc was never easy with django/
URL : http://NSITHack.com:8000/disaster/mobhelp/?city=query
method get:
gives all the user willing to help in this city for this disaster
URL : http://NSITHack.com:8000/disaster/mobhelp/unsafeuser/?city=query
method get:
gives all the user suffering in this city for this disaster
/authentication/
##All the following urls under authentication have a prefix http//NSITHack.com:8000/authentication ###GET
URL: /me/
##Retrieve user.
response
status: HTTP_200_OK (success)
data:
{{ User.USERNAME_FIELD }}
{{ User._meta.pk.name }}
{{ User.REQUIRED_FIELDS }}
##PUT
URL: /me/
##Update user.
request
data:
{{ User.REQUIRED_FIELDS }}
response
status: HTTP_200_OK (success)
data:
{{ User.USERNAME_FIELD }}
{{ User._meta.pk.name }}
{{ User.REQUIRED_FIELDS }}
##Register
Use this endpoint to register new user. Your user model manager should implement create_user method and have USERNAME_FIELD and REQUIRED_FIELDS fields.
###POST
URL: /register/
request
data:
{{ User.USERNAME_FIELD }}
{{ User.REQUIRED_FIELDS }}
password
response
status: HTTP_201_CREATED (success)
data:
{{ User.USERNAME_FIELD }}
{{ User._meta.pk.name }}
{{ User.REQUIRED_FIELDS }}
###Login
Use this endpoint to obtain user authentication token. This endpoint is available only if you are using token based authentication.
##POST
URL: /login/
request
data:
{{ User.USERNAME_FIELD }}
password
response
status: HTTP_200_OK (success)
data:
auth_token
###Logout
Use this endpoint to logout user (remove user authentication token). This endpoint is available only if you are using token based authentication.
##POST
URL: /logout/
response
status: HTTP_200_OK (success)
##Activate
Use this endpoint to activate user account. This endpoint is not a URL which will be directly exposed to your users - you should provide site in your frontend application (configured by ACTIVATION_URL) which will send POST request to activate endpoint.
##POST
URL: /activate/
request
data:
uid
token
response
status: HTTP_200_OK (success)
##Set username
Use this endpoint to change user username (USERNAME_FIELD).
##POST
URL: /{{ User.USERNAME_FIELD }}/
request
data:
new_{{ User.USERNAME_FIELD }}
re_new_{{ User.USERNAME_FIELD }} (if SET_USERNAME_RETYPE is True)
current_password
response
status: HTTP_200_OK (success)
##Set password
Use this endpoint to change user password.
##POST
URL: /password/
request
data:
new_password
re_new_password (if SET_PASSWORD_RETYPE is True)
current_password
response
status: HTTP_200_OK (success)
##Reset password
Use this endpoint to send email to user with password reset link. You have to setup PASSWORD_RESET_CONFIRM_URL.
##POST
URL: /password/reset/
request
data:
email
response
status: HTTP_200_OK (success)
##Reset password confirmation
Use this endpoint to finish reset password process. This endpoint is not a URL which will be directly exposed to your users - you should provide site in your frontend application (configured by PASSWORD_RESET_CONFIRM_URL) which will send POST request to reset password confirmation endpoint.
##POST
URL: /password/reset/confirm/
request
data:
uid
token
new_password
re_new_password (if PASSWORD_RESET_CONFIRM_RETYPE is True)
response
status: HTTP_200_OK (success)
/Profile/ ##Check auth status URL: http//NSITHack.com:8000/auth/detail/loginstatus/ GET is allowed only ##get current user full details URL http//NSITHack.com:8000/auth/detail/getcurruser/{{pk}} Only get is allowd response { "id": 10 "email": "shubh.aggarwal.37@gmail.com" "username": "ShubhamAggarwal" "date_joined": "2016-03-24T10:48:00.888966Z" "last_login": null "social_thumb": "http://graph.facebook.com/1044865508890561/picture?type=normal" "reported": all disasters reported by the user "helpedin": all disasters this usrs helped in "city": "", "residence_lat":"", "residence_long":"",
}
/Exotel API/
##Sending a SMS Reply in response to an Incoming SMS
HTTP Request (from Exotel to your URL)
GET /exotel.php?SmsSid=xxxxxx&From=9052161119&To=56070&Date=xxxxx&Body=Hello+World
HTTP/1.1