
# Autogenerated Api

Get Autogenerated Serializers and API EndPoints

## Requirements
```
- django
- djangorestframework
```

```
Tested with all Django versions from `1.8.x to 2.x.x`	
```

### Released with latest version of `Django`.

### Note
```
For Django==1.8.x
	- djangorestframework==3.4.2
```

## Installing autogenerated-api

autogenerated-api built for django.

```bash
pip install autogenerated_api
```

## Customizable Files in Apps

```pyhton
django_app architecture looks like
- appp_name
	- __init__.py
	- models.py
	- serializers.py
	- tests.py
	- views.py
```

### serilizers.py

```python
from .models import ModelName
from autogenerated_api.serializers import DeadlySerializerFactory
ModelNameDeadlySerializer = DeadlySerializerFactory(modelName)
- DeadlySerializerFactory `Optional Paramaters`
	- nest = ["field_1","field_2"] 
	- nested_fields = {"field_name_in_releation" : ["related_model_field_1","related_model_field_2"]}
	- exclude = ["field_1","field_2"] : fields that you want to exclude	
 
ModelNameDeadlySerializer = DeadlySerializerFactory(modelName,nest,nested_fields,exclude)	
```

## views.py

```python
import app_name.models
import app_name.serializers
from autogenerated_api.autogeneration import make_all_viewsets

make_all_viewsets(__name__)
```

### Create a new file `api_urls.py` in main project folder.

Main project folder Architecture
```python
- main_proj_name
	- __init__.py
	- settings.py
	- urls.py
	- wsgi.py
	- api_urls.py
```

### Add below codes in `api_urls.py` file.
```python
import app_name.views
from django.urls import path, re_path , include

from autogenerated_api import autogenerated_urls
urlpatterns = autogenerated_urls.urlpatterns

urlpatterns += []

```

## Adding to URLs

Add the Below `urls.py`

```python
import django
dj_version = django.get_version()

from django.contrib import admin
try:
    from django.urls import path, include , re_path
except ImportError:
    from django.conf.urls import include, url

try: 
    from django.core.urlresolvers import reverse 
except ImportError: 
    from django.urls import reverse

import re

if re.search('^2[\d.]+',str(dj_version)):
    urlpatterns = [
            re_path(r'^api/', include(('main_proj_name.api_urls', 'main_proj_name') , namespace="api")),
    ]
else:
    urlpatterns = [
        url(r'^admin/', include(admin.site.urls)),
        url(r'^api/', include('main_proj_name.api_urls' , namespace="api")),
    ]
```

## Customizable Fields in Settings.

```python
AUTOGENERATE_APPS = ["app_name"]
```

### Finally, you will get autogenerated seraializers and end points.

```
- Autogenerated End Points
	- `/api/model_name_in_lower/` :  list out all the model_instance
	- `/api/model_name_in_lower/<instance_id>` : you will get detail of instance of given id  
```

## Why use autogenerated_api?

Through `autogenerated_api` module , you can directly create serializers coresponding to each model and can also access the all fields value of model which are in relation `(m2m or foreignkey relationship)`.

To get the list of  model instance , You  have to write an api end points , like `ListAPiView` and for getting the detail of model instance, have to implement  `DetailAPIView or RetrieveApiView` end points.

Now , You don't have to create these APi-end points and get worry about the serailizers . This module will take care. Just , follow the steps that i mentioned above. 

### Coming
	- Module with more functionality and more autogenerated end points.





