Как решить пользовательский django Ошибка входа: Ошибка проверки CSRF. Запрос отменен - PullRequest
0 голосов
/ 08 мая 2018

У меня есть пользовательская форма входа в систему django. Когда пользователь входит в систему, появляется следующая ошибка пожалуйста помогите

            Forbidden (403)
    CSRF verification failed. Request aborted.

    Help
    Reason given for failure:

        CSRF token missing or incorrect.

В терминале

отображается следующая ошибка
    UserWarning: A {% csrf_token %} was used in a t
emplate, but the context did not provide the value.  This is usually caused by not using RequestContext.
  "A {% csrf_token %} was used in a template, but the context "
[08/May/2018 23:44:13] "GET /login/ HTTP/1.1" 200 7798

вот мой взгляд

  @csrf_protect
def user_login(request):
    context = RequestContext(request)
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('username')
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return render_to_response('app/index.html', context_instance=RequestContext(request))
            else:
                return HttpResponse("You're account is disabled.")
        else:
            return render_to_response('app/login.html', context_instance=RequestContext(request))
    else:
        return render_to_response('app/login.html', {}, context)

вот мой html код логина

  <form class="form-horizontal" name="LoginForm" action="/login/" method="post">
                 {% csrf_token %}
                 {% if next %}
                    <input type="hidden" name="next" value="{{ next }}" />
                 {% endif %}
                 

Как это сделать? При успешном входе пользователя в систему шаблон User_Profile отображается, но URL остается http://127.0.0.1:8000/login/ Я хочу изменить URL-адрес на http://127.0.0.1:8000/students_profile

вот URL

    url(r'^students_profile/', views.IndexView.as_view(), name='students_profile'),

Вот форма входа

 <form class="form-horizontal" name="LoginForm" action="." method="post">
                 {% csrf_token %}
                 {% if next %}
                    <input type="hidden" name="next" value="{{ next }}" />
                 {% endif %}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Ваш шаблон уже защищен {% csrf_token %}, вам не нужен декоратор: Кроме того, вместо использования render_to_response, вы можете использовать render из django.shortcuts

Я немного уменьшу ваши коды, лучше использовать

from django.contrib import messages

def user_login(request):
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user:
            if user.is_active:
                login(request, user)
                return render(request,'app/index.html',{})
            # the else statement
            return HttpResponse("You're account is disabled.")
        # the else statement
        messages.add_message(request,messages.WARNING,'Credentials invalid')
    return render(request,'app/login.html', {})

в шаблонах извлекает сообщение вот так:

{% if messages %}
<ul class="messages">
   {% for message in messages %}
   <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
   {% endfor %}
 </ul>
{% endif %}
0 голосов
/ 08 мая 2018

Эй, пожалуйста, проверьте ваш views.py Я не видел ваш код, но я думаю, что вы, возможно, отрисовали без RequestContext, поэтому выше отображается ошибка. Так что лучше используйте

render(request, 'template_name', {params});

Из документов render () аналогичен вызову render_to_response () с аргументом context_instance, который вызывает использование RequestContext.

...