Skip to content

Python (Flask) Headless CMS. This is a simple tool for generating a database structure & an API for content management.

License

Notifications You must be signed in to change notification settings

sartim/flask-headless-cms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

190 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flask Headless CMS

Open Source Love Open Source Love contributions welcome Build Status

Overview

A tool for generating a database structure and an API for content management. Generated SQLAlchemy models and endpoints based on content types created via API.

Features

  • Support SQLAlchemy models
  • Model generator
  • Databases: PostgreSQL

Setup

On Mac

$ brew install python
$ pip3 install virtualenv

On Linux

$ pip3 install virtualenv

Installation

$ pip3 install FlaskHeadlessCms

or

$ git clone https://github.com/sartim/flask-headless-cms.git
$ cd flask-headless-cms
$ python install .

After installation close & start a new terminal session.

Start new project

$ flaskcli <new_project>

Make Migrations

$ cd <new_project>
$ python manage.py db init
$ python manage.py db migrate
$ python manage.py db upgrade

API

URL: /field/param

METHOD: POST

BODY:

{
    "content_name": "<name>",
    "fields": [{
            "column_name": "id",
            "data_type": "data_type",
            "data_size": <integer>,
            "is_primary_key": boolean,
            "is_foreign_key": boolean,
            "is_null": boolean,
            "default": null
	    },
	    ............
	],
	"methods": ["GET, "POST"]
}

Example

With no relation

{
    "content_name": "user",
    "fields": [
    	{
	    	"column_name": "id",
	    	"data_type": "INTEGER",
	    	"data_size": null,
	    	"is_primary_key": true,
	    	"is_foreign_key": false,
			"is_null": false,
			"default": null
	     },
	     {
	    	"column_name": "name",
	    	"data_type": "VARCHAR",
	    	"data_size": 255,
	    	"is_primary_key": false,
	    	"is_foreign_key": false,
	    	"is_null": false,
	    	"default": null
	     },
	     {
	         "column_name": "password",
	         "data_type": "VARCHAR",
	         "data_size": 255,
	         "is_primary_key": false,
	         "is_foreign_key": false,
	         "is_null": false,
	         "defualt": null
	     },
	     {
	         "column_name": "phone_number",
	         "data_type": "VARCHAR",
	         "data_size": 255,
	         "is_primary_key": false,
	         "is_foreign_key": false,
	         "is_null": false,
	         "default": null
	     },
	     {
	         "column_name": "is_active",
	         "data_type": "BOOLEAN",
	         "data_size": null,
	         "is_primary_key": false,
	         "is_foreign_key": false,
	         "is_null": false,
	         "default": false
	     },
	     {
	         "column_name": "confirmed_date",
	         "data_type": "TIMESTAMP",
	         "data_size": null,
	         "is_primary_key": false,
	         "is_foreign_key": false,
	         "is_null": false,
	         "default": "CURRENT_TIMESTAMP",
	         "on_update_default": null
	     }
	],
	"methods": ["GET", "POST", "PUT", "DELETE"]
}

With relation

{
    "content_name": "user_role",
    "fields": [
    	{
	    	"column_name": "user_id",
	    	"data_type": "INTEGER",
	    	"is_primary_key": true,
	    	"is_foreign_key": true,
	    	"content_name_relation": "user"
	     },
	     {
	    	"column_name": "role_id",
	    	"data_type": "INTEGER",
	    	"is_primary_key": true,
	    	"is_foreign_key": true,
	    	"content_name_relation": "role"
	     },
	],
	"methods": ["GET", "POST", "PUT", "DELETE"]
}

Overriding house keeping fields

{
    "content_name": "user",
    "fields": [
        .......
        {
             "column_name": "created_date",
             "data_type": "TIMESTAMP",
             "data_size": null,
             "is_primary_key": false,
             "is_foreign_key": false,
             "is_null": false,
             "default": "CURRENT_TIMESTAMP",
             "on_update_default": null
         },
         {
             "column_name": "updated_date",
             "data_type": "TIMESTAMP",
             "data_size": null,
             "is_primary_key": false,
             "is_foreign_key": false,
             "is_null": false,
             "default": "CURRENT_TIMESTAMP",
             "on_update_default": "CURRENT_TIMESTAMP"
         }
         .......
    ]
}
Allowed Fields Type Example
column_name String first_name, name, user_id
data_type String VARCHAR, TIMESTAMP, INTEGER, BOOLEAN, DECIMAL
data_size Integer 255
is_primary_key Boolean true, false
is_foreign_key Boolean true, false
is_null Boolean true, false
default String false, CURRENT_TIMESTAMP
on_update_default String CURRENT_TIMESTAMP
content_name_relation String <content_name>

About

Python (Flask) Headless CMS. This is a simple tool for generating a database structure & an API for content management.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •