tea
1.0.0
데이터 모델링 및 검증 기능을 갖춘 vweb의 포크입니다.
이것은 개념 증명입니다.
mkdir modules
cd modules
git clone https://github.com/intangere/tea.git
아마도 Vweb의 일반적인 사용법이 모두 적용될 것입니다.
이는 경로 서명을 변경할 수 있을 만큼 충분히 노출되는 Vweb 위에 있는 얇은 래퍼일 뿐입니다.
example.v에는 많은 예제가 있습니다.
간단한 전체 예는 다음과 같습니다.
사용자 모델을 사용하는 /login
경로를 만들어 보겠습니다.
먼저 차를 가져오고 다음과 같이 앱 변수를 선언합니다.
import tea
struct App {
tea . Context
pub mut:
validators tea . Validators < App >
}
user
모델을 정의하십시오.
struct User {
username string
password string
}
user
모델이 유효한지 확인하는 함수를 정의합니다.
fn ( user User ) is_valid () bool {
username := user . username . strip_margin ()
password := user . password . strip_margin ()
return username . len > 3 &&
password . len > 8
}
/login
경로를 정의하세요.
['/ login '; post ]
fn ( mut app App ) login ( user User ) tea. Result {
// posted user parameters will be available in user after being validated
println ('U sername : ' + user . username + ' Password : ' + user . password )
app . json ('{" status ":" testing "}')
}
주요 기능을 정의하십시오.
fn main () {
mut app := App {}
}
이제 해당 기본 기능에서 user
데이터 유효성 검사기를 만들 수 있습니다.
(이것을 명명된 함수로 정의할 수도 있습니다)
login_validator := fn ( mut app App ) {
model := tea . decode_model < User > ( app . req . data )
if ! model . is_valid () {
app. validation_error ('u sername or password too short ')
return
}
app . login ( model )
}
데이터 유효성 검사기는 일종의 데이터(이 경우 요청 json 본문)의 압축을 풀고 유효성을 검사한 다음 결과에 따라 유효성 검사 오류를 반환하거나 유효성이 검사된 모델을 경로에 전달해야 합니다.
이제 앱은 유효성 검사기와 이를 실행할 경로를 인식해야 합니다. 따라서 유효성 검사기를 선언한 후 이를 app.validators
에 추가해야 합니다.
app . validators . validators ['/ login '] = login_validator
그런 다음 Vweb에서와 마찬가지로 앱을 실행하세요.
tea . run ( & app , 8080 )
/user/:user_id
와 같은 URL 매개변수를 다른 매개변수와 결합하는 경우 URL 매개변수 user_id
다른 매개변수 뒤에 와야 합니다. 즉 // this will not compile (with or without a validator defined. However it does require one)
['/ user / : user_id ']
fn ( mut app App ) user ( user_id string , user User ) {
}
// this will compile with or without a validator
['/ user / : user_id ']
fn ( mut app App ) user ( user_id string ) {
}
// this will compile with a validator
['/ user / : user_id ']
fn ( mut app App ) user ( user_id int ) {
}
// this is how it has to be defined and will compile (requires a validator defined for /user/:user_id)
['/ user / : user_id ']
fn ( mut app App ) user ( user User , user_id string ) {
}
tea.decode_model<T>(string)
은 json 문자열을 입력으로 받아 구조체로 디코딩합니다.app.url_params
map[string]string
으로 적용 가능한 경우 URL 경로 매개변수를 노출합니다.:user_id
를 매개변수로 사용하지 않지만 여전히 액세스할 수 있는 검증된 경로를 가질 수 있습니다.tea.from_map<T>(map[string]string)
app.query를 가져와 문자열 전용 필드가 있는 구조체로 변환하는 데 사용할 수 있습니다.V에서 컴파일 타임 반영이 더 완벽해질 때마다 대부분의 내부를 숨기는 다음과 같은 작업이 가능해야 합니다.
import tea
struct App {
tea . Context
pub mut:
validators tea . Validators < App >
}
['/ login '; post ]
fn ( mut app App ) login ( user User ) tea. Result {
// posted user parameters will be available in user after being validated
println ('U sername : ' + user . username + ' Password : ' + user . password )
app . json ('{" status ":" testing "}')
}
['/ login '; validator ]
fn ( mut app App ) login_validator () User {
model := tea . decode_model < User > ( app . req . data )
if ! model . is_valid () {
app. validation_error ('u sername or password too short ')
return
}
return model
}
fn main () {
mut app := App {}
tea . run ( & app , 8080 )
}