如何重定向用户并将他/她的用户名显示在Ajax中的其他页面?

时间:2017-02-06 08:17:08

标签: jquery ajax django

我正在尝试将用户(已成功登录的用户)重定向到带有用户名的文章页面。但出于某种原因,我没有在文章页面中看到用户的用户名。

文章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)

的Ajax:

$('#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)

2 个答案:

答案 0 :(得分:0)

问题很可能是您未在username视图的上下文中引用request.GET词典中的article

但即使你这样做,它也可能容易出错并且不安全,因为任何人都可以将他们想要的任何用户名放到这个get参数中。

相反,只需忘记request的{​​{1}}对象中的get参数和get the username

user

您的文章视图确认了问题

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

答案 1 :(得分:0)

由于它是一个Ajax响应,并且您将字符串作为查询字符串传递给URL,因此您将无法直接在模板中使用该用户名。您可以使用def article(request): template = 'librarysystem/article.html' return render(request, template, {'username': request.GET.get('username')}) 获取查询字符串的变量。或者当用户登录时,我们可以使用{{request.get.username}}呈现模板时直接在视图中访问用户对象 在您的模板中,您可以访问用户名,如下所示

render(request, '<template_name>')

在使用{{user.username}}检查用户是否已登录之前,最好是用户{{user.username}} or {{request.user.username}} 条件。