2016-12-15 5 views
0

Я делаю приложение для кошелька, поэтому если кто-то отправится в http://127.0.0.1:8000/add_money/, чтобы добавить деньги, и они не вошли в систему, они будут перенаправлены на страницу входа в систему, после чего после входа пользователя в систему должен быть перенаправлен обратно в add_money, но он перенаправляется на их профиль.«next» не перенаправляется в ожидаемую позицию

// Пополни VIEW

def add_money(request): 
    if not request.user.is_authenticated(): 
     return render(request, 'registration/login.html', {"next": '/add_money/'}) 
    else: 
     if request.POST: 
      username = request.user.username 
      add_amount = request.POST['amount'] 
      wallet = Wallet.objects.filter(username=username).update(add_money(add_amount)) 
      now = datetime.now() 
      trans = Transaction(from_name=username, wallet_id=wallet.id, date=now, amount=add_amount) 
      trans.save() 
      return render(request, 'user_profile.html', {'user': request.user}) 
    return render(request, 'registration/login.html', {"next": '/add_money/'}) 

// Логин Просмотр

def user_login(request): 
    if request.POST: 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       if request.POST['next']: 
        return render(request, '/add_money/') 
       return render(request, 'user_profile.html',{'user': user, 'wallet': user.userprofile.wallet_id}) 
      else: 
       return render(request, 'registration/login.html', {'error': 'User is not active'}) 
     else: 
      return render(request, 'registration/login.html', {'error': 'User does not exist'}) 
    else: 
     return render(request,'registration/login.html') 

// Войти шаблон

{% if next %} 
     <form action="/login/?next={{next}}" method="post"> 
      <input type="hidden" name="next" value={{ next }}> 
    {%else%} 
     <form action="/login/" method="post" > 
    {% endif %} 
      USERNAME <input type="text" name="username"> 
      PASSWORD <input type="password" name="password"> 
      <input type="submit"> 
      <input type="hidden" name="next"> 
      {% csrf_token %} 
     </form> 

// add_money шаблон

<form action="user_profile.html" method="post"> 
     Amount:<input type="number" name="amount"> 
     <input type="submit" value="Submit"> 
     <button type="button" name="cancel">Cancel</button> 
    </form> 

ответ

1

Я не уверен, что ему даже удается попасть на страницу учетной записи, так как вы используете тег render как смесь render и redirect.

return render(request, '/add_money/') 

Вы должны вернуть ответ перенаправления обратно к следующему URL вместо

return HttpResponseRedirect(request.GET['next']) 

Кроме того, вы пропусканием next в шаблон Логин , а не URL

if not request.user.is_authenticated(): 
     return render(request, 'registration/login.html', {"next": '/add_money/'}) 

Вы должны перенаправить на страницу входа здесь а также с рядом в качестве параметра GET

return HttpResponseRedirect('/login/?next={}'.format('/add_money/') 

Вы должны также изучить, используя предоставленный URL методы реверсивного вместо жесткого кодирования URLs


Вы должны также удалить весь if next в шаблоне и просто пусть действие входа будет по умолчанию для страницы

{% if next %} 
    <form action="/login/?next={{next}}" method="post"> 
     <input type="hidden" name="next" value={{ next }}> 
{%else%} 
    <form action="/login/" method="post" > 
{% endif %} 

должно быть

<form method="post" > 
+0

я сделал все изменения до сих пор то же самое происходит –

+0

@RavinKohli - Я просто понял, что на самом деле кое-что здесь не так ... вам нужно исправить ваш шаблон также, это будет по крайней мере, получить его чтобы перейти к правильному представлению, но тогда в этой точке зрения также необходимы исправления, выходящие за рамки этого вопроса – Sayse