我正在尝试将用户(已成功登录的用户)重定向到带有用户名的文章页面。但出于某种原因,我没有在文章页面中看到用户的用户名。
文章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)
答案 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}}
条件。