[PYTHON] Der Höhepunkt der REST + Normal Site-Konstruktion mit Flask, Eve

Eine der Varianten von Flask ist Eve, mit der sich REST-Services einfach erstellen lassen. Solange Sie das Schema entwerfen, wird die REST-API für SiteRoot bereitgestellt, aber es fühlt sich wie Django + REST Framework + eckig an, und als ich versuchte, es zu erstellen, wurde es ziemlich gut, daher werde ich es aufzeichnen.

Änderungen des REST-API-Stamms

Im Fall von Eve wird normalerweise API Root = Root festgelegt, sodass index.html beim Zugriff auf root nicht angezeigt werden kann. Deshalb,

settings.py


URL_PREFIX = 'api'

Sie können die API-Route ändern, indem Sie ein Präfix definieren.

Kolben- und Eva-Einstellungen

Es gibt separate Einstellungen für Eve und Flask. Wenn Eve nicht angegeben ist, wird settings.py im selben Verzeichnis gelesen. Wenn Sie es separat lesen möchten

app=EVE(settings='hoge.py')

Wenn Sie schreiben, werde ich das lesen. Die Einstellungen akzeptieren jedoch nur Diktat und Datei.

Abgesehen von den von Eve verwendeten Einstellungen sollte das Schreiben in settings.py nicht funktionieren ... Die Kolbeneinstellungen müssen getrennt und in appFactory angegeben werden, z. B. create_app ().

app/__init__.py


def create_app(api_settings=None, flask_config='oss_app.config', package_name=__name__, flask_conf_override=None):

    # Define the WSGI application object
    if api_settings is not None:
        app = Eve(settings=api_settings, import_name=__name__)
    else:
        app = Eve()

    # Configurations
    app.config.from_object(flask_config)
    app.config.from_object(flask_conf_override)

static path Im Fall von Eve wird 404 zurückgegeben, wenn Sie / static ohne Einstellungen drücken. Der Grund ist flaskapp.py im Paket von eve

flaskapp.py


class Eve(Flask, Events):

Unterlassung

    def __init__(self, import_name=__package__, settings='settings.py',
                 validator=Validator, data=Mongo, auth=None, redis=None,
                 url_converters=None, json_encoder=None,
                 media=GridFSMediaStorage, **kwargs):

Es ist geworden. Wenn Flask nach static_root_path sucht, sucht es nach import_name, wenn import_name vorhanden ist. Import_name = __ package__ = EVE, und das EVE-Verzeichnis in site-package wird als satticfile-Verzeichnis erkannt, und 404 wird zurückgegeben. Als Gegenmaßnahme setzen Sie beim Erstellen einer Eve-Instanz import_name = \ name.

app=Eve(import_name=__name__)

Verwenden Sie den Eve-Mongo-Motor.

Im Fall von Eve wird Pymongo im Ausgangszustand verwendet, und wenn Sie ORM verwenden möchten, können Sie die Eve-Mongo-Engine verwenden. Wahrscheinlich, weil das Update für etwa ein Jahr angehalten wurde, wird es bei Verwendung als etag-Fehler in der Startsequenz gelöscht. Etag ist aus einer Version von Eve obligatorisch geworden, aber ich denke, es hat nicht aufgeholt. Darüber Die Etag-Definition kann um die 102. und 190. Zeile von eve-mongoengine \ __ init.py hinzugefügt werden.

eve-mongoengine\__init_.py



91:
    def _parse_config(self):
        # parse app config
        config = self.app.config
        try:
            self.last_updated = config['LAST_UPDATED']
        except KeyError:
            self.last_updated = '_updated'
        try:
            self.date_created = config['DATE_CREATED']
        except KeyError:
            self.date_created = '_created'
+        try:
+            self.etag = config['ETAG']
+        except KeyError:
+            self.etag = '_etag'

    def fix_model_class(self, model_cls):

Unterlassung
192:
        date_field_cls = mongoengine.DateTimeField
+        string_field_cls = mongoengine.StringField

        # field names have to be non-prefixed
        last_updated_field_name = self.last_updated.lstrip('_')
+        date_created_field_name = self.date_created.lstrip('_')
        etag__field_name = self.etag.lstrip('_')
        new_fields = {
            # TODO: updating last_updated field every time when saved
            last_updated_field_name: date_field_cls(db_field=self.last_updated,
                                                    default=get_utc_time),
            date_created_field_name: date_field_cls(db_field=self.date_created,
                                                    default=get_utc_time),
             etag__field_name: string_field_cls(db_field=self.etag,
                                                    default=""),
        }

Recommended Posts

Der Höhepunkt der REST + Normal Site-Konstruktion mit Flask, Eve
Memorandum zum Bau einer Kolbenstelle
Führen Sie die App mit Flask + Heroku aus
Automatische Veröffentlichung einer Webdesign-Website mit Python + Selen (1) Umgebungskonstruktion
Verstehen Sie den Komfort des Django Rest Framework
Richten Sie die Größe der Farbleiste an der Matplotlib aus
Die Ordnerstruktur von Flask ist zusammengefasst
Überprüfen Sie die Existenz der Datei mit Python
Die dritte Nacht der Runde mit für
Über die Normalgleichung der linearen Regression
Die zweite Nacht der Runde mit für
Laden Sie die Datei mit PHP herunter [Im Aufbau]
Zählen Sie die Anzahl der Zeichen mit Echo