5.6 KiB
OCR / DA Python - Project10
SoftDesk
Build a REST API using DjangoRestFramework
- users, authors, contributors
- projects/issues/comments
-> data models, user model, relations -> authentication
Introduction
These instructions allow you to :
- get the program
- install the required environment
- run and use it
Requirements
- modules
packages : python 3.11, python3.11-venv, python3-pip, git
Installation
-
Clone this repo and go in the project's directory
-
Create the virtual environment
python3.11 -m venv env
source env/bin/activate
- install environment
pip install -r requirements.txt
Execution
- Go in the Django project directory
cd softdesk
- Initialize the database
python manage.py migrate
- Launch the test's server
python manage.py runserver
Usage
Authentication :
Without authentication (no token):
- you can create a user
- you can get the project's list
For any other action a token is required
To get details of a project you must be contributor
To create/get detail of issue or to create/get detail of comment you must be contributor to the project
User's management:
User create:
-> POST /api/user/create/
<- 201_CREATED
; 400_BAD_REQUEST
params:
{
"username": str,
"email": str,
"password": str,
"password2": str,
"age": int,
"can_be_contacted": boolean,
"can_data_be_shared": boolean
}
User info:
token required
-> GET /api/user/
<- 200_OK / data
User update:
token required
-> PATCH /api/user/
<- 201_CREATED
; 400_BAD_REQUEST
params:
{
"email": str,
"can_be_contacted": boolean,
"can_data_be_shared": boolean
}
Password update:
-> GET /api/user/password-update/
<- 204_NO_CONTENT
; 400_BAD_REQUEST
params:
{
"old_password": str,
"new_password": str,
}
Delete a user
token required
-> DELETE /api/user/
<- 204_NO_CONTENT
; 401_UNAUTHORIZED
params:
{
"user": str
}
Get token
-> POST /api/token/
<- 200_OK
params
{
"username": str,
"password": str,
}
response
{
"refresh": "xxxxx",
"access": "xxxx"
}
Refresh token
-> POST /api/token/refresh/
<- 200_OK
params
{
"username": str,
"password": str,
"refresh": "xxxxxx"
}
response
{
"refresh": "xxxxx",
"access": "xxxx"
}
Project:
Retrieve the list of projects
-> GET /api/project/
<- 200_OK / data
; 403_FORBIDDEN
querystrings
?contributor={user}
?author={user}
Create a project
-> POST /api/project/
<- 200_OK / data
; 403_FORBIDDEN
params:
{
"title": str,
"type":
"choices": [
{
"value": "BackEnd",
},
{
"value": "FrontEnd",
},
{
"value": "iOS",
},
{
"value": "Android",
},
"description": str,
}
Get project's detail
token required
-> GET /api/project/{id}/
<- 200_OK / data
; 403_FORBIDDEN
Update a project
token required
-> PATCH /api/project/{id}/
<- 200_OK / data
; 403_FORBIDDEN
params:
{
"title": str,
"type":
"choices": [
{
"value": "BackEnd",
},
{
"value": "FrontEnd",
},
{
"value": "iOS",
},
{
"value": "Android",
},
"description": str,
}
Add a contributor to a project
token required
-> PATCH /api/project/{id}/contributor/
<- 202_ACCEPTED
; 403_FORBIDDEN
params:
{
"contributor": {username}
}
Delete a project
token required
-> DELETE /api/project/{id}/
<- 204_NO_CONTENT
; 403_FORBIDDEN
Issue:
List issues (where requestor is contributor)
token required
-> GET /api/issue/
<- 200_OK
Create an issue
token required
-> POST /api/issue/
<- 201_CREATED / data
; 403_FORBIDDEN
params:
{
"title": str,
"project": int,
"description": str,
"priority":
"choices": [
{
"value": "Low",
},
{
"value": "Medium",
},
{
"value": "High",
}
]
"tag":
"choices": [
{
"value": "Bug",
},
{
"value": "Feature",
},
{
"value": "Task",
}
]
"status":
"choices": [
{
"value": "ToDo",
},
{
"value": "In Progress",
},
{
"value": "Finished",,
}
]
}
Update an issue
token required
-> PATCH /api/issue/{id}/
<- 200_OK / data
; 403_FORBIDDEN
/!\ Only the author of an issue can affect it
(update to another author)
Delete an issue
token required
-> DELETE /api/issue/{id}/
<- 204_NO_CONTENT
; 403_FORBIDDEN
Retrieve contributors for a given issue
token required
-> GET /api/issue/{id}/contributors/
<- 200_OK
; 403_FORBIDDEN
Comment:
Create a comment
token required
-> POST /api/comment/
<- 201_CREATED / data
; 403_FORBIDDEN
params:
{
"title": str,
"issue": int,
"description": str
}
Update a comment
token required
-> PATCH /api/comment/{id}/
<- 200_OK / data
; 403_FORBIDDEN
Delete a comment
token required
-> DELETE /api/comment/{id}/
<- 204_NO_CONTENT
; 403_FORBIDDEN
Author
License
MIT License
Copyright (c) 2025