Flask-Philo-Core Views¶
Most of the applications we build with Flask-Philo-Core are simple REST APIs. You can use Flask-Philo-Core to do more complicated things but the most common thing we do is return blocks oj JSON from REST endpoints.
We keep most of our appications views in a views.py file in src/app.
They all inherit from flask_philo.views.BaseResourceView.
Here’s an example view for a GET endpoint that returns a simple JSON message:
from flask_philo_core.views import BaseView
from flask_philo_core.test import FlaskPhiloTestCase, BaseTestFactory
from flask import json
class SimpleView(BaseView):
def get(self):
return self.json_response(data={'msg': 'ok'})
class SimpleCorsView(BaseView):
def get(self):
return self.json_response(data={'msg': 'ok-cors'})
The next thing to do is create some tuple values in src/app/urls.py to specify
the url for the endpoint you want to expose:
E.g.
from app.views import SimpleView, SimpleCorsView
URLS = (
('/', SimpleView, 'home'),
('/cors-api/test-cors', SimpleCorsView, 'cors'),
)
Now, when you run the server and make a GET request to /,
the application should respond with a status of 200 and ok.
CORS support¶
We rely on the resource specific feature provided by
flask-cors to bring CORS support to Flask-Philo-Core.
You will need to define the url patterns in your configuration file:
CORS = {r"/cors-api/*": {"origins": "*"}
JSON Serializers¶
A serializer is a mechanism that we use in Flask-Philo-Core to serialize and deserialize
data in a safe way. The main principle behind serializers is that data sent by users can
not be trusted by default. To create a serializer you must inherit from
flask_philo_core.serializers.BaseSerializer and define the _shcema property
following the rules specified in jsonschema
E.g.
class TransactionSerializer(BaseSerializer):
_schema = {
'type': 'object',
'definitions': {
'vin_schema': input_schema,
'vout_schema': output_schema
},
'properties': {
'key': uuid_schema,
'key2': uuid_schema,
'txid': alphanumeric_schema,
'hash': alphanumeric_schema,
'vout':
{'type': 'array', 'items': {'$ref': '#/definitions/vout_schema'}},
'vin': {'$ref': '#/definitions/vin_schema'},
}
}
tx_data = {
'key': uuid.uuid4(),
'hash': format(randint(0, 99999), '02x'),
'txid': BaseTestFactory.create_unique_string(),
'vin': input_data,
'key2': uuid.uuid4(),
'vout': output_data
}
serializer = TransactionSerializer(data=tx_data)
print(serializer.json)