2019-07-29 20:46:26 +03:00
|
|
|
This is pre-alpha software.
|
|
|
|
|
2019-12-10 00:16:39 +03:00
|
|
|
## Features
|
|
|
|
- Very fast: performance of C on the web.
|
|
|
|
- Small binary: hello world website is <100 KB.
|
|
|
|
- Easy to deploy: just one binary file that also includes all templates.
|
|
|
|
No need to install any dependencies.
|
|
|
|
- Templates are precompiled, all errors are visible at compilation time,
|
|
|
|
not at runtime.
|
|
|
|
|
2019-07-29 20:46:26 +03:00
|
|
|
Lots of things are broken and not implemented yet in V and vweb.
|
|
|
|
|
2019-12-10 00:16:39 +03:00
|
|
|
There's no documentation yet, have a look at a simple example:
|
2019-07-29 19:50:25 +03:00
|
|
|
|
2019-12-10 00:16:39 +03:00
|
|
|
https://github.com/vlang/v/tree/master/examples/vweb/vweb_example.v
|
2019-07-30 22:15:17 +03:00
|
|
|
|
2019-12-10 00:16:39 +03:00
|
|
|
There's also the V forum: https://github.com/vlang/vorum
|
2019-07-30 22:15:17 +03:00
|
|
|
|
|
|
|
`vorum.v` contains all GET and POST actions.
|
2019-07-29 19:50:25 +03:00
|
|
|
|
2019-07-29 20:46:26 +03:00
|
|
|
```Go
|
2019-07-29 19:50:25 +03:00
|
|
|
pub fn (app mut App) index() {
|
|
|
|
posts := app.find_all_posts()
|
|
|
|
$vweb.html()
|
|
|
|
}
|
|
|
|
|
2019-12-10 00:16:39 +03:00
|
|
|
// TODO ['/post/:id/:title']
|
|
|
|
// TODO `fn (app App) post(id int)`
|
2019-07-29 19:50:25 +03:00
|
|
|
pub fn (app App) post() {
|
2019-12-10 00:16:39 +03:00
|
|
|
id := app.get_post_id()
|
2019-07-29 19:50:25 +03:00
|
|
|
post := app.retrieve_post(id) or {
|
2019-12-10 00:16:39 +03:00
|
|
|
app.vweb.redirect('/')
|
|
|
|
return
|
2019-07-29 19:50:25 +03:00
|
|
|
}
|
|
|
|
comments := app.find_comments(id)
|
2019-12-10 00:16:39 +03:00
|
|
|
show_form := true
|
2019-07-29 19:50:25 +03:00
|
|
|
$vweb.html()
|
|
|
|
}
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
`index.html` is an example of the V template language:
|
|
|
|
|
2019-07-29 20:46:26 +03:00
|
|
|
```html
|
2019-12-10 00:16:39 +03:00
|
|
|
@for post in posts
|
2019-07-29 19:50:25 +03:00
|
|
|
<div class=post>
|
2019-12-10 00:16:39 +03:00
|
|
|
<a class=topic href="@post.url">@post.title</a>
|
|
|
|
<img class=comment-img>
|
|
|
|
<span class=nr-comments>@post.nr_comments</span>
|
2019-07-29 19:50:25 +03:00
|
|
|
<span class=time>@post.time</span>
|
|
|
|
</div>
|
|
|
|
@end
|
|
|
|
```
|
|
|
|
|
|
|
|
`$vweb.html()` compiles an HTML template into V during compilation, and embeds the resulting code in current action.
|
|
|
|
|
2019-09-14 23:54:14 +03:00
|
|
|
That means that the template automatically has access to that action's entire environment.
|
2019-07-29 20:46:26 +03:00
|
|
|
|
|
|
|
|
|
|
|
### Deploying vweb apps
|
|
|
|
|
|
|
|
Everything, including HTML templates, is in one binary file. That's all you need to deploy.
|
|
|
|
|