Preface |
|
xi | |
Part I. Basics |
|
|
|
17 | (4) |
|
|
17 | (1) |
|
|
18 | (1) |
|
|
18 | (1) |
|
|
19 | (1) |
|
|
19 | (2) |
|
|
21 | (10) |
|
|
21 | (2) |
|
|
23 | (1) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
25 | (1) |
|
|
26 | (2) |
|
|
28 | (1) |
|
|
28 | (1) |
|
|
29 | (2) |
|
|
31 | (8) |
|
|
31 | (1) |
|
|
32 | (2) |
|
|
34 | (1) |
|
|
34 | (1) |
|
|
35 | (1) |
|
Resources and Type-Safe URLs |
|
|
35 | (2) |
|
|
37 | (1) |
|
|
37 | (1) |
|
|
38 | (1) |
|
|
38 | (1) |
|
4 Shakespearean Templates |
|
|
39 | (18) |
|
|
39 | (2) |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
41 | (2) |
|
|
42 | (1) |
|
|
43 | (8) |
|
|
44 | (5) |
|
|
49 | (2) |
|
|
51 | (1) |
|
|
51 | (1) |
|
|
51 | (4) |
|
|
53 | (2) |
|
|
55 | (1) |
|
|
56 | (1) |
|
|
57 | (12) |
|
|
57 | (2) |
|
|
59 | (1) |
|
|
60 | (1) |
|
|
61 | (1) |
|
|
62 | (1) |
|
|
62 | (2) |
|
|
63 | (1) |
|
|
64 | (2) |
|
|
66 | (1) |
|
|
67 | (2) |
|
|
69 | (12) |
|
Rendering and Parsing URLs |
|
|
69 | (4) |
|
|
71 | (1) |
|
|
71 | (2) |
|
|
73 | (2) |
|
|
74 | (1) |
|
|
75 | (1) |
|
External CSS and JavaScript |
|
|
76 | (1) |
|
|
77 | (1) |
|
Authentication/Authorization |
|
|
78 | (1) |
|
|
79 | (1) |
|
|
79 | (2) |
|
|
81 | (14) |
|
|
81 | (5) |
|
|
82 | (2) |
|
|
84 | (1) |
|
|
85 | (1) |
|
|
86 | (2) |
|
|
86 | (1) |
|
|
87 | (1) |
|
|
88 | (3) |
|
|
89 | (1) |
|
|
89 | (1) |
|
|
89 | (1) |
|
|
90 | (1) |
|
|
91 | (1) |
|
Query String and Hash Fragments |
|
|
92 | (1) |
|
|
93 | (2) |
|
|
95 | (20) |
|
|
95 | (2) |
|
|
97 | (1) |
|
|
98 | (2) |
|
|
100 | (1) |
|
|
100 | (2) |
|
|
101 | (1) |
|
|
102 | (1) |
|
More Sophisticated Fields |
|
|
103 | (1) |
|
|
104 | (1) |
|
|
105 | (1) |
|
|
105 | (3) |
|
|
108 | (1) |
|
|
109 | (2) |
|
Values That Don't Come from the User |
|
|
111 | (2) |
|
|
113 | (2) |
|
|
115 | (8) |
|
|
115 | (1) |
|
|
116 | (1) |
|
|
117 | (1) |
|
|
118 | (2) |
|
|
120 | (2) |
|
|
122 | (1) |
|
|
123 | (32) |
|
|
124 | (1) |
|
Solving the Boundary Issue |
|
|
125 | (6) |
|
|
126 | (1) |
|
|
127 | (3) |
|
|
130 | (1) |
|
|
131 | (3) |
|
|
134 | (1) |
|
|
135 | (3) |
|
|
135 | (1) |
|
Fetching by Unique Constraint |
|
|
136 | (1) |
|
|
136 | (2) |
|
|
138 | (3) |
|
|
138 | (2) |
|
|
140 | (1) |
|
|
141 | (1) |
|
|
141 | (3) |
|
|
144 | (1) |
|
|
145 | (2) |
|
More Complicated, More Generic |
|
|
146 | (1) |
|
|
147 | (1) |
|
|
148 | (2) |
|
|
150 | (2) |
|
|
152 | (1) |
|
|
152 | (1) |
|
|
153 | (2) |
|
11 Deploying Your Web App |
|
|
155 | (12) |
|
|
155 | (1) |
|
|
156 | (1) |
|
|
156 | (1) |
|
|
157 | (1) |
|
|
157 | (3) |
|
|
158 | (2) |
|
|
160 | (1) |
|
|
160 | (1) |
|
|
161 | (1) |
|
|
162 | (1) |
|
|
162 | (1) |
|
|
163 | (4) |
Part II. Advanced |
|
|
|
167 | (10) |
|
|
167 | (1) |
|
|
168 | (8) |
|
|
170 | (2) |
|
|
172 | (4) |
|
|
176 | (1) |
|
|
176 | (1) |
|
|
177 | (12) |
|
|
177 | (1) |
|
|
178 | (1) |
|
Example: Database-Driven Navbar |
|
|
179 | (2) |
|
Example: Request Information |
|
|
181 | (2) |
|
Performance and Error Messages |
|
|
183 | (1) |
|
Adding a New Monad Transformer |
|
|
184 | (4) |
|
|
188 | (1) |
|
14 Authentication and Authorization |
|
|
189 | (14) |
|
|
189 | (1) |
|
|
190 | (4) |
|
|
194 | (4) |
|
|
198 | (2) |
|
|
200 | (3) |
|
15 Scaffolding and the Site Template |
|
|
203 | (8) |
|
|
203 | (1) |
|
|
204 | (3) |
|
|
204 | (1) |
|
|
205 | (1) |
|
Foundation and Application Modules |
|
|
205 | (1) |
|
|
206 | (1) |
|
|
207 | (1) |
|
|
207 | (1) |
|
|
208 | (1) |
|
|
208 | (1) |
|
|
209 | (2) |
|
|
211 | (8) |
|
|
211 | (2) |
|
|
213 | (1) |
|
|
214 | (1) |
|
|
215 | (1) |
|
|
215 | (1) |
|
|
216 | (1) |
|
|
217 | (2) |
|
|
219 | (4) |
|
|
219 | (4) |
|
18 Understanding a Request |
|
|
223 | (12) |
|
|
223 | (3) |
|
|
224 | (1) |
|
|
225 | (1) |
|
|
226 | (1) |
|
|
226 | (8) |
|
toWaiApp, toWaiAppPlain, and warp |
|
|
227 | (1) |
|
|
228 | (4) |
|
|
232 | (2) |
|
|
234 | (1) |
|
|
235 | (10) |
|
|
235 | (2) |
|
Database Queries in Widgets |
|
|
237 | (1) |
|
|
238 | (1) |
|
|
239 | (1) |
|
|
240 | (2) |
|
|
242 | (3) |
|
|
245 | (26) |
|
|
245 | (5) |
|
|
250 | (2) |
|
The HandlerT Monad Transformer |
|
|
252 | (6) |
|
(To)Content, (To)TypedContent |
|
|
255 | (1) |
|
HasContentType and Representations |
|
|
256 | (2) |
|
Convenience warp Function |
|
|
258 | (1) |
|
|
258 | (3) |
|
Getting Request Parameters |
|
|
258 | (1) |
|
|
259 | (1) |
|
|
259 | (2) |
|
|
261 | (1) |
|
Routing with Template Haskell |
|
|
262 | (3) |
|
|
264 | (1) |
|
|
265 | (2) |
|
The URL Rendering Function |
|
|
267 | (1) |
|
|
267 | (1) |
|
|
268 | (3) |
Part III. Examples |
|
|
21 Initializing Data in the Foundation Data Type |
|
|
271 | (4) |
|
Step 1: Define Your Foundation |
|
|
272 | (1) |
|
Step 2: Use the Foundation |
|
|
272 | (1) |
|
Step 3: Create the Foundation Value |
|
|
272 | (1) |
|
|
273 | (2) |
|
22 Blog:118n, Authentication, Authorization, and Database |
|
|
275 | (10) |
|
23 Wiki: Markdown, Chat Subsite, Event Source |
|
|
285 | (12) |
|
|
285 | (1) |
|
|
286 | (3) |
|
|
289 | (2) |
|
|
291 | (1) |
|
|
292 | (1) |
|
Master Site: Wiki Handlers |
|
|
293 | (1) |
|
|
294 | (1) |
|
|
295 | (2) |
|
|
297 | (4) |
|
|
297 | (1) |
|
|
298 | (3) |
|
25 Case Study: Sphinx-Based Search |
|
|
301 | (16) |
|
|
301 | (1) |
|
|
302 | (3) |
|
|
305 | (3) |
|
|
308 | (2) |
|
|
310 | (7) |
|
|
317 | (2) |
|
27 Single-Process Pub/Sub |
|
|
319 | (6) |
|
|
319 | (1) |
|
|
320 | (1) |
|
|
320 | (1) |
|
|
321 | (1) |
|
|
321 | (4) |
|
28 Environment Variables for Configuration |
|
|
325 | (2) |
|
|
327 | (8) |
|
Alternative Approach: Hierarchical Routes |
|
|
329 | |
Part IV. Appendices |
|
|
|
335 | (10) |
|
B Web Application Interface |
|
|
345 | (8) |
|
|
353 | (2) |
|
|
355 | (6) |
|
|
361 | (16) |
Index |
|
377 | |