DjangoとBackboneを使用してSPAを構築しています。これまで私のテンプレートの大半はDjango側にありましたが、私は現在、Backbone/Underscoreを使ってテンプレートを作成しています。私が確信しているのは、認証に関してページリロードを管理する方法だけです。Django + Backbone:ログイン/ログアウト用のアンダースコアテンプレート
別のログインページではなく、アプリのメニューバー(ブートストラップナビバー)にドロップダウンログインフォームがあり、$.ajax
ログイン/アウトアクションのリクエストになります。私は、ユーザーがログインしているときに特定のコンポーネント(ロード、保存、エクスポートボタン)のみをレンダリングし、ログアウトしたときにそれらを非表示にします。ページのリロードは、明らかにユーザーがログインしているかどうかを認識している必要があります。これは私が私のDjangoテンプレートでそれを管理しています方法です:
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<!-- Menu left -->
<ul class="nav navbar-nav">
<!-- li components... -->
</ul>
<!-- Menu right -->
<ul class="nav navbar-nav pull-right" id="navbar-right">
{% if user.is_authenticated %}
<!-- If user is logged in render 'My Account' and 'Logout' components -->
<li id='menu-account'><a href='#'>My Account</a></li>
<li id='menu-logout'><a href='#'>Logout</a></li>
{% else %}
<!-- If logged out render the login form -->
<li id="menu-register"><a href="#">Register</a></li>
<li class="dropdown" id="menu-login">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" id="nav-login">Login</a>
<div class="dropdown-menu pull-right">
<form role="form" id="form-login" action="login/" method="POST">
<input class="form-control" name="username" id="username" placeholder="Username" type="text"><br>
<input class="form-control" name="password" id="password" placeholder="Password" type="password"><br>
<button type="submit" id="btn-login" class="btn btn-default">Login</button>
</form>
</div>
</li>
{% endif %}
</ul>
</div>
</nav>
これは、Djangoのテンプレートタグは、条件付きのレンダリングの世話をして、非常にうまく動作します。アンダースコアのバージョンは大きく違って見えますが、ユーザーがクライアント側からログインしているかどうかをどうやって判断するのですか?私はこのための応答ヘッダーを追加することを考えていますが、Djangoの組み込みの方法がありますか?私はlogin_required
ビューデコレータを見てきましたが、ユーザーがログアウトしたときにリダイレクトする必要があるようです。
非常に有益な回答をいただきありがとうございます。応答が遅れましたことを申し訳ありません。 – ChrisM