How can I match the next = / nextpage / value when I decorate the view with @login_required?

How can I match the value? next = / nextpage /, when do I decorate a view in django with @login_required? It does not work on the "standard path" (in url.py using regex)! Why doesn't it work on the standard path?

in urls.py:

(r'^login/$', 'foo.nb.views.signup'),
#(r'^login/?next=(?P<next>\S{1,250})$', 'foo.nb.views.signup'),

in views.py:

@login_required
def userpage(request):
    return HttpResponse('logged in -> ON USERPAGE')

views.py again:

#def signup(request, next=""): # the login
 def signup(request): # the login
    """ Logs a user in """
    if request.method=="POST" and request.POST['username'] and request.POST['password']:
            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)
                    #return redirect(next) # to sucess page
                     return redirect(request.GET['next']) # to sucess page
                else:
                    pass
                    # Return to disabled account error message
            else:
                # return invalid login error message
                pass
    return render_to_response('NBlogin.html')

view.userpage, , url , /login/? next =/oldpage/, , , , (, ), , ( , )

edit: Django 1.2: ( GET: ) , ...

edit2: request.GET ['next'] :

Key 'next' not found in <QueryDict: {}>

Edit3:

:

def signup(request): # the login
    """ Logs a user in """

    if request.method=="GET":
            try:   
                    next = request.GET['next']
            except:
                    return render_to_response('NBlogin.html')
            return render_to_response('NBlogin.html',{'next' : next})

    if request.method=="POST" and request.POST['username'] and request.POST['password']:
            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)
                    return redirect(request.POST['next']) # to sucess page
                else:
                    pass
                    # Return to disabled account error message
            else:
                # return invalid login error message
                pass

    return render_to_response('NBlogin.html')

, !:

<form action="/login/" method="post">
        <p>Username:<input type="text" name="username"></p>
        <p>Password:<input type="password" name="password">
        <input type="hidden" name="next" value="{{next}}">
        <input type="submit" value="login"></p>
</form>
+2
1

Django , URL, .

, - '?' . .

, :

/login/?next=/nextpage/

Django /login/, , request.GET {'next':'nextpage'}. , , Django-esque, .

:

?next=/nextpage/, , POST. POST- URL-, action.

+1

Source: https://habr.com/ru/post/1768021/


All Articles