Форум сайта python.su
Для своего мини проекта хотел применить аякс(авторизация и комментарии), авторизацию прилепил в бар навигации сайта тобишь залогиниться можно на любой стр. проекта, только вот после авторизации на стр. комментариев, комментарий отправить уже не получается (CSRF verification failed. Request aborted.)
login
def login(request): args = {} args.update(csrf(request)) args['username'] = request.user.username if request.POST: username = request.POST['username'] password = request.POST['password'] user = auth.authenticate(username=username, password=password) if user is not None: if user.is_active: auth.login(request, user) return HttpResponse('') else: args['login_error'] = "Ошибка авторизации" return render_to_response('article/login.html', args) else: return render_to_response('article/login.html', args)
def addcomment(request): if request.POST: form = CommentForm(request.POST) args = {} args.update(csrf(request)) args['username'] = request.user.username args['comments'] = Comment.objects.all() if form.is_valid(): if not request.user.is_anonymous(): form.instance.comment_author = request.user form.save() args['form'] = form return redirect('/comments/', args) return render_to_response('article/comments.html', args) return redirect('/comments/', {'username': request.user.username})
<form action="/auth/login/" method="post" class="navbar-form pull-right" id="login_form" {% if username %} hidden {% endif %}> {% csrf_token %} <input type="text" name="username" id="username" value="admin" class="span2 search-query" placeholder="Логин"> <input type="password" name="password" id="password" value="foo" class="span2 search-query" placeholder="Пароль"> <input class="btn" type="submit" value="Войти"> </form>
<script type="text/javascript"> $(document).on('submit', '#login_form', function (e){ e.preventDefault(); $.ajax({ type: 'POST', url:"/auth/login/", data:{ username: $('#username').val(), password: $('#password').val(), csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val() }, dataType: 'json', success: function () { $('.logout_btn').html('Выйти(' + $('#username').val() + ')'); $('#logout').removeAttr('hidden'); $('#login_form').attr('hidden', 'true'); }, error: function () { window.location.replace('/auth/login/') } }); }); </script>
<form action="/addcomment/" method="post" id="comment_form" name="comment_form"> {% csrf_token %} {{ form }} <input type="submit" class="btn" value="Отправить комментарий"> </form>
Отредактировано glavie (Фев. 28, 2017 12:55:33)
Офлайн
glavieэтот токен должен быть в каждом посте, а не только при авторизации
csrfmiddlewaretoken
Офлайн
FishHookНе могли бы вы поподробнее написать, где и что нужно дописать/подправить ? Так как, во вьюшках и в формах везде токен (на мой неопытный взгляд) прописан.
этот токен должен быть в каждом посте, а не только при авторизации
Офлайн
glaviehttps://docs.djangoproject.com/en/1.10/ref/csrf/#ajax
Для своего мини проекта хотел применить аякс
Офлайн