2017-02-06 15 views
0

ユーザー(ログインに成功したユーザー)をユーザーのユーザー名で記事ページにリダイレクトしようとしています。何らかの理由で記事のページにユーザーのユーザー名が表示されません。ユーザーをリダイレクトして、Ajaxのユーザー名を別のページに表示する方法は?

記事のHTML:

<div class="container post" > 
    <h2 class="author"><a>{{ username }}</a></h2> 
    <hr> 
    <h6 class="subject"> </h6> 
    <p class="comment"><br><br> 
</div> 

記事ビュー:

def article(request): 
    template = 'librarysystem/article.html' 
    return render(request, template) 

アヤックス:

$('#loginForm').on('submit',function(e){ 
    e.preventDefault(); 
    $.ajax({ 
    type: "POST", 
    url: "/librarysystem/Login/", 
    data: { 
     'username':$("#loginUsername").val(), 
     'password':$("#loginPassword").val(), 
     csrfmiddlewaretoken:$ 
     ('input[name=csrfmiddlewaretoken]').val 
    () 
    }, 
    dataType: 'json', 
    success: function(data){ 
     if (data.response){ 
     initalizeForm(); 
     $("#invalid").html(" "); 
     $('#loginmodal').modal('hide'); 
     console.log(data.username); 
     window.location = data.redirectTo + "?username=" + data.username; 
     }else 
     $("#invalid").html("<h5> Invalid username or password. </h5>").css('color','red'); 
    },           
    error: function(jqXHR, status, err){ 
     alert(jqXHR.responseText);          
    } 
    });       
}); 

urls.py:

from django.conf.urls import url 
from .import views 

urlpatterns = [ 
    url(r'^register/$',views.registerUser), 
    url(r'^$', views.index, name="Index"), 
    url(r'^validateRegisterForm/$',views.validateRegisterForm), 
    url(r'^validateLoginForm/$',views.validateLoginForm), 
    url(r'^article/$', views.article, name="Article"), 
    url(r'^Login/$',views.loginUser, name="Login"), 
    url(r'^Logout/$',views.logoutUser, name="Logout"), 
] 

views.py:

def loginUser(request): 
    data = {} 
    if request.method == "POST": 
     username = request.POST.get('username') 
     password = request.POST.get('password') 
     user = authenticate(username=username,password=password);   
     if user is None: 
      data['response'] = False 
     else: 
      login(request,user) 
      data['response'] = True 
      data['redirectTo'] = "/librarysystem/article/" 
      data['username'] = username   
    return JsonResponse(data) 
+0

「article」ビューを含めてください – Sayse

+2

@Sayse記事ビューで質問を編集しました –

+1

を参照してください。{{request.user.get_full_name}} –

答えて

0

を確認しますテンプレート内のユーザー名を直接入力します。クエリ文字列の変数は{{request.get.username}}で取得できます。または、ユーザーがあなたのテンプレートにrender(request, '<template_name>') であなたのテンプレートをレンダリングするときに我々はビューで直接ユーザーオブジェクトにアクセスすることができますログインしているとして、あなたはそれを使用する前に、ユーザー{% if user.is_athenticated %}条件に優れている

{{user.username}} or {{request.user.username}} 

を次のようにユーザー名をアクセスすることができますユーザーがログインしているかどうかを調べる{{user.username}}。

+0

同様に、{%if user.is_authenticated()%} {{ request.user.username }}

+0

@Ahti例外はありますか? – MicroPyramid

+0

はい私はこれを取得します:https://postimg.org/image/b5eoklqtl/ –

0

問題は、あなたがあなたのarticleビューのコンテキストでrequest.GET辞書からusernameを参照しない可能性が高いよりも事実です。

しかし、これを行っても、誰でも任意のユーザー名をこのgetパラメータに入れることができるため、エラーが発生しやすく、安全でない可能性があります。

requestuserオブジェクトからは、getパラメータとget the usernameを忘れてしまいます。それはAjaxのレスポンスであり、あなたはあなたが使用することはできませんURLにクエリ文字列として文字列を渡していると

<h2 class="author"><a>{{ request.user.get_username }}</a></h2> 

は、あなたの記事ビューは問題

def article(request): 
    template = 'librarysystem/article.html' 
    return render(request, template, {'username': request.GET.get('username')}) 
+0

大丈夫ですが、ユーザ名の横にログアウトボタンを表示すると、クリックするとユーザをログアウトする必要がありますか? –

+0

@Ahti - これは、あなたが試して研究したことに完全な新しい質問を提出すべき別の質問です。 – Sayse

+0

"return render(request、template、{'username':request.GET.get( 'username')})を含めることで大丈夫です。"次に、 "window.location = data.redirectTo +"?username = "+ data.username; "右 ? –

関連する問題