3 ms·
Also, django and Flask are extremely powerful. Django gives you an automatic admin interface and ORM, and Flask makes it easy to create a simple API to your dat
by adnam 13y ago
Also, django and Flask are extremely powerful. Django gives you an automatic admin interface and ORM, and Flask makes it easy to create a simple API to your data.
from django.conf import settings as django_settings
from myapp import settings
myapp_settings = return dict([(s, getattr(settings, s)) for s in dir(settings) if s==s.upper()])
django_settings.configure(**myapp_settings)
from myapp.models import User
app = Flask(__name__)
api = restful.Api(app)
class UserResource(restful.Resource):
def get(self):
return {"result": User.objects.all()}, 200
api.add_resource(UserResource, '/')
if __name__ == '__main__':
app.run(debug=myapp_settings['DEBUG'])
There's just a little trick to get your API to convert django models to Json:
from flask.json import JSONEncoder as FlaskJSONEncoder
from django.db.models import Model
from django.db.models.base import ModelBase
from django.db.models.query import QuerySet, ValuesQuerySet
from django.db.models.fields.related import ManyToManyField
from datetime import datetime
def model_to_dict(instance):
"""Same as django.forms.models.model_to_dict, but returns
everything, including non-editable fields"""
opts, data = instance._meta, {}
for f in opts.concrete_fields + opts.many_to_many:
if isinstance(f, ManyToManyField):
data[f.name] = []
if instance.pk is not None:
data[f.name] = list(f.value_from_object(instance).values_list('pk', flat=True))
else: data[f.name] = f.value_from_object(instance)
return data
class ApiJSONEncoder(FlaskJSONEncoder):
def default(self, obj):
if isinstance(obj, (Model, ModelBase)):
return model_to_dict(obj)
if isinstance(obj, (QuerySet, ValuesQuerySet)):
return [model_to_dict(m) for m in obj]
elif isinstance(obj, datetime):
return obj.isoformat("T")
return FlaskJSONEncoder.default(self, obj)