Đi tới nội dung
Mục
Ngôn ngữ, hiện là Tiếng Việt
Hệ thống thiết kế Rastrillo

Tuyến

Những mảnh vốn là cả một phản hồi, chứ không phải một phần của phản hồi.

Mỗi ví dụ đều hoạt động thật, nhưng các liên kết trong đó không dẫn đến đâu. HTML hiển thị mã đánh dấu để sao chép.

error-page

Toàn bộ phần thân của một phản hồi lỗi: mã trạng thái, một câu nói thật, một lối quay lại, và mã tham chiếu 500 mà quản trị viên dùng được.

404: không tìm thấy

Xem trước
<div rst-error>
  <p rst-error-status>404</p>
  <h1 rst-error-title>Không tìm thấy trang đó</h1>
  <p rst-error-body>Liên kết có thể đã cũ, hoặc trang đã được chuyển đi. Hãy kiểm tra địa chỉ, hoặc quay về trang đầu.</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">Trang đầu</a>
  </p>
</div>
{{template "error-page" dict "Status" 404 "HomeHref" "/"}}

403: không có quyền

Xem trước
<div rst-error>
  <p rst-error-status>403</p>
  <h1 rst-error-title>Bạn không xem được trang này</h1>
  <p rst-error-body>Tài khoản của bạn không có quyền truy cập ở đây. Nếu bạn nghĩ là nên có, hãy hỏi người quản lý trang web này.</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">Trang đầu</a>
    <a rst-btn href="/posts">Quay lại</a>
  </p>
</div>
{{template "error-page" dict "Status" 403 "HomeHref" "/" "BackHref" "/posts"}}

422: không xử lý được

Xem trước
<div rst-error>
  <p rst-error-status>422</p>
  <h1 rst-error-title>Gửi không thành công</h1>
  <p rst-error-body>Có gì đó trong nội dung đã gửi chưa đúng. Hãy quay lại và thử lại; không có gì được lưu.</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">Trang đầu</a>
    <a rst-btn href="/posts/1/edit">Quay lại</a>
  </p>
</div>
{{template "error-page" dict
    "Status" 422
    "HomeHref" "/"
    "BackHref" "/posts/1/edit"}}

500: lỗi máy chủ

Xem trước
<div rst-error>
  <p rst-error-status>500</p>
  <h1 rst-error-title>Đã có lỗi ở phía chúng tôi</h1>
  <p rst-error-body>Không phải do bạn. Sự cố đã được ghi lại. Hãy thử lại sau giây lát; nếu vẫn tiếp diễn, hãy nêu mã tham chiếu bên dưới.</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">Trang đầu</a>
  </p>
  <p class="rst-mono" rst-error-ref dir="auto">Mã tham chiếu: k3f9tq</p>
</div>
{{template "error-page" dict "Status" 500 "HomeHref" "/" "Ref" "k3f9tq"}}

500 là trạng thái duy nhất có mã tham chiếu: người vận hành có thể grep nó trong nhật ký.

503: không khả dụng

Xem trước
<div rst-error>
  <p rst-error-status>503</p>
  <h1 rst-error-title>Trang web tạm thời không khả dụng</h1>
  <p rst-error-body>Trang web đang được cập nhật hoặc đang bận. Hãy thử lại sau một phút.</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">Trang đầu</a>
  </p>
</div>
{{template "error-page" dict "Status" 503 "HomeHref" "/"}}

Mọi trường hợp khác: cặp chung

Xem trước
<div rst-error>
  <p rst-error-status>418</p>
  <h1 rst-error-title>Có gì đó chưa ổn</h1>
  <p rst-error-body>Không thể hoàn tất yêu cầu đó. Hãy quay lại và thử lại.</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">Trang đầu</a>
  </p>
</div>
{{template "error-page" dict "Status" 418 "HomeHref" "/"}}

Năm trạng thái đã có lời văn trong danh mục của framework. Trạng thái thứ sáu lui về cặp chung, thay vì đưa tên một khóa còn thiếu ra trước mắt người đọc.

back-nav

Liên kết lùi lên một cấp, đặt phía trên màn hình xem hoặc sửa.

Quay lại một bản ghi

Xem trước
<nav rst-back-nav>
  <a href="/orders/1">← Đơn hàng AB3PX</a>
</nav>
{{template "back-nav" dict "Href" "/orders/1" "Label" "Đơn hàng AB3PX"}}

locale-menu

Bộ chuyển ngôn ngữ: một trình đơn details gồm các biểu mẫu POST một trường gửi tới /_locale, để lựa chọn rơi vào cookie ngôn ngữ còn người đọc vẫn ở nguyên đường dẫn cũ.

Mười hai ngôn ngữ, ngôn ngữ hiện tại được làm nổi.

Xem trước
<details rst-dropdown rst-locale name="rst-menus">
  <summary>
    Ngôn ngữ
    <span rst-caret aria-hidden="true">
      <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>
    </span>
  </summary>
  <div rst-dropdown-menu>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="en">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="en">English</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ga">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ga">Gaeilge</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="zh-Hans">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="zh-Hans">简体中文</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="es">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="es">Español</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="hi">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="hi">हिन्दी</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="pt-PT">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="pt-PT">Português</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="bn">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="bn">বাংলা</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ru">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ru">Русский</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ja">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ja">日本語</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="yue">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="yue">廣東話</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="vi">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="vi" aria-current="true">Tiếng Việt</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ar">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ar">العربية</button>
    </form>
  </div>
</details>
{{template "locale-menu" dict "Items" .Locales "Return" "/"}}

Cái này gửi POST tới /_locale, nên cần có máy chủ. Items của nó lấy từ rastrillo.LocaleItems(r). Bộ chuyển trong phần đầu của chính trang này là bản chỉ dùng liên kết.

scheme-menu

Bộ chuyển bảng màu: một menu details gồm các biểu mẫu POST một trường tới /_theme cho Sáng, Tối và Theo hệ thống, để lựa chọn nằm trong cookie bảng màu và người đọc vẫn ở nguyên trang.

Ba lựa chọn, Tối đang được chọn.

Xem trước
<details rst-dropdown rst-scheme name="rst-menus">
  <summary>
    Bảng màu
    <span rst-caret aria-hidden="true">
      <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>
    </span>
  </summary>
  <div rst-dropdown-menu role="group" aria-label="Bảng màu">
    <form method="post" action="/_theme">
      <input type="hidden" name="scheme" value="light">
      <input type="hidden" name="return" value="/">
      <button type="submit">Sáng</button>
    </form>
    <form method="post" action="/_theme">
      <input type="hidden" name="scheme" value="dark">
      <input type="hidden" name="return" value="/">
      <button type="submit" aria-current="true">Tối</button>
    </form>
    <form method="post" action="/_theme">
      <input type="hidden" name="scheme" value="system">
      <input type="hidden" name="return" value="/">
      <button type="submit">Theo hệ thống</button>
    </form>
  </div>
</details>
{{template "scheme-menu" dict "Scheme" "dark" "Return" "/"}}

Cái này gửi POST tới /_theme, nên cần có máy chủ. Scheme của nó lấy từ rastrillo.SchemeFrom(r); ui.ForRequest mang theo nó. Bộ chuyển trên thanh của chính trang này là của riêng bộ sưu tập.

api-tokens

Trang mã thông báo từ PageData của apitoken: phần hiển thị một lần, biểu mẫu tạo, danh sách và các nút thu hồi.

Bốn mã, hai trong số đó còn hiệu lực

Xem trước
<div rst-tokens>
  <section rst-box>
    <form rst-form method="post" action="/tokens">
      <div rst-field>
        <label rst-field-label for="agent">Tên tác tử</label>
        <input rst-input type="text" id="agent" name="agent" maxlength="40">
      </div>
      <label rst-switch>
        <input type="checkbox" name="for_self" value="on">
        <span rst-switch-track aria-hidden="true"></span>
        Mã này dành cho tôi, không phải cho tác tử
      </label>
      <fieldset rst-choice>
        <legend>Quyền truy cập</legend>
        <div rst-choice-cards>
          <label>
            <input type="radio" name="access" value="write" checked>
            <span>
              <span rst-choice-title>Đọc và ghi</span>
            </span>
          </label>
          <label>
            <input type="radio" name="access" value="read">
            <span>
              <span rst-choice-title>Chỉ đọc</span>
            </span>
          </label>
        </div>
      </fieldset>
      <div rst-field>
        <label rst-field-label for="expiry">Hết hạn</label>
        <select rst-input="short" id="expiry" name="expiry">
          <option value="30">30 ngày</option>
          <option value="90" selected>90 ngày</option>
          <option value="365">1 năm</option>
          <option value="never">Không bao giờ</option>
        </select>
      </div>
      <div rst-form-foot>
        <button rst-btn="primary lg" type="submit">Tạo mã thông báo</button>
      </div>
    </form>
  </section>
  <div rst-card rst-tokens-list>
    <div rst-lrow="head">
      <span>Mã thông báo</span>
      <span class="rst-m-hide">Quyền truy cập</span>
      <span class="rst-m-hide">Đã tạo</span>
      <span class="rst-m-hide">Dùng lần cuối</span>
      <span class="rst-m-hide">Hết hạn</span>
      <span></span>
      <span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Claude thay mặt Grace Hopper</span>
        <small>
          <code>k3Jx9QpL2mWa</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Đọc và ghi</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span><time datetime="2026-10-31">2026-10-31</time></span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Thao tác cho Claude thay mặt Grace Hopper">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="k3Jx9QpL2mWa">
            <button type="submit">Thu hồi</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper</span>
        <small>
          <code>Qm2vR8sT4xYb</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Chỉ đọc</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span>Không bao giờ</span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Thao tác cho Grace Hopper">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="Qm2vR8sT4xYb">
            <button type="submit">Thu hồi</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Codex thay mặt Grace Hopper</span>
        <small>
          <code>Zp7wN1cH6kLd</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Đọc và ghi</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span>Không bao giờ</span>
      <span rst-tokens-state><span rst-status rst-tone="neutral">Đã thu hồi</span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Nightly import thay mặt Grace Hopper</span>
        <small>
          <code>Vb4tG9yK3nMe</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Chỉ đọc</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-state><span rst-status rst-tone="warning">Đã hết hạn</span></span>
    </div>
  </div>
  <div rst-tokens-revoke>
    <form method="post" action="/tokens/revoke-agent">
      <input type="hidden" name="agent" value="Claude">
      <button rst-btn type="submit">Thu hồi tất cả của tác tử này: Claude</button>
    </form>
    <form method="post" action="/tokens/revoke-all">
      <button rst-btn="danger" type="submit">Thu hồi tất cả mã thông báo</button>
    </form>
  </div>
</div>
{{template "api-tokens" dict "Page" .Page "Path" "/tokens"}}

Truyền những gì Handlers giao cho Render làm Page, và đường dẫn của chính trang làm Path. Các biểu mẫu thu hồi gửi đến Path/revoke, Path/revoke-agent và Path/revoke-all; đặt RevokePath, RevokeAgentPath hoặc RevokeAllPath để đổi một trong số đó.

Vừa tạo: bí mật, hiển thị một lần

Xem trước
<div rst-tokens>
  <div rst-callout rst-tone="positive" tabindex="-1" autofocus>
    <span rst-callout-ic aria-hidden="true">
      <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg>
    </span>
    <div rst-callout-body>
      <strong>Hãy sao chép mã này ngay. Nó sẽ không hiển thị lại.</strong>
      <p>
        <code rst-tokens-secret>harbour_k3Jx9QpL2mWa_6bD2qK9xWz4rT8vN1mP3sL7yF5hJ0cG2aE4uB</code>
      </p>
    </div>
  </div>
  <section rst-box>
    <form rst-form method="post" action="/tokens">
      <div rst-field>
        <label rst-field-label for="agent">Tên tác tử</label>
        <input rst-input type="text" id="agent" name="agent" maxlength="40">
      </div>
      <label rst-switch>
        <input type="checkbox" name="for_self" value="on">
        <span rst-switch-track aria-hidden="true"></span>
        Mã này dành cho tôi, không phải cho tác tử
      </label>
      <fieldset rst-choice>
        <legend>Quyền truy cập</legend>
        <div rst-choice-cards>
          <label>
            <input type="radio" name="access" value="write" checked>
            <span>
              <span rst-choice-title>Đọc và ghi</span>
            </span>
          </label>
          <label>
            <input type="radio" name="access" value="read">
            <span>
              <span rst-choice-title>Chỉ đọc</span>
            </span>
          </label>
        </div>
      </fieldset>
      <div rst-field>
        <label rst-field-label for="expiry">Hết hạn</label>
        <select rst-input="short" id="expiry" name="expiry">
          <option value="30">30 ngày</option>
          <option value="90" selected>90 ngày</option>
          <option value="365">1 năm</option>
          <option value="never">Không bao giờ</option>
        </select>
      </div>
      <div rst-form-foot>
        <button rst-btn="primary lg" type="submit">Tạo mã thông báo</button>
      </div>
    </form>
  </section>
  <div rst-card rst-tokens-list>
    <div rst-lrow="head">
      <span>Mã thông báo</span>
      <span class="rst-m-hide">Quyền truy cập</span>
      <span class="rst-m-hide">Đã tạo</span>
      <span class="rst-m-hide">Dùng lần cuối</span>
      <span class="rst-m-hide">Hết hạn</span>
      <span></span>
      <span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Claude thay mặt Grace Hopper</span>
        <small>
          <code>k3Jx9QpL2mWa</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Đọc và ghi</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span><time datetime="2026-10-31">2026-10-31</time></span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Thao tác cho Claude thay mặt Grace Hopper">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="k3Jx9QpL2mWa">
            <button type="submit">Thu hồi</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper</span>
        <small>
          <code>Qm2vR8sT4xYb</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Chỉ đọc</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span>Không bao giờ</span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Thao tác cho Grace Hopper">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="Qm2vR8sT4xYb">
            <button type="submit">Thu hồi</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Codex thay mặt Grace Hopper</span>
        <small>
          <code>Zp7wN1cH6kLd</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Đọc và ghi</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span>Không bao giờ</span>
      <span rst-tokens-state><span rst-status rst-tone="neutral">Đã thu hồi</span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Nightly import thay mặt Grace Hopper</span>
        <small>
          <code>Vb4tG9yK3nMe</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Quyền truy cập</span>Chỉ đọc</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Đã tạo</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Dùng lần cuối</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>Hết hạn</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-state><span rst-status rst-tone="warning">Đã hết hạn</span></span>
    </div>
  </div>
  <div rst-tokens-revoke>
    <form method="post" action="/tokens/revoke-agent">
      <input type="hidden" name="agent" value="Claude">
      <button rst-btn type="submit">Thu hồi tất cả của tác tử này: Claude</button>
    </form>
    <form method="post" action="/tokens/revoke-all">
      <button rst-btn="danger" type="submit">Thu hồi tất cả mã thông báo</button>
    </form>
  </div>
</div>
{{template "api-tokens" dict "Page" .Page "Path" "/tokens"}}

Hiển thị phản hồi của biểu mẫu tạo với Created được đặt, và đừng chuyển hướng nó: bí mật nằm trong phản hồi đó và không ở đâu khác.

Chưa có mã thông báo nào

Xem trước
<div rst-tokens>
  <section rst-box>
    <form rst-form method="post" action="/tokens">
      <div rst-field>
        <label rst-field-label for="agent">Tên tác tử</label>
        <input rst-input type="text" id="agent" name="agent" maxlength="40">
      </div>
      <label rst-switch>
        <input type="checkbox" name="for_self" value="on">
        <span rst-switch-track aria-hidden="true"></span>
        Mã này dành cho tôi, không phải cho tác tử
      </label>
      <fieldset rst-choice>
        <legend>Quyền truy cập</legend>
        <div rst-choice-cards>
          <label>
            <input type="radio" name="access" value="write" checked>
            <span>
              <span rst-choice-title>Đọc và ghi</span>
            </span>
          </label>
          <label>
            <input type="radio" name="access" value="read">
            <span>
              <span rst-choice-title>Chỉ đọc</span>
            </span>
          </label>
        </div>
      </fieldset>
      <div rst-field>
        <label rst-field-label for="expiry">Hết hạn</label>
        <select rst-input="short" id="expiry" name="expiry">
          <option value="30">30 ngày</option>
          <option value="90" selected>90 ngày</option>
          <option value="365">1 năm</option>
          <option value="never">Không bao giờ</option>
        </select>
      </div>
      <div rst-form-foot>
        <button rst-btn="primary lg" type="submit">Tạo mã thông báo</button>
      </div>
    </form>
  </section>
  <div rst-empty>
    <p rst-empty-body>Chưa có mã thông báo nào.</p>
  </div>
</div>
{{template "api-tokens" dict "Page" .Page "Path" "/tokens"}}