Django Tastypie Sample
Playground project built on top of django-tastypie that aims to translate automatically OpenAPI definitions into secure APIs without coding.
Product Roadmap
| Status | Item | info |
|---|---|---|
| Phase 1# | ||
| ✅ | Up-to-date Dependencies |
|
| ✅ | django-tastypie Integration | |
| ✅ | Persistence | SQLite, MySql |
| ✅ | Basic Authentication | classic user/password |
| ✅ | API | Products & Sales (linked tables) |
GET Requests (public), get/, get/id |
||
| CREATE, UPD, DEL - reserved for authenticated users | ||
| Phase 2# | ||
| ✅ | OpenAPI Parser integration |
|
| ✅ | Complete the flow |
OpenAPI -> APIs |
👉 Step 1 - Download the code from the GH repository (using
GIT)
$ git clone https://github.com/app-generator/sample-django-tastypie.git
$ cd sample-django-tastypie👉 Step 2 - Start the APP in
Docker
$ docker-compose up --build Visit http://localhost:5085 in your browser. The app should be up & running.
👉 Download the code
$ git clone https://github.com/app-generator/sample-django-tastypie.git
$ cd sample-django-tastypie👉 Install modules via
VENV
$ virtualenv env
$ source env/bin/activate
$ pip install -r requirements.txt👉 Set Up Database
$ python manage.py makemigrations
$ python manage.py migrate👉 Start the app
$ python manage.py runserverAt this point, the app runs at http://127.0.0.1:8000/.
👉 How to use
This project provides endpoints for authentication, user profiles, products, and sales. The users, products, and sales endpoints require the developer to pass a JWT token in the headers with the following format Authorization: Bearer <JWT Token> that you can obtain by login at the /api/v1/auth/login/ endpoint.
POST /api/v1/auth/login/
{
"password": "12345678",
"username": "koladev33@gmail.com"
}Note: To register, you can send a POST request to this endpoint
/api/v1/auth/with apassword,username, and
The request on the login endpoint will return a JWT token you can grab to make requests on the /api/v1/products/, /api/v1/users/ and /api/v1/sales/.
Validation
Tastypie allows you to write validation schemes using Django forms. You can find an example of this at api/sale/api.py.
class SaleForm(forms.Form):
product = forms.IntegerField()
state = forms.IntegerField()
value = forms.IntegerField()
fee = forms.IntegerField()
client = forms.CharField(max_length=128)
currency = forms.CharField(max_length=10, required=False)
payment_type = forms.CharField(max_length=10, required=False)
def clean_product(self):
product_id = self.cleaned_data['product']
try:
product = Product.objects.get(id=product_id)
return product
except Product.DoesNotExist:
raise ValidationError("This product doesn't exist.")
class SaleResource(ModelResource):
class Meta:
...
validation = FormValidation(form_class=SaleForm)
authorization = UserAuthorization()Django Tastypie Sample - Open-source Starter provided by AppSeed