Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Quokka project goals

Bruno Rocha edited this page · 4 revisions

Quokka CMS Project

Definition:

Quokka is a content management system powered by Python, Flask and MongoDB. Using a selection of Flask extensions Quokka also provides a full-stack platform for generic applications.

Quokka is develop for:

  • Blogs
  • Social websites
  • Content portals and magazines
  • Intra-net
  • Simple e-commerce
  • Polls, Giveaways, tutorials, courses

In summary, use Quokka for anything using: author -> content <- interactions

Objects

  • Channels

    • Channels are like directories, you can create many channels and sub-channels and include documents in there, channels defines urls /channel/sub-channel/content.html by default in Quokka content is always defined by the .html extension, but it can be changed.
    • Channels can have alias, example: /entertainment/content.html is a content endpoint, if you create aliases in entertainment channel ['diversao', 'diversion', 'fun'] so the same content will be accessible with any alias as the channel unless it do not conflict with another channel real channel name. /fun/content.html might work and it can be also useful for internationalization. A channel home page will always have the canonical url pointing to the real channel.
    • channels can be bypassed to render a specific Content, in example: You create the home channel and set it to render a flatpage instead of a channel type content list.
    • Channels have a type, a type in channel can be anything, by default Quokka provides blog, portal, list, grid. You can create your own type by defining its properties.

      • A channel type is (example blog):

        • title: Blog
        • template_suffix: blog
        • inherit: True
        • media files: file_paths

        Basically you are defining the look and feel for that channel.

      • Quokka provides:

        • Blog: a template with blog features, stream of posts, tag cloud, sidebars, widgets.
        • list: a template with a simple list of publications, sorting and search
        • grid: this is a Pinterest like template
        • portal: it mixes a featured slider with some boxes for grid and listing of posts. > Note: In any template type you use blocks and widgets to rearrange the content.
    • Organization of content

      • You can copy/paste content between channels
      • You can program the publication by setting publish data range
      • you can group content on to bundles/content blocks
    • Settings
      • You can choose some properties for a channel and apply for every sub-channel created.
      • include_in_rss: choose if publication will be available in feed
      • rss filters: filter contents which will be available for rss
      • api enabled: choose if that channel will provide its contents api via json or xml
      • api filters: choose filters to be applied in public api > note: This configs are for general public get api, for REST api take a look for REST API topic.
    • Content blocks
      • Every channel has its own namespace for content blocks, but content blocks are available to be use in any channel
      • a content block is a content aggregator and you can have blocks inside blocks.
      • blocks has a relation with a Content + specific fallback attributes like start and end_date, image, title, summary and headline for each content.
      • Blocks have some attributes:
        • order, title, unique_identifier, default_template, block_region
        • custom values to store arbitrary information
      • a block is not stale for a single channel or page, it can be used anywhere so it is generic, the only thing that identify a block is its identifier. But being a Content, every block needs to be inserted in a main channel to be accessible as a bundle, by default Quokka defines a content channel and every block can be listed in /content/blogname. You can change the content with another name in settings.py
      • inside channels you can insert any block and choose its properties, in template will be defined where the block should be included.
      • block_region is a placeholder, defined in the template where blocks will be inserted following its order definition per channel
      • the template will always be the default_template unless specified per_channel, order can also be defined per_channel
  • Content

    • A Content is a generic thing that can be inserted in a channel, think this is like a file it has some generic attributes defining its title, slug, access url, ownership, control dates, channeling.
    • Everything in Quokka, except channels, even the Content Block is a Content and every content has its own channel and urls.
    • A content have a main author but can have many contributors co-authors
    • a content have per-user, per-group access control
    • a content have version control revisions
    • a content have translations
    • a content can have related contents
    • a content is within a main channel, but can also be related to another channels
    • a content can have categories (per channel category groups)
    • a content can have tags (for search)
    • a content having an public endpoint has SEO configuration
  • Images and media files
    • a media file is a pure file in filesystem or gridfs but it is also a content
    • the image content has its metadata, endpoint and other content configuration
    • it makes easy to create bundles and content blocks
  • Content Blocks

    • A Content block is a content (the same table and base class)
    • the system views it as an aggregator and ir can be used to create bundles of content
    • a bundle is a collection of any content and it is used for some purposes:
      • Create sliders of content
      • Create image and media albums
      • Create a content block or a card to build widgets for home page
      • Create only a collection with its own link
    • properties
      • all the content properties as title and slug
      • customized templates
      • purpose (album, list, slider, block)
      • access control
      • date available and date end
      • dynamic queryset to load content automatically
  • User and User Profiles

    • User
      • User is an object for authentication and access control
    • User Profile
      • It is a Content but related with a single user or with a group of users
      • It can be used as user bio page, this page can behave like a channel grouping user blocks
      • It can be used to create an group page where content from many users are selected, in this case users can include content inside its own group profile or user profile.

Development

  • Modules

    • Modules are based in Flask blueprints and follow a predefined pattern to create models, views, resources, commands and tasks.
  • Module management

    • once developed the module should be included in /modules/ folder or be in the python path if installed with pip
    • in Quokka admin users can see a list of available modules and choose properties for each one.
    • Every module defines its own admin
    • if needed modules can define views and url_rules
    • modules can insert management commands
    • modules has to provide a configuration view and config dataset to be used in quokka modules admin
    • users can enable/disable modules
    • modules needs to have basic tests
    • Quokka perform a test and version control in a different branch every time a module is enabled/disabled
    • Quokka uses Mongo as db engine, but modules connect to different databases (useful for erp, crm and ecommerce apps also reports)
Something went wrong with that request. Please try again.