Yesod(Web 프레임워크)
Yesod (web framework)![]() |
![]() | |
원저작자 | 마이클 스노이먼 |
---|---|
개발자 | 마이클 스노이먼 외 |
초기 릴리즈 | 2010 |
안정된 릴리스 | 1.6.1.1[1] / 2021년 4월 15일; 전 ( ) |
저장소 | |
기입처 | 하스켈 |
운영 체제 | 크로스 플랫폼 |
이용가능기간: | 하스켈 |
유형 | 웹 프레임워크 |
면허증. | MIT 라이선스 |
웹 사이트 | www |
Yesod (IPA: [je'sod];히브리어: Haskell 기반의 자유 오픈 소스 웹 프레임워크입니다.Haskell 기반의 REST 모델 기반(URL은 리소스를 식별하고 HTTP 메서드는 전환을 식별합니다), Michael Snoyman 등이 개발한 고성능 웹 애플리케이션을 생산적으로 개발합니다.
Yesod는 템플릿, 리스트된 엔티티의 인스턴스 생성 및 동적 콘텐츠 프로세스 함수를 기반으로 합니다.템플릿 Haskell은 QuasiQuiQuates라고 불리는 eDSL 콘텐츠템플릿을 호스트합니다.여기서 메타프로그래밍 [2]명령에 의해 콘텐츠가 코드식으로 변환됩니다.
또한 코드 표현 보간을 허용하는 웹과 유사한 언어 스니펫 템플릿도 있으므로 컴파일 [3]시 완전한 유형 검사를 수행할 수 있습니다.
Yesod는 기능을 다른 라이브러리로 나누기 때문에 원하는 {database, html rendering, forms 등} 기능 라이브러리를 선택할 수 있습니다.
MVC 아키텍처
컨트롤러
서버 인터페이스
Yesod는 서버 프로토콜 CGI,[5] FastCGI,[6] SCGI,[7] [8]Warp, Launch(기본 브라우저의 로컬 URL로 열기, 창이 [9]닫힐 때 서버 닫기)용 핸들러를 사용하여 서버로부터 서블릿(WAI 약어)[4]을 분리하기 위해 WAI를 사용합니다.
기초 유형
참조.[10]Yesod에는 컨트롤러 클래스를 인스턴스화하는 데이터 유형이 필요합니다.이것을 파운데이션 타입이라고 부릅니다.아래 예에서는 "MyApp"이라는 이름이 지정되었습니다.
REST 모델은 웹 경로를 사용하여 웹 리소스를 식별합니다.여기서 REST 리소스는 R 서픽스가 붙은 이름(예를 들어 "HomeR")으로 지정되며 parseRoutes 사이트 맵 설명 템플릿에 나열됩니다.이 리스트에서 루트명과 디스패치핸들러명이 취득됩니다.
Yesod는 Template Haskell 메타프로그래밍을 사용하여 컴파일 시 템플릿에서 코드를 생성하여 템플릿의 이름과 모든 유형 검사(웹 리소스 이름 및 핸들러 이름 등)가 일치하는지 확인합니다.
mkYesod 콜을 삽입하면 Template Haskell 프리미티브가 호출되어 루트 타입 멤버에 대응하는 코드가[11] 생성됩니다.또, HomeR 를 「get HomeR」라고 하는 이름의 루틴에 라우팅 하기 위한 GET 콜을 디스패치 하는 디스패치컨트롤러 클래스의 인스턴스는, 이름과 일치하는 기존의 핸들러를 상정하고 있습니다.
안녕 세계
CGI 서버 인터페이스에 근거한 「Hello world」의 예(실제 핸들러 타입은 변경되어 있습니다만, 원칙은 그대로입니다).
{- 파일 wai-cgi-hello.hs -} {-# LOUGE 패키지 Imports, Type Families, Qui Qui Quotes, MultiParam Type Classes, TemplateHaskell, Overloaded 수입품 '와이' 네트워크.와이 수입품 '웨이브' 네트워크.와, 핸들러CGI (달려.) -- 호환성이 있는 WAI 핸들러 수입품 "예스" 예소드 수입품 "yesod-core" Yesod. 핸들러 (getRequest(요청)) 수입품 "텍스트" Data.텍스트 (본문) 수입품 「어느 쪽인가? Text. 카시우스 (색.(..), 컬러 블랙) -- Foundation 타입 데이터. 마이앱 = 마이앱 -- sitemap 템플릿, 경로, 리소스 이름 및 허용된 메서드를 나열합니다. -- 'mkYesod'는 기초유형명을 param으로 합니다.디스패치 기능의 이름 구성용 mkYesod '마이앱' [parse Routes(파스 루트) / 홈R 얻다 ] 사례 예소드 마이앱 -- 들여쓰기 구조화된 CSS 템플릿 myStyle :: [본문] → CssUrl url myStyle param Style = [카시우스 .박스 경계: 1px 단단한 #{박스 컬러} ] 어디에 박스 컬러 = 사례. param Style 의 ["고음성"] → 컬러 블랙 _ → 색. 0 0 255 -- 들여쓰기 구조 HTML 템플리트 myHtml :: [(본문, 본문)] → HtmlUrl url myHtml 파라미터 = [작은 마을
<>!('$의 접두사)콘텐츠나 시퀀스 트리 구조를 설명하는 시작 태그 또는 명령 하 요면이나 그것이 부족,>>입니다.'.'또는'#의 접두사 태그에 css 소개할 스타일의"클래스"또는"이드"특성 값,>>!--보간의haskell 표현에 따르는"shakespeare는 템플릿"){expr}구문,><>p>을 말한다.헬로우 월드!<span .box > # { length params } 파라미터가 있습니다.$ if null params <p > Noth to list $else <ul > $forall param < - params < - li > # { fst param : # { snd param}
홈 R을 취득하다 :: 핸들러 RepHtml 홈 R을 취득하다 = 하다 요구하다 <-> getRequest(요청) 허락하다 파라미터 = 요구 Get Params 요구하다 param Style <-> lookupGetParams "스타일" default Layout(기본 레이아웃) $ 하다 -- 위젯 모나드에 위젯 추가("Writer" 모나드) setTitle "예스 예제" Widget 헤드 $ myStyle param Style Widget Body로 이동 $ myHtml 파라미터 -- 다양한 WAI 핸들러에 대해 "실행" 함수 베리안트가 있습니다. 주된 = 토와이앱 마이앱 >>= 달려.
# cgi test export REMOTE_ADDR=102.0.1 export REMOTE_METOD=GET export PATH_INFO=/export QUERY_STRING='p1 export;p2=def;style=high-contrastrast' ./wi-cgi-hello
리소스, 루트 및 HTTP 메서드 핸들러
참조.[12][13]Yesod는 웹 문서에 대한 액세스의 REPresentational State Transfer 모델을 따르며 문서 및 디렉토리를 Route Constructor(예를 들어 HomeR)의 리소스로 식별합니다.
- 루트 테이블
- parseRoutes 템플릿에는 받아들일 루트 조각, 리소스 이름 및 디스패치 방식을 지정하는 리소스가 나열됩니다.
단일 세그먼트 캡처의 경우 접두사 '#'을, 다중 세그먼트 캡처의 경우 접두사 '*'를 지정하고 매개 변수 유형을 지정할 수 있습니다.
-- MyApp 기반 유형 지정 mkYesod '마이앱' [parse Routes(파스 루트) / 홈R -- http 메서드는 기술되어 있지 않습니다.모든 메서드가 허용됩니다. /블로그 블로그 R 얻다 포스트. -- '#' 프리픽스는 경로세그먼트를 루트핸들러 파라미터로 지정합니다. /기사/#아티클 아이디 기사 R 얻다 놓다 -- '*' 접두사는 일련의 경로 조각으로 매개 변수를 지정합니다. /분점/*텍스트 브런치 R 얻다 -- 문법을 단순화하려면 복합형은 별칭을 사용해야 합니다. 예를 들어 "[Text]"에 Texts를 입력합니다. ]
- 이전 템플릿을 적용하면 다음 루트컨스트럭터가 생성됩니다.
데이터. 경로 마이앱 = 홈R -- 템플릿에서 @{HomeR}로 참조됩니다. 블로그 R -- 템플릿: @{BlogR} 기사 R 아티클 아이디 -- 템플릿: @{ArticleR myArticleId} 브런치 R 텍스트 -- 템플릿: @{BranchR myBranchSegments}
- 지원되는 모든 HTTP 메서드에 대해 설명에 따라 메서드 이름(또는 메서드가 지정되지 않은 경우 프레픽스 'handler')을 리소스에 프리픽스함으로써 parseRoutes 템플릿에서 mkYesod에 의해 생성된 디스패치 이름과 일치하도록 핸들러 함수를 작성해야 합니다(실제 버전의 핸들러 유형은 변경되었지만 철학은 유지됩니다).
-- " / HomeR"의 경우 -- http 메서드가 지정되어 있지 않습니다. 접두사가 "handler"인 핸들러는 1개뿐입니다. 핸들러 홈r :: 하스렙스 t ⇒ 핸들러 t -- "/blog BlogR GET POST"의 경우 getBlogR :: 하스렙스 t ⇒ 핸들러 t 블로그 후 :: 하스렙스 t ⇒ 핸들러 t -- "/article/#ArticleId 아티클R GET PUT"의 경우 기사 가져오기r :: 하스렙스 t ⇒ 아티클 아이디 → 핸들러 t 문서r :: 하스렙스 t ⇒ 아티클 아이디 → 핸들러 t
데이터, 파라미터, 쿠키, 언어 및 기타 헤더 정보 요청
참조.[12]
인증 및 인가
참조.[14]인증 플러그인:OpenId, BrowserId, Email, GoogleEmail, HashDB, RpxNow.[15]
- 인증 [16]후 자동 리다이렉트에는 중요한 설정이 있습니다.
세션
참조.[17]세션 백엔드: Client[18] Session(세션을 쿠키에 저장), Server[19][20] Session(세션 데이터의 대부분을 서버에 저장)
- >> 과도한 대역폭 오버헤드를 피하기 위해 프로덕션 사이트는 개별 도메인 이름에서 스태틱콘텐츠를 제공하여 각 요구에 대한 세션쿠키 전송의 오버헤드를 회피할 수 있습니다.
세션 메시지
성공, 실패 또는 지시 메시지는 세션에 저장(setMessage)할 수 있으며 존재하는 경우 default_layout 루틴으로 표시됩니다.default_layout.hamlet
템플릿,[21] 컨설팅을 통해 클리어됩니다.
서브사이트
워크플로우, 파일 서비스 또는 사이트 파티션의 공통 URL 접두사 하위 사이트입니다.참조.[22][23]
양식 처리 및 레이아웃 생성
참조.[27]
여기서 양식 유형은 컨트롤러에서 양식 필드 사용자의 입력을 구문 분석 및 처리하고 위젯이 오류 메시지와 마크가 포함된 양식의 다음 렌더링 레이아웃을 유지하는 경우 양식 필드(FormResult, Widget) 쌍을 생성하는 데 사용되는 개체입니다.공백 또는 기본값으로 새 양식을 생성하는 데도 사용할 수 있습니다.
양식 유형은 보기에 포함될 HTML 스니펫의 함수 모양을 취하며, 보안 목적의 숨김 필드를 포함합니다.
폼 오브젝트는 필드 입력의 결합/순차 해석을 위해 필드의 Application/Monadic 구성에서 생성됩니다.
폼에는 다음 세 가지 유형이 있습니다.
- 적용 가능(표 레이아웃 포함),
- Monadic(자유 레이아웃 스타일 포함), 둘 다 Yesod에 있습니다.Form.기능 모듈,
- Yesod 입력(파싱 전용, 뷰 생성 없음)Form. 입력 모듈.
이름이 initial 형식 뒤에 이어 initial 형식으로 구성된 필드 생성기에는 fieldParse 구성 요소와 fieldView [28]구성 요소가 있습니다.
- runForm{Post Get} 함수는 양식 필드 입력에 대해 필드 파서를 실행하고 수신된 양식 필드 값을 기본값으로 하는 새 양식 위젯을 제공하는 보기에서 (FormResult, Widget) 쌍을 생성합니다.함수 접미사는 폼 제출에서 사용되는http 메서드입니다.
- generateForm{Post Get}은(는) 클라이언트의 입력을 무시하고 공백 또는 기본 양식 [29]위젯을 생성합니다.
실제 함수 파라미터와 유형은 Yesod 버전에 따라 변경되었습니다.Yesod 책과 라이브러리의 시그니처를 확인합니다.
매직은 FormResult 데이터 유형 Application 인스턴스에 있습니다.여기서 (<*>)는 다음 경우에 대한 오류 메시지를 수집합니다.FormFailure [textErrMsg]
결과값[30]
Monadic 폼은 자유로운 폼 레이아웃을 가능하게 하며 hiddenField [27]멤버를 보다 잘 취급할 수 있도록 합니다.
신청서[31] 샘플:
-- 폼 필드의 레코드 데이터. 사람인 = 사람인 {개인명 :: 본문, 퍼스널 :: 내부, 퍼스널라이킹 :: 아마도요. 본문} -- [ Form ]타입에는 보안을 위한 CSRF 토큰 숨김 필드가 포함된 HTML 스니펫에 추가 파라미터가 있습니다. 유형 형태 후보선수 마스터. x = HTML → 최빈값 후보선수 마스터. (폼 결과 x, 위젯) {- -- 검증 기능의 메시지의 경우: @param master:renderMessage에서 사용하는 yesod 인스턴스(핸들러의 getYesod에서 반환) @param languages:render Message에서 사용하는 페이지 언어 -- 옵션의 디폴트 레코드: @param mbPersonDefaults:defaults_record만 또는 공백 형식인 경우 없음 -} 퍼스널 폼 :: 마이 파운데이션유형 → [본문] → 아마도요. 사람인 → 형태 후보선수 마스터. 사람인 "Maybe" 필드의 {- "aopt" (옵션 필드 AForm 컴포넌트) "areq"(필수 fld AForm comp)는 "required" 속성을 삽입합니다. -} 퍼스널 폼 마스터. 언어들 mb Person Defaults(디폴트) = 렌더 테이블 $ 사람인 <$$BODY$$gt; areq 텍스트 필드 fld Settings Name(fldSettingsName) mbName 디폴트 <*> areq 커스텀 PersonAgeField 설정나이 mbAge 디폴트 <*> 옵션 텍스트 영역 필드 설정호감 mbLikings 디폴트 어디에 mbName 디폴트 = fmap 개인명 mb Person Defaults(디폴트) mbAge 디폴트 = fmap 퍼스널 mb Person Defaults(디폴트) mbLikings 디폴트 = fmap 퍼스널라이킹 mb Person Defaults(디폴트) -- "fieldSettingsLabel"은 초기 fieldSettings 레코드를 반환합니다. -- 최근 "FieldSettings" 레코드는 IsString을 구현하기 때문에 String 라벨에서 정의할 수 있습니다. fld Settings Name(fldSettingsName) = (필드 설정 라벨 메시지 이름) {fsatrs = [("최대 길이","20")]} 설정나이 = 필드 설정 라벨 Ms 설정호감 = (필드 설정 라벨 MsgLikings) {fsatrs = [("cols","40"),(행,"10")]} 커스텀 PersonAgeField = 확인. 입증하다나이 intField 입증하다나이 y y < > 18 = 왼쪽 $ render Message 마스터. 언어들 MsgUnderAge 그렇지않으면 = 맞다 y
보다
표시된 유형은 이전 버전에 해당하지만 철학은 남아 있습니다.
핸들러 모나드는 HasReps 클래스[32] {RepHtml, RepJson, RepXml, RepPlain, 듀얼 RepHtmlJson, 페어 또는 페어 목록 [([33][34]ContentType, Content)}을 구현하는 유형의 구성 요소로 하나 이상의 형식으로 콘텐츠를 반환합니다. Json:[35][36][37]
HasReps 기본 구현 chooseRep은 클라이언트 수락 [32]헤더의 우선 콘텐츠 유형 목록에 따라 반환되는 문서 표현을 선택합니다.
- 위젯은[38] 특정 명령(예: setTitle) 또는 구조(html)/동작(JavaScript)/스타일(css) 템플릿에서 만든 HTML DOM 코드 스니펫으로, 이러한 유형의 클래스가 ToWidget, ToWidgetHead 또는 ToWidgetBody 클래스를 인스턴스화합니다.
Writer 1과[40] defaultLayout 인수를 기반으로 위젯 모나드는 [39]위젯을 쉽게 조각화할 수 있습니다.
트리 구조 마크업을 위한 들여쓰기 기반 템플릿
- T.H. 옥스포드 괄호 구문으로 지정된 햄릿 준쿼터(컴파일 타임 템플릿 해스켈 코드의 [2][41]파서)
[qq ... ]
에는 들여쓰기 기반의 구조화된html 템플릿이 도입되어 있습니다.([42][43]문서 참조).
"$"는 논리문의 행을 접두사로 합니다.
자동 닫기 태그는 라인 시작 위치의 태그에 대해서만 생성됩니다.
- Whamlet Quiquoter는 위젯 식을 반환합니다.([hamlet .. ] 앞에 위젯에 저장합니다).
태그에 ToWidget는 경우에는 촌락달러 doctype 5<>html>,>!--줄의 시작 부분에 태그 자동으로 문을 닫을 것이다-->>입니다.'.'또는'#의 접두사class/id 이름, 아 라 전투 근무 지원-->>!--특성에":boolVar:"접두사들을 조건부로 생성되죠>,>!--haskell 표현을 보간``shak을 따르는을 소개합니다.espearean templates" 이름이 붙은 섹션에 소개된 구문 --> <head> <title> #{pageTitle} - My Site <link rel= stylesheet href=@{Stylesheet_route} <body> ^{headerTemplate} <섹션 #mySectionId> <p> <span .titleClass> _ { MsgArticleListTitle } </span > $if 늘 기사 <p:isRed:style="color:red">_{MsgSorryNoArticles} $s ul articles articles <-l> $l> $cl> 모든 아티클 <li> article 。제목 아트} <footer> ^{footer템플릿} ]
템플릿 보간 - 셰익스피어 템플릿
참조.[42]이것들은 다른 문자 프레픽스를 가진 중괄호 내의 코드 표현의 일반적인 치환 패턴을 따르는 콘텐츠뷰 템플릿입니다
- 템플릿 표현식
^{...}
- 는 같은 유형의 다른 템플릿을 참조하며 다음과 같이 지정된 파라미터를 사용합니다.
^{template params}
, - 표현을 라우팅하다
@{...}
- safe(예: url)로 지정
@{HomeR}
, - 메시지 표현
_{...}
- i18n 메시지 렌더링
_{MsgMessageLabel params}
- 기타 Haskell 표현
#{...}
- haskell 식 렌더링
#{haskell_expression}
어떤 타입이 컨버터블
- 햄릿 html 템플릿의 경우 식 유형은 Text 인스턴스여야 합니다.Blaze.ToMarkup[44]
- css 템플릿의 경우 식 유형은 Text 인스턴스여야 합니다.카시우스ToCss[45]
- JavaScript 템플릿의 경우 식 유형은 Text 인스턴스여야 합니다.Julius.ToJavascript [46]
- i18n 메시지가 정의되어 있는 경우(「」의 경우)
<isoLanguage>
매개 변수 보간 기능이 있는 .msg" 파일)은 식 유형이 Text 인스턴스여야 합니다.셰익스피어I18N.ToMessage [47] - 텍스트/일반 템플릿(이메일에서 사용)의 경우 표현식 유형은 텍스트 인스턴스여야 합니다.셰익스피어Text.ToText [48]
영어 이외의 텍스트를 식에 사용하려면 Unicode 인식 Text를 사용해야 합니다.String 유형에 대한 GHC의 쇼는 ASC 이외의 텍스트를 렌더링하기 때문입니다.이스케이프된 숫자 코드로서의 II 문자.
- 외부 파일 템플릿
- 컴파일 시:템플릿 내용은 컴파일 시간 스플라이스 호출을 $(expr)[49]로 사용하여 외부 파일에서 로드할 수 있습니다.
- 실행 시:HTML 햄릿템플릿을 제외한 모든 서비스 콜에서 외부 템플릿파일을 재파손하기 위한 새로고침 모드가 있습니다.doc를 [50]참조해 주세요.
기타 템플릿
- JavaScript, CoffeeScript, Roy용
- 줄리어스 퀘이쿼터: JavaScript [51]템플릿을 도입합니다.JavaScript의 변형인[52] CoffeeScript와 Roy-language도 특정 [2][51]준쿼터를 가지고 있다.
- CSS의 경우
- cassius 퀘이쿼터: 들여쓰기 기반 구조를 가진 [53]css 템플릿을 도입합니다.
- lucius quiquoter: 표준 구문과 셰익스피어 스타일의 [54]치환을 가진 css 템플릿을 도입합니다.
- TypeScript 및 JSX 템플릿
- tsc 및 tscJsX 퀘이쿼터.UNIX 파생 모델(현재 [55]Windows 없음)에만 해당됩니다.
- 템플릿: lt: laty text, st: st: strict text
- 왼쪽 여백 구분 기호 ': lbt(슬롯), sbt(슬롯)가 있는 텍스트용 템플릿
현지화 가능한 메시지
참조.[57]
Yesod 앱 메시지는 현지화가 가능합니다(i18n).메시지 폴더 내의 ISO에 따라 이름이 지정된 파일에는 <iso-language>.msg로 보관해야 합니다.
메시지 엔트리는 EBNF 패턴을 따릅니다.
-- EBNF: 식별자, {'', 매개 변수, '@', 유형, ":", 보간 텍스트 문서 존재하지 않음 PARAM.@Int64 : 존재하지 않다 기사 #{PARAM.}
- 메시지 컨스트럭터는 메시지라벨 식별자 앞에 "Msg"를 붙이는 형태로 형성됩니다.
- 메시지 데이터 유형은 기본 유형 이름에 "Message"를 추가하여 형성됩니다.
-- 암호로 myMyMsg :: MyApp Message -- 기본 유형에 "메시지"를 추가하는 데이터 유형 myMyMsg = MsgArticle 존재하지 않음 myArticleId -- 컨스트럭터 앞에 "Msg"를 붙입니다.라벨. -- 위젯 템플릿에서 _{MsgArticle 존재하지 않음 myArticleId}
스택 애플리케이션 템플릿에 실제 i18n 지원이 없습니다.를 추가해야 합니다.mkMessage "MyApp" messagesFolder isoLangDefault
"[58]Foundation.hs" 파일로 전송하여 메시지를 인스턴스화합니다.
- 네비게이션 브레드 [59]크럼생성기 함수의 브레드 크럼이 각 루트에 대해 제목과 부모 이름을 반환하는 사이트에 YesodBreadcrums 인스턴스를 제공해야 합니다.그런 다음 쿼리 함수의 브레드 크럼은 현재 경로 제목과 상위 경로(루트, 제목) 쌍을 반환합니다.
검색 엔진 XML 사이트 맵
- 검색 엔진 XML Sitemaps.[60] 여기서 sitemap은 검색 엔진이 크롤러를 지시하는 경로와 함께 제공된 SitemapUrl 레코드 목록에서 XML Sitemap을 http 응답으로 반환합니다.
웹 피드 보기
- 웹 피드 뷰(RSS/ATOM).[61]지정된 피드 구조에서 RepRss, RepAtom 또는 듀얼 RepAtomRss 콘텐츠(승인 헤더의 우선 콘텐츠 유형 목록에서 선택)를 반환하는 핸들러가 있습니다.
모델
메모리 내 변환 가능 데이터 사용(기본 데이터 유형)
예: 방문자 수.참조.[62]
데이터베이스 레이어
Postgre는 퍼스트 클래스 지원이 있습니다.SQL,[63] SQLite, MongoDB, CouchDB 및 MySQL, Redis를 실험적으로 지원합니다.
데이터베이스 레이아웃은 도면요소, 필드 및 제약조건을 [66]나열하는 템플릿에 설명되어 있습니다.
- 나열된 모든 엔티티에 대해 자동 증분 및 기본 인덱스 속성을 사용하여 정수 키 열 "id"가 생성되고 유형 별칭이 엔티티 이름에 ID를 추가합니다.
- 나열된 모든 엔티티에 대해 엔티티 생성 시 이름이 붙여진 레코드 유형은 엔티티 이름 앞에 "personName"과 같은 엔티티 이름 앞에 엔티티 이름을 붙이는 레코드 필드 이름이 구성되어 있습니다.다른 엔티티에서 참조하는 외부 키에 대해 EntityField 유형 "PersonName"도 생성됩니다.
- DB 스키마 업데이트를 위한 자동 데이터베이스 스키마 마이그레이션 메커니즘이 있습니다. 이 메커니즘에 성공하려면 기존 테이블에 열을 추가할 때 SQL 수준 [67]표기로 '기본 열 값 제약 조건'을 지정해야 합니다.
- "최대 1개" 카디널리티에는 Checkmark [68]유형에 대한 특수한 메커니즘이 있습니다.
- 취약한 엔티티(생명 제약 소유자-자녀 관계에 있는 하위 엔티티)는 계단식 삭제 트리거를 특별히 지원하지 않지만 데이터베이스에서 수동으로 캐스케이드를 삭제하는 기능이 있습니다.집요하다.클래스 [69]모듈
- 자동 테이블 생성, 스키마 업데이트 및 테이블 마이그레이션
- 엔티티 템플릿을 변경하면 템플릿 내용에서 생성된 migrateAll 절차에서 "ALTER TABLE" SQL 명령을 지원하는 DBMS에 대한 스키마 업데이트 및 마이그레이션이 자동으로 생성됩니다.마이그레이션 인식 DBMS를 찾으려면 [63]참조의 "마이그레이션"을 참조하십시오.
공유하다 [mkPersist sql 설정, mkMigrate "모두 이행" -- 지정된 이름으로 이행 프로시저를 생성합니다. ] [끈질기게 버티다 사용자 -- 테이블명과 엔티티 레코드 타입 -- 기본 키로 암묵적인 자동 증가 열 "id"를 입력하고 UserId를 입력합니다. 식별하다 본문 -- db. table column "ident"를 참조한다. -- 테이블 이름 앞에 "userIdent"가 붙는 레코드 필드를 생성합니다. 패스워드 본문 아마도요. -- Nullable 필드를 나타낼 수 있습니다. 유니크 유저 식별하다 --스페이스 sep에 고유한 제약이 있습니다.필드 시퀀스 이메일 -- 테이블명과 엔티티 레코드 타입 -- 기본 키로 암묵적인 자동 증가 열 "id"를 입력하고 EmailId를 입력합니다. 이메일 본문 유저 사용자 ID -- 다른 테이블 EntityField 유형을 지정함으로써 외부 키를 지정합니다. 베키 본문 아마도요. 새로 추가된 열 본문 "default='sometext'::문자 바리에이션" -- sql level 기본 제약조건 유니크 메일 이메일 --고유한 제약 ]
- Esqueleto:는 [70]지속성에 대한 올바른 관계 쿼리를 생성하기 위한 Haskell 결합기 계층입니다.
영구 rawSQL 및 Esqueleto [71]쿼리의 예제입니다.
이메일
다음 패키지는 yesod 플랫폼의 [72]일부입니다.
페이스북
- fb 라이브러리와 Yesod [75]사이의 유용한 접착 기능.
개발 주기
HaskellStack[76] 툴 템플릿에서 새로운 Yesod 앱이 생성되어 이전 명령어 "yesod init"을 대체합니다.
스택 기반 app. 템플릿 이름 앞에 yesod-{minimal postgres sqlite mysql mongo...가 붙습니다.}"
- HaskellStack은 기본적으로 스택 리포(stackage repo)를 사용하기 때문에 해킹 리포의 추가 패키지는 "stack.yaml" extra-deps 섹션에서 참조해야 합니다.
- 로컬 하위 폴더에 패키지를 사용자 정의할 수 있습니다.stack.yaml 패키지 섹션에서 참조해야 합니다.
"Yesod 도우미" 도구
- yesod 도우미 도구
yesod devel
파일 트리를 수정할 때마다 프로젝트를 다시 컴파일하고 재시작합니다.yesod add-handler
는 새로운 핸들러와 모듈을 프로젝트에 추가하고 "어플리케이션" 모듈에 핸들러 Import 절을 추가합니다.
Keter를 사용한 도입: 웹 앱 서버 모니터 및 역프록시 서버
Keter는 서비스로서의 프로세스로서 Yesod 웹 앱서버의 도입과 재기동 및 웹 앱별로 Postgre용 데이터베이스 작성을 처리합니다.SQL.
console 명령어yesod keter
웹 앱을 "filename"이라는 이름의 케터 폴더에 업로드하기 위한 케터 번들로 포장합니다.
Keter는 "수신" 폴더를 모니터링하고 앱을 임시 폴더에 언팩한 후 웹 앱에 청취 포트를 할당하고 시작합니다.
처음에는 Nginx와 리버스 프록시(Keter 버전 0.1*)로 동작하여 가상 서버 엔트리를 설정에 추가하고 Nginx를 새로고침했지만, 현재는 Keter 자체에서 리버스 프록시 기능을 제공하여 Nginx 의존성을 제거하고 메인 웹 [81]서버 역할을 합니다.
기능 언어에서 생성된 JavaScript와의 통합
「 」를 참조해 주세요.
레퍼런스
- ^ "Release 1.6.1.1". 15 April 2021. Retrieved 22 April 2021.
- ^ a b c "HaskellWiki - QuasiQuotation". Haskell.org. 2012-05-26. Retrieved 2012-10-23.
- ^ "Univ. of Kent - Comparing Dynamic and Static Language Approaches to Web Frameworks - Yesod vs Ruby on Rails" (PDF). Retrieved 2012-10-23.
- ^ "The wai package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The wai-extra package with CGI WAI handler". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The wai-handler-fastcgi package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The wai-handler-scgi package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The warp package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The wai-handler-launch package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ a b "book - Basics". Yesodweb.com. Retrieved 2012-10-23.
- ^ mkYesod 코드
- ^ a b "book - Routing and Handlers". Yesodweb.com. Retrieved 2012-10-23.
- ^ "Playing with Routes and Links". FPComplete.com. 2012-10-17. Retrieved 2012-10-28.
- ^ "book - Authentication and Authorization". Yesodweb.com. Retrieved 2012-10-23.
- ^ "The yesod-auth package". Hackage.haskell.org. Retrieved 2012-10-26.
- ^ "book - Sessions - See section "Ultimate Destination"". Yesodweb.com. Retrieved 2012-11-17.
- ^ "Sessions". Yesodweb.com. Retrieved 2012-10-23.
- ^ "Web.ClientSession". Hackage.haskell.org. Retrieved 2012-10-25.
- ^ "ServerSession: secure modular server-side sessions". Hackage.haskell.org. Retrieved 2018-10-29.
- ^ "Web.ServerSession.Frontend.Yesod". Hackage.haskell.org. Retrieved 2018-10-29.
- ^ "Session Messages". Yesodweb.com. Retrieved 2018-10-23.
- ^ "Creating a Subsite". Yesodweb.com. Retrieved 2012-10-25.
- ^ "Yesod and subsites: a no-brainer". Monoid.se. 2012-08-22. Retrieved 2012-10-28.[ ]
- ^ "The Magic of Yesod, part 2 - See section "Static Subsite"". Yesodweb.com. 2010-12-25. Retrieved 2012-10-25.
- ^ "The package yesod-static - Static Subsite". Hackage.haskell.org. Retrieved 2012-10-25.
- ^ "The package yesod-auth - Auth Subsite". Hackage.haskell.org. Retrieved 2012-10-25.
- ^ a b "book - Forms". Yesodweb.com. Retrieved 2012-10-23.
- ^ "Yesod.Form.Fields". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Yesod.Form.Functions runFormPost". Hackage.haskell.org. Retrieved 2012-10-25.
- ^ "Yesod.Form.Types". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "HaskellWiki - Applicative functor". haskell.org. Retrieved 2012-10-24.
- ^ a b "The class HasReps". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "RESTful Content". Yesodweb.com. Retrieved 2012-10-23.
- ^ "The class ToContent". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "More Client Side Yesod: todo sample". Yesodweb.com. 2012-04-23. Retrieved 2012-10-23.
- ^ "JSON Web Service". Yesodweb.com. Retrieved 2012-10-23.
- ^ "The yesod-json package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "book - Widgets". Yesodweb.com. Retrieved 2012-10-23.
- ^ "The widget monad". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The Writer monad". Haskell.org. Retrieved 2012-10-23.
- ^ "Template Haskell Quasi-quotation". Haskell.org. Retrieved 2012-11-02.
- ^ a b "book - Shakesperean templates". Yesodweb.com. Retrieved 2012-10-23.
- ^ "The hamlet template module". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Class Text.Blaze.ToMarkup". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Class Text.Cassius.ToCss". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Class Text.Julius.ToJavascript". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Class Text.Shakespeare.I18N.ToMessage". Hackage.haskell.org. Retrieved 2012-10-24.
- ^ "Class Text.Shakespeare.Text.ToText". Hackage.haskell.org. Retrieved 2012-10-24.
- ^ "Template Haskell". haskell.org. Retrieved 2012-11-03.
- ^ "book - Shakesperean templates # Calling shakespeare". Yesodweb.com. Retrieved 2012-10-23.
- ^ a b "The Julius template module". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Roy language". Roy.brianmckenna.org. Retrieved 2012-10-23.
- ^ "The Cassius template module". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The Lucius template module". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "The Typescript template module". Hackage.haskell.org. Retrieved 2018-10-10.
- ^ "Shakespeare plain text templates module". Hackage.haskell.org. Retrieved 2012-10-24.
- ^ "book - Internationalization". Yesodweb.com. Retrieved 2012-10-23.
- ^ mk Message
- ^ "The yesod-sitemap package". Hackage.haskell.org. Retrieved 2012-10-26.
- ^ "The yesod-newsfeed package for RSS / Atom views". Hackage.haskell.org. Retrieved 2012-10-26.
- ^ "Book - Initializing data in the foundation datatype". Yesodweb.com. Retrieved 2014-05-26.
- ^ a b c "book - Persistent". Yesodweb.com. Retrieved 2012-10-23.
- ^ "Yesod-persistent package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Yesod-persistent docs". github.com. Retrieved 2018-10-16.
- ^ "Yesod-persistent entity syntax". github.com. Retrieved 2018-10-16.
- ^ "Redundant migrations for fields' default values". GitHub.com. Retrieved 2012-12-04.
- ^ ""At most one" cardinality enforcement in persistent with type Checkmark". Hackage.haskell.org. Retrieved 2018-10-16.
- ^ "How can I create a foreign key constraint using Yesod/Persistent?". stackoverflow.com. Retrieved 2018-10-16.
- ^ "esqueleto package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Query example at". Stackoverflow.com. 2012-09-19. Retrieved 2012-10-23.
- ^ "The yesod package". Hackage.haskell.org. Retrieved 2019-06-26.
- ^ "The email-validate package". Hackage.haskell.org. Retrieved 2012-10-26.
- ^ "The mime-mail package". Hackage.haskell.org. Retrieved 2012-10-26.
- ^ "The yesod-fb package". Hackage.haskell.org. Retrieved 2012-10-26.
- ^ Haskell Stack - 설치 방법
- ^ 도우미 도구를 사용한 yesod-bin pkg(스택 도구 사용 지침 포함)
- ^ "book - Deploying your Webapp". Yesodweb.com. Retrieved 2012-10-23.
- ^ Readme.Md. "Yesod keter readme". GitHub. Retrieved 2012-10-23.
- ^ "The keter package". Hackage.haskell.org. Retrieved 2012-10-23.
- ^ "Keter updates". Yesodweb.com. 2012-10-25. Retrieved 2012-10-25.
- ^ "Keter: Web App Deployment". Yesodweb.com. 2012-05-11. Retrieved 2012-10-23.
- ^ "Keter: It's Alive!". Yesodweb.com. 2012-05-17. Retrieved 2012-10-23.
- ^ "Javascript Options". github.com. Retrieved 2014-03-12.
- ^ "Yesod, AngularJS and Fay". yesodweb.com. 2012-10-30. Retrieved 2014-03-12.
- ^ "HaskellWiki - The JavaScript Problem". haskell.org. Retrieved 2014-04-12.
외부 링크
- 공식 웹사이트
- 프레젠테이션:InfoQ, Haskell eXchange 2012
- 슬라이드: Johns Hopkins University의 A.C.M. - Yesod를 사용한 ReST-ful 웹사이트
- 스크린캐스트:Yesod 1.0 at Vimeo
- O'Reilly 전자책 - Haskell 및 Yesod를 사용한 웹 애플리케이션 개발 - 안전 주도형 웹 개발
- Q&A: StackOverflow.com - Yesod 태그 부착 Q&A
블로그 튜토리얼
- FPComplete.com - 첫 번째 웹 사이트, 루트와 링크 재생
- 신참을 위한 예소드
- hamberg.no - handler ToIO: 포크 사용Yesod 핸들러의 IO
비교
- Haskell Wiki - Haskell 웹 프레임워크
- Haskell 웹 프레임워크의 공정하고 유용한 비교
- 켄트 대학교 - 웹 프레임워크에 대한 동적 및 정적 언어 접근법 비교 - Yesod vs Ruby on Rails