Create a community of like minded authors to foster inspiration and innovation by leveraging the modern web.
The preferred JSON object to be returned by the API should be structured as follows:
{
"user": {
"email": "[email protected]",
"token": "jwt.token.here",
"username": "jake",
"bio": "I work at statefarm",
"image": null
}
}
{
"profile": {
"username": "jake",
"bio": "I work at statefarm",
"image": "image-link",
"following": false
}
}
{
"users": [
{
"email": "[email protected]",
"username": "jake",
"profile": {
"username": "jake",
"bio": "I work at statefarm",
"image": "image-link",
"following": false
}
},
{
"email": "[email protected]",
"username": "jake2",
"profile": {
"username": "jake2",
"bio": "I work at statefarm2",
"image": "image-link2",
"following": false
}
}
]
}
{
"article": {
"slug": "how-to-train-your-dragon",
"title": "How to train your dragon",
"description": "Ever wonder how?",
"body": "It takes a Jacobian",
"tagList": ["dragons", "training"],
"createdAt": "2016-02-18T03:22:56.637Z",
"updatedAt": "2016-02-18T03:48:35.824Z",
"favorited": false,
"favoritesCount": 0,
"author": {
"username": "jake",
"bio": "I work at statefarm",
"image": "https://i.stack.imgur.com/xHWG8.jpg",
"following": false
}
}
}
{
"articles":[{
"slug": "how-to-train-your-dragon",
"title": "How to train your dragon",
"description": "Ever wonder how?",
"body": "It takes a Jacobian",
"tagList": ["dragons", "training"],
"createdAt": "2016-02-18T03:22:56.637Z",
"updatedAt": "2016-02-18T03:48:35.824Z",
"favorited": false,
"favoritesCount": 0,
"author": {
"username": "jake",
"bio": "I work at statefarm",
"image": "https://i.stack.imgur.com/xHWG8.jpg",
"following": false
}
}, {
"slug": "how-to-train-your-dragon-2",
"title": "How to train your dragon 2",
"description": "So toothless",
"body": "It a dragon",
"tagList": ["dragons", "training"],
"createdAt": "2016-02-18T03:22:56.637Z",
"updatedAt": "2016-02-18T03:48:35.824Z",
"favorited": false,
"favoritesCount": 0,
"author": {
"username": "jake",
"bio": "I work at statefarm",
"image": "https://i.stack.imgur.com/xHWG8.jpg",
"following": false
}
}],
"articlesCount": 2
}
{
"comment": {
"id": 1,
"createdAt": "2016-02-18T03:22:56.637Z",
"updatedAt": "2016-02-18T03:22:56.637Z",
"body": "It takes a Jacobian",
"author": {
"username": "jake",
"bio": "I work at statefarm",
"image": "https://i.stack.imgur.com/xHWG8.jpg",
"following": false
}
}
}
{
"comments": [{
"id": 1,
"createdAt": "2016-02-18T03:22:56.637Z",
"updatedAt": "2016-02-18T03:22:56.637Z",
"body": "It takes a Jacobian",
"author": {
"username": "jake",
"bio": "I work at statefarm",
"image": "https://i.stack.imgur.com/xHWG8.jpg",
"following": false
}
}],
"commentsCount": 1
}
{
"tags": [
{
"id": 1,
"tag_name": "reactjs"
},
{
"id": 2,
"tag_name": "angularjs"
}
]
}
{
"reports": [
"user": "jake",
"article": "how-to-train-your-dragon",
"report_message": "let me report this issue"
]
}
If a request fails any validations, expect errors in the following format:
{
"errors":{
"body": [
"can't be empty"
]
}
}
401 for Unauthorized requests, when a request requires authentication but it isn't provided
403 for Forbidden requests, when a request may be valid but the user doesn't have permissions to perform the action
404 for Not found requests, when a resource can't be found to fulfill the request
POST /api/users/login
Example request body:
{
"user":{
"email": "[email protected]",
"password": "jakejake"
}
}
No authentication required, returns a User
Required fields: email
, password
POST /api/users
Example request body:
{
"user":{
"username": "Jacob",
"email": "[email protected]",
"password": "jakejake"
}
}
No authentication required, returns a User
Required fields: email
, username
, password
GET /api/user
Authentication required, returns a User that's the current user
PUT /api/user
Example request body:
{
"user":{
"email": "[email protected]",
"bio": "I like to skateboard",
"image": "https://i.stack.imgur.com/xHWG8.jpg"
}
}
Authentication required, returns the User
Accepted fields: email
, username
, password
GET /api/profiles/:username
Authentication optional, returns a Profile
POST /api/profiles/:username/follow
Authentication required, returns a Profile
No additional parameters required
DELETE /api/profiles/:username/follow
Authentication required, returns a Profile
No additional parameters required
POST /api/users/reset/password
Example request body:
{
"user":{
"email": "[email protected]"
}
}
No authentication required, sends a password reset link to the email
Accepted fields: email
PATCH /api/user/reset-password/<token>
Example request body:
{
"user":{
"password": "new_password"
}
}
Authentication required, returns the User
Accepted fields: email
, username
, password
GET /api/articles
Returns most recent articles globally by default, provide tag
, author
or favorited
query parameter to filter results
Query Parameters:
Filter by tag:
?tag=AngularJS
Filter by author:
?author=jake
Favorited by user:
?favorited=jake
Limit number of articles (default is 20):
?limit=20
Offset/skip number of articles (default is 0):
?offset=0
Authentication optional, will return multiple articles, ordered by most recent first
GET /api/articles/feed
Can also take limit
and offset
query parameters like List Articles
Authentication required, will return multiple articles created by followed users, ordered by most recent first.
GET /api/articles/:slug
No authentication required, will return single article
POST /api/articles
Example request body:
{
"article": {
"title": "How to train your dragon",
"description": "Ever wonder how?",
"body": "You have to believe",
"tags": ["reactjs", "angularjs", "dragons"]
}
}
Authentication required, will return an Article
Required fields: title
, description
, body
Optional fields: tagList
as an array of Strings
PUT /api/articles/:slug
Example request body:
{
"article": {
"title": "Did you train your dragon?"
}
}
Authentication required, returns the updated Article
Optional fields: title
, description
, body
The slug
also gets updated when the title
is changed
DELETE /api/articles/:slug
Authentication required
POST /api/articles/:slug/comments
Example request body:
{
"comment": {
"body": "His name was my name too."
}
}
Authentication required, returns the created Comment
Required field: body
GET /api/articles/:slug/comments
Authentication optional, returns multiple comments
DELETE /api/articles/:slug/comments/:id
Authentication required
POST /api/articles/:slug/favorite
Authentication required, returns the Article No additional parameters required
DELETE /api/articles/:slug/favorite
Authentication required, returns the Article
No additional parameters required
PUT /api/articles/<slug>/
Example request body:
{
"article": {
"title": "How to train your dragon",
"description": "Ever Wonder how?",
"body": "Keep reading...",
"tags": ["tag1", "tag2"]
}
}
Authentication required, will return an Article
GET /api/articles/tags/tag_list/
Authentication required, returns multiple tags.
GET /api/articles/tags/tag_list/<tag_id>
Authentication and super user required, returns a tag.
DELETE /api/articles/tags/tag_list/<tag_id>
Authentication and super user required.
UPDATE /api/articles/tags/tag_list/<tag_id>
Example request body:
{
"tag_name": "update_to_me"
}
Authentication and super user required. returns a tag.
POST /api/articles/reports/<slug>/
Example request body:
{
"report_message": "let me report this issue"
}
Required fields: report_message
.
Authentication required, returns a report.
GET /api/articles/reports/
Authentication and super user required, returns multiple reports.
GET /api/articles/reports/<slug>/
Authentication and super user required, returns multiple reports.
-
Install PostgresQL on the machine.
-
Run
pip install -r requirements.txt
to install all the project requirements. -
Set your environment Variables Below :
SECRET_KEY
-
Then
RUN
your application.
-
To run it on your local machine;
python3 manage.py runserver
Run pip install -r requirements.txt
to install all the project requirements.
Creating your Heroku app
- Log into your heroku dashboard and create a pipeline
- Connect the pipeline apps to your Github repo
- Create staging and production apps and set the staging app to auto deploy from the develop branch and the production app to auto deploy from master.
- Add a database to the app
Read more.... https://devcenter.heroku.com/articles/heroku-postgresql
- Setup the environment variables in the app settings.
Follow this link for more instructions on how to deploy a django application on Heroku.
https://devcenter.heroku.com/articles/django-app-configuration
You may add a review app to your pipeline by enabling Review apps.
More about Review apps, https://devcenter.heroku.com/articles/github-integration-review-apps
After deploying the app, you can select "Open app" from the top right corner of your dashboard. Here you will get access to the link of your deployed app.