简体   繁体   English

Django csrf_token没有实现隐藏字段

[英]Django csrf_token not implementing hidden field

I am working in a Django project and a part of the functionality is user login, which is not working. 我正在Django项目中工作,部分功能是用户登录,这不起作用。 The same piece of code was working perfectly 10 minutes ago. 十分钟前,同一段代码运行良好。
Error: A csrf_token was used in a template but the context did not provide the value. 错误:模板中使用了csrf_token,但上下文未提供该值。
FYI, I have already tried using render() and render_to_template() but nothing works. 仅供参考,我已经尝试使用render()render_to_template()但是没有任何效果。 The files 文件

views.py views.py

def login(request):
    context=RequestContext(request)
    if request.method=='POST':
        username=request.POST.get('username')
        password=request.POST.get('password')
        user=auth.authenticate(username=username, password=password)
        if user:
            if user.is_active:
                auth.login(request,user)
                return render_to_response('ProjectLogging/main.html',{'user':user, 'project_list':Project.objects.all()}, context)
            else:
                return HttpResponse("Your account is disabled.")
        else:
            return HttpResponse("Invalid login credentials.")
    return render_to_response('ProjectLogging/login.html')

urls.py urls.py

urlpatterns=patterns('ProjectLogging',
    url(r'^$', 'views.login', name="index"),
    url(r'^login/$', 'views.login', name="login"),
    url(r'^logout/$', 'views.logout', name="logout"),
    url(r'^main/$','views.main', name="main"),
    url(r'^(user/?P<username>\w+)$', 'views.main'),
)

login.html 的login.html

{%extends "base.html"%}

{%block content%}
<h1>Sign In {%if user.is_authenticated%}{{user.username}} {%else%} user {%endif%}</h1>
{%if form.errors%}
    {%for error in form.errors%}
    <p class="error">error</p>
    {%endfor%}
{%endif%}
<form action="/login/" method="post">
    {% csrf_token %}
    <p>
        <label for="username">Username: </label>
        <input type="text" name="username" value="" id="username">
    </p>
    <p>
        <label for="password">Password: </label>
        <input type="password" name="password" value="" id="password">
    </p>
    <p><input type="submit" value="Log In"></p>
</form>
{%endblock%}

Thank you. 谢谢。

You should provide the RequestContext to the render_to_response() call or, as the better option, use the render() shortcut: 您应该将RequestContext提供给render_to_response()调用,或者作为更好的选择,使用render()快捷方式:

from django.shortcuts import render

return render(request, 'ProjectLogging/login.html')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM