An API backend for an application with entity relation table.
Country
| key | Data type | Description |
|---|---|---|
| id | Primary Key | |
| Name | Character Field | Name of the country |
| Description | Text Field | Description of country |
| Population | Integer Field | |
| GDP | Float Field |
State
| key | Data type | Description |
|---|---|---|
| id | Primary Key | |
| Country | Foreign Key | Relation to country |
| Name | Character Field | Name of the state |
| Description | Text Field | Description of state |
| Population | Integer Field | |
| GDP | Float Field |
City
| key | Data type | Description |
|---|---|---|
| id | Primary Key | |
| State | Foreign Key | Relation to State |
| Country | Foreign Key | Relation to Country |
| Name | Character Field | Name of the city |
| Description | Text Field | Description of city |
| Population | Integer Field | |
| GDP | Float Field | |
| Pin Code | Character Field |
Town
| key | Data type | Description |
|---|---|---|
| id | Primary Key | |
| State | Foreign Key | Relation to State |
| Country | Foreign Key | Relation to Country |
| Name | Character Field | Name of the Town |
| Description | Text Field | Description of Town |
| Population | Integer Field | |
| GDP | Float Field | |
| Pin Code | Character Field |
Person
| key | Data type | Description |
|---|---|---|
| id | Primary Key | |
| Name | Character Field | Name of the Person |
| State | Foreign Key | Relation to State |
| Country | Foreign Key | Relation to Country |
| City | Foreign Key | Relation to city |
| Town | Foreign Key | Relation to town |
- Initial Setup
- Clone this repository :
https://github.com/the-arcade-01/DRF-API.git - Install Requirements :
pip install -r requirements.txt
- Backend Setup
- cd to Backend and run following sets of commands
python manage.py makemigrationspython manage.py migrate
- Create super user by
python manage.py createsuperuser
NOTE: API required Basic Authentication, creating superuser is must
API url set
admin/
country-viewset/
country-viewset/<int:id>/
state-viewset/
state-viewset/<int:id>/
city-viewset/
city-viewset/<int:id>/
town-viewset/
town-viewset/<int:id>/
person-viewset/
person-viewset/<int:id>/
- Country Viewset URLs:
- For entire data with Pagination
http://127.0.0.1:8000/country-viewset/ - For individual data
http://127.0.0.1:8000/country-viewset/<int:id>/
Response examples:
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 3,
"next": "http://127.0.0.1:8000/country-viewset/api/?page=2",
"previous": null,
"results": [
{
"id": 8,
"name": "India",
"description": "India is a diverse country",
"population": 1300,
"gdp": 3.202,
"state_country": [
{
"id": 12,
"country": 8,
"name": "Madhya Pradesh",
"description": "Central state of India",
"population": 45,
"gdp": 0.002,
"city_state": [
{
"id": 6,
"country": 8,
"state": 12,
"name": "Bhopal",
"description": "City of Lakes",
"population": 20,
"gdp": 0.00134,
"pin_code": "400001",
"person_city": [
{
"id": 6,
"name": "Anish",
"country": 8,
"state": 12,
"city": 6,
"town": 4
}
]
}
],
"town_state": [
{
"id": 4,
"country": 8,
"state": 12,
"name": "GandhiNagar",
"description": "Town in MP",
"population": 5,
"gdp": 0.00015,
"pin_code": "400101",
"person_town": [
{
"id": 6,
"name": "Anish",
"country": 8,
"state": 12,
"city": 6,
"town": 4
}
]
}
]
},
{
"id": 11,
"country": 8,
"name": "Maharashtra",
"description": "Jai Maharashtra!!",
"population": 123,
"gdp": 0.0034,
"city_state": [],
"town_state": []
}
]
}
]
}- Person Viewset URLs:
- For entire data with Pagination
http://127.0.0.1:8000/person-viewset/ - For individual data
http://127.0.0.1:8000/person-viewset/<int:id>/
Response examples:
- Url :
/person-viewset/api/?page=2
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 4,
"next": "http://127.0.0.1:8000/person-viewset/api/?page=3",
"previous": "http://127.0.0.1:8000/person-viewset/api/",
"results": [
{
"id": 6,
"name": "Anish",
"country": 8,
"state": 12,
"city": 6,
"town": 4
}
]
}- Ordering and Search Filter Response :
/person-viewset/api/?ordering=name&search=India
Ordering on Person Name and Search Filter on Country Name
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 2,
"next": "http://127.0.0.1:8000/person-viewset/api/?ordering=name&page=2&search=India",
"previous": null,
"results": [
{
"id": 6,
"name": "Anish",
"country": 8,
"state": 12,
"city": 6,
"town": 4
}
]
}Postman Collections can be found Here
- API for Country, City, Town, State and Person
- CRUD for all
- ModelSerializer with Nested serializer
- Person relation with City and Town
- Pagination API for all
- Filter, Ordering and Searching for Person based on related keys
- selected_related() for speeding queries
- Postman Collections for all API
- Implemented views using ModelViewSet
- Comments and modular code