Pages - Menu

Pages - Menu

Pages

2022年4月24日日曜日

valval - V言語(vlang)で最速のWebフレームワーク

https://www.wenyanet.com/opensource/ja/602e6e496b745e6d3560c91d.html

(The fastest web framework in V language (vlang))

Created at: 2019-12-09 16:09:07
Language: V
License: MIT

バルバル

Valvalは、V言語で最速のWebフレームワークです。

この手段は、次のことができます開発のウェブサイトを迅速かつ実行し、それをさらに速く

簡単なデモ:
import valval

fn hello(req valval.Request) valval.Response {
	return valval.response_ok('hello world')
}

fn main() {
	mut app := valval.new_app(true)
	app.route('/', hello)
	valval.runserver(app, 8012)
}

インストール

Gitの使用

$ git clone https://github.com/taojy123/valval
$ mkdir -p ~/.vmodules
$ ln -s $(pwd)/valval ~/.vmodules/valval 

VPMの使用

Watchmen123456はモジュールをvpmに登録しました。PATH変数にvがある場合は、単に以下を使用してください。

$ v install watchmen123456.valval

:vpmを使用する場合。インポートを次のように変更する必要があります。

import watchmen123456.valval

クイックスタート

最小限のアプリケーション

最小限のValvalアプリケーションは次のようになります。

// demo.v

module main

import valval

fn hello(req valval.Request) valval.Response {
	return valval.response_ok('hello world')
}

fn main() {
	mut app := valval.new_app(true)
	app.route('/', hello)
	valval.runserver(app, 8012)
}

サーバーを実行する

$ v run demo.v

その後、あなた

http://127.0.0.1:8012/
はウェブサイトを見るために訪問することができます
$ curl http://127.0.0.1:8012/
hello world

デバッグモード

呼び出すときにデバッグモードを使用するかどうかを決定できます

valval.new_app()
mut app := valval.new_app(true)  // debug mode
mut app := valval.new_app(false) // production mode

デバッグモードでは、アプリの実行中に詳細情報が出力されます

サービスポート

を呼び出すときにサービスポート番号を決定できます

valval.runserver()
valval.runserver(app, 8012)  // listening 8012 port
valval.runserver(app, 80)    // listening 80 port

valvalサーバーは

0.0.0.0
アドレスをバインドするので、
127.0.0.1:Port
またはでWebサイトにアクセスできます。
ServerIp:Port

ルーティング

App.route()
関数を使用してハンドラー関数をバンドし、パスを要求します

ハンドラー関数には、型のパラメーターが

Request
あり、
Response
mut app := valval.new_app(true)

app.route('/', hello)   		         // http://127.0.0.1

app.route('/users', function1)        // http://127.0.0.1/users
app.route('/user/info', function2)    // http://127.0.0.1/user/info

app.route('POST:/book', function3)  // http://127.0.0.1/book by POST
app.route('DELETE:/book', function4)    // http://127.0.0.1/book by DELETE
app.route('/book', function5)         // http://127.0.0.1/book by other methods

app.route('*', function6)   		     // all remain

valval.runserver(app, 80)

リクエストデータへのアクセス

現在、解析できるのは次のデータのみです。

  • GETリクエストによるパラメータのクエリ。沿って
    valval.Request.query[xxx]
  • x-www-form-urlencoded
    POST / PUT / PATCHリクエストによるパラメータ。沿って
    valval.Request.form[xxx]
fn hello(req valval.Request) valval.Response {
	mut name = request.query['name']
	if name == '' {
		name = 'world'
	}
	return valval.response_ok('hello $name')
}

fn post_hello(req valval.Request) valval.Response {
	mut name = request.form['name']
	if name == '' {
		name = 'world'
	}
	return valval.response_ok('hello $name')
}

app.route('GET:/hello', hello)
app.route('POST:/hello', post_hello)
valval.Request.get()
から
query
またはからデータを取得するための迅速な方法を提供します
form
fn hello(req valval.Request) valval.Response {
	name = request.get('name', 'world')  // default: 'world'
	return valval.response_ok('hello $name')
}

app.route('/hello', hello)

今後、さらに多くの種類のリクエストデータがサポートされる予定です。

  • URLのパラメータ
  • multipart/form-data
    POSTリクエストによる
  • application/json
    POSTリクエストによる
  • アップロードされたファイル

静的ファイル

valval.App.serve_static
ローカルファイルを提供するために使用
mut app := valval.new_app(true)

app.serve_static('/static/', './relative/path/to/static/')  
// visit http://127.0.0.1/static/xxx.js ...

app.serve_static('/static2/', '/absolute/path/to/static2/') 
// visit http://127.0.0.1/static2/yyy.css ...

valval.runserver(app, 80)

レンダリングテンプレート

Valvalは、まったく新しいアイデアを使用してテンプレート関数を実装しました。Vueのシステムに触発されました。

次の利点があります。

  • Vue
    以前に使用したことがある場合は、テンプレートの使用方法を学ぶのに時間を費やす必要はありません。
  • 使ったことがない
    Vue
    方でも、とても簡単なので早く習得できます。
  • それは、次のような、いくつかの一般的に使用されるUIフレームワークを統合することができます:
    element
    mint
    vant
    antd
    bootstrap
    ...
  • 組み込みのテンプレートの開発に時間を費やす必要はありません 😁

テンプレートの例:

server.v
import valval
import json

struct User {
	name string
	age int
	sex bool
}

fn users(req valval.Request) valval.Response {

	// create a view by template file (`test6.html` can be a relative or absolute path)
	// use `element` (https://github.com/ElemeFE/element) as ui framework
	mut view := valval.new_view(req, 'users.html', 'element') or {
		return valval.response_bad(err)
	}

	users := [
		User{'Lucy', 13, false},
		User{'Lily', 13, false},
		User{'Jim', 12, true},
	]
	msg := 'This is a page of three user'

	// use view.set to bind data for rendering template
	// the second parameter must be a json string
	view.set('users', json.encode(users))
	view.set('msg', json.encode(msg))

	return valval.response_view(view)
}
users.html
<html>
    <head>
        <title>Users Page</title>
    </head>
    <body>
        <!-- Content in body can use template syntax -->
        <h3>{{msg}}</h3>
        <p v-for="u in users">
            <span>{{u.name}}</span> ,
            <span>{{u.age}}</span> ,
            <el-tag v-if="u.sex">Male</el-tag>
            <el-tag v-else>Female</el-tag>
        </p>
    </body>
</html>

リダイレクト

valval.response_redirect()
リダイレクト応答を生成するために使用します
fn test1(req valval.Request) valval.Response {
	name = req.get('name', '')
	if name == '' {
		return valval.response_redirect('/not_found')
	}
	return valval.response_ok('hello $name')
}

反応

応答に加えて(上記

response_ok
response_view
response_redirect

Valvalは、次のような他の応答タイプも提供します。

struct User {
	name string
	age int
	sex bool
}

fn text(req valval.Request) valval.Response {
	return valval.response_text('this is plain text response')
}

fn json(req valval.Request) valval.Response {
	user = User{'Tom', 12, true}
	return valval.response_json(user)
	// -> {"name": "Tom", "age": 12, "sex": true}
}

fn json_str(req valval.Request) valval.Response {
	user = User{'Tom', 12, true}
	user_str = json.encode(user)
	return valval.response_json_str(user_str)
	// -> {"name": "Tom", "age": 12, "sex": true}
}

fn file(req valval.Request) valval.Response {
	return valval.response_file('path/to/local/file')
}

fn bad(req valval.Request) valval.Response {
	return valval.response_bad('Parameter error!')
	// response with statu code 400
}

完全な例

V言語をインストールする

Valvalフレームワークは現在

V language
バージョンをサポートしています
0.1.24

Vをインストールする方法は次のとおりです。

1.ビルド済みのVパッケージをダウンロードします

公式ホームページhttps://vlang.io/にアクセスしてダウンロードしてください

2.dockerでVを実行します[推奨]

docker run -it -p 8012:8012 --name vlang taojy123/vlang bash

OpenSSLが含まれています

3.ソースからVをインストールします

$ git clone https://github.com/vlang/v
$ cd v
$ make

OpenSSLをインストールします

macOS:
$ brew install openssl

Debian/Ubuntu:
$ sudo apt install libssl-dev openssl ca-certificates

Windows(Win10検証済み):ソースは以下からダウンロードできます:

それがあなたが好きなら、あなたはグラフィックインストーラーを見つけることができます。

0 件のコメント:

コメントを投稿