В итоге при попытке логина выдаёт ошибку
Forbidden (403)
CSRF verification failed. Request aborted.
Вот классы из settings.py
MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', # Uncomment the next line for simple clickjacking protection: # 'django.middleware.clickjacking.XFrameOptionsMiddleware', )
Вот шаблон( в правильное ли место я добовляю csrf_token?
<html> <body> {% if request.user.is_authenticated %} {{request.user.username}} {% else %} <form method="POST" action="/prices/login/">{% csrf_token %} <table> <tr> <td> Логин </td> <td><input type="text" name="login" /> </td> </tr> <tr> <td> Пароль </td> <td><input type="password" name="password" /> </td> </tr> </table> <input type="submit" value="Войти" /> </form> {% endif %} </body> </html>
А вот и сама функция БЕЗ попыток внести csrf
def login( request ) : if not request.user.is_authenticated() : try : login = request.POST['login'] password = request.POST['password'] user = auth.authenticate( username = login, password = password ) if user and user.is_active : auth.login( request, user ) else : HttpResponseRedirect ( '/prices/invalidlogin/' ) except KeyError : pass return render_to_response( u'login.html', locals() )
Можно ли как то внести переменную с csrf в функцию render_to_response
c = {} c.update(csrf(request))