اضافه کردن صفحه 'درباره' به برنامه (Adding an About Page to the Application)
هدف شما در این تمرین اضافه کردن یک صفحه جدید (New Page) 'درباره' به برنامه است. این صفحه باید به مسیر (Route) GET /about متصل شود و برای کاربران احراز هویت شده (Authenticated Users) و نشده در دسترس باشد و به این شکل به نظر برسد:
مرحله ۱
یک مسیر (Route) GET /about ایجاد کنید که به یک هندلر (Handler) جدید about متصل شود. به این فکر کنید که کدام استک میانافزار (Middleware Stack) برای استفاده در این مسیر مناسب است.
مرحله ۲
یک فایل قالب (Template File) جدید ui/html/pages/about.tmpl ایجاد کنید و الگوی (Pattern) مشابهی که برای صفحات دیگر برنامه استفاده کردهایم را دنبال کنید. یک عنوان (Title)، سرصفحه (Header) و مقداری متن جایگزین برای صفحه 'درباره' اضافه کنید.
مرحله ۳
نوار ناوبری (Navigation Bar) اصلی برنامه را بهروزرسانی کنید تا شامل یک پیوند (Link) به صفحه جدید 'درباره' باشد (پیوند باید برای همه کاربران، صرف نظر از اینکه وارد شدهاند یا نه، قابل مشاهده باشد).
مرحله ۴
هندلر about را بهروزرسانی کنید تا فایل قالب (Template File) about.tmpl که به تازگی ایجاد کردهاید را رندر (Render) کند. سپس بررسی کنید که صفحه جدید و ناوبری با بازدید از https://localhost:4000/about در مرورگر شما کار میکند.
کد پیشنهادی
کد پیشنهادی برای مرحله ۱
package main ... func (app *application) about(w http.ResponseWriter, r *http.Request) { // Some code will go here later... }
کد پیشنهادی برای مرحله ۲
{{define "title"}}About{{end}}
{{define "main"}}
<h2>About</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi at mauris dignissim,
consectetur tellus in, fringilla ante. Pellentesque habitant morbi tristique senectus
et netus et malesuada fames ac turpis egestas. Sed dignissim hendrerit scelerisque.</p>
<p>Praesent a dignissim arcu. Cras a metus sagittis, pellentesque odio sit amet,
lacinia velit. In hac habitasse platea dictumst. </p>
{{end}}
کد پیشنهادی برای مرحله ۳
{{define "nav"}}
<nav>
<div>
<a href='/'>Home</a>
<!-- Include a new link, visible to all users -->
<a href='/about'>About</a>
{{if .IsAuthenticated}}
<a href='/snippet/create'>Create snippet</a>
{{end}}
</div>
<div>
{{if .IsAuthenticated}}
<form action='/user/logout' method='POST'>
<input type='hidden' name='csrf_token' value='{{.CSRFToken}}'>
<button>Logout</button>
</form>
{{else}}
<a href='/user/signup'>Signup</a>
<a href='/user/login'>Login</a>
{{end}}
</div>
</nav>
{{end}}
کد پیشنهادی برای مرحله ۴
package main ... func (app *application) about(w http.ResponseWriter, r *http.Request) { data := app.newTemplateData(r) app.render(w, r, http.StatusOK, "about.tmpl", data) }
واژهنامه اصطلاحات فنی
| اصطلاح فارسی | معادل انگلیسی | توضیح |
|---|---|---|
| صفحه جدید | New Page | صفحه تازه اضافه شده به برنامه |
| مسیر | Route | آدرس دسترسی به صفحه |
| کاربران احراز هویت شده | Authenticated Users | کاربران وارد شده به سیستم |
| هندلر | Handler | پردازشکننده درخواست |
| استک میانافزار | Middleware Stack | لایههای پردازش درخواست |
| فایل قالب | Template File | فایل حاوی ساختار HTML |
| الگو | Pattern | ساختار تکرارشونده |
| عنوان | Title | نام نمایشی صفحه |
| سرصفحه | Header | بخش بالای صفحه |
| نوار ناوبری | Navigation Bar | منوی هدایت برنامه |
| پیوند | Link | اتصال به صفحه دیگر |
| رندر | Render | تولید خروجی نهایی |