UNIcodeX / prologue

Full-Stack Web Framework written in Nim.

Home Page:https://planety.github.io/prologue

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status Build Status Build Status

License: Apache-2.0 Version buy me a coffee Discord

Prologue

What's past is prologue.

Purpose

Prologue is a Full-Stack Web Framework which is ideal for building elegant and high performance web services.

Reduce magic. Reduce surprise.

Documentation

Documentation Index Page
Core API Index Page Search Page
Full API Index Page Search Page

Feature

  • Core

    • Base on httpx and asynchttpserver
    • Configure and Settings
    • Context
    • Param and Query Data
    • Form Data
    • Static Files
    • Middleware
    • Simple Route
    • Regex Route
    • DSL Route
    • CORS Response
    • Signing
    • Cookie
    • Session
    • Cache
    • Startup and Shutdown Events
    • URL Building
    • Data Validation
    • Exception Handler
    • Cross-Site Request Forgery
    • Cross-Site Scripting (XSS) Protection(Karax quote string automatically)
    • Clickjacking Protection
    • Authentication
    • I18n
    • Command line tools
    • Mocking test
  • Plugin

Installation

First you should install Nim language which is an elegant and high performance language. Follow the instructions and set environment variables correctly.

Then you can use nimble command to install prologue.

nimble install prologue

Usage

Hello World

# app.nim
import prologue


proc hello*(ctx: Context) {.async.} =
  resp "<h1>Hello, Prologue!</h1>"


let settings = newSettings()
var app = newApp(settings = settings)
app.addRoute("/", hello)
app.run()

Run app.nim. Now the server is running at localhost:8080.

Another example

# app.nim
import prologue
import prologue/middlewares


# Async Function
proc home*(ctx: Context) {.async.} =
  resp "<h1>Home</h1>"

proc helloName*(ctx: Context) {.async.} =
  resp "<h1>Hello, " & ctx.getPathParams("name", "Prologue") & "</h1>"

proc doRedirect*(ctx: Context) {.async.} =
  resp redirect("/hello")

proc login*(ctx: Context) {.async.} =
  resp loginPage()

proc do_login*(ctx: Context) {.async.} =
  resp redirect("/hello/Nim")


let settings = newSettings(appName = "StarLight")
var app = newApp(settings = settings, middlewares = @[debugRequestMiddleware()])
app.addRoute("/", home, @[HttpGet, HttpPost])
app.addRoute("/home", home, HttpGet)
app.addRoute("/redirect", doRedirect, HttpGet)
app.addRoute("/login", login, HttpGet)
app.addRoute("/login", do_login, HttpPost, middlewares = @[debugRequestMiddleware()])
app.addRoute("/hello/{name}", helloName, HttpGet)
app.run()

Run app.nim. Now the server is running at localhost:8080.

More examples

Extensions

If you need more extensions, you can refer to awesome prologue and awesome nim.

Donate

Thanks for supporting me!

buy me a coffee

patreon

Stars

Stargazers over time

About

Full-Stack Web Framework written in Nim.

https://planety.github.io/prologue

License:Apache License 2.0


Languages

Language:Nim 99.7%Language:HTML 0.3%