Ανακατεύθυνση μετά την είσοδο με το Django

ψήφοι
1

Έχω ένα σετ σύνδεσης-σελίδα ως αρχική σελίδα, localhost / mysite μου. Μπορώ να συνδεθείτε και με επιτυχία να κατευθυνθούν προς localhost / mysite / κύρια σελίδα.

Το θέμα είναι ότι μπορώ να παρακάμψει την είσοδο απλά εισάγοντας απλώς τη διαδρομή στο URL, για παράδειγμα? Θα μεταβείτε στην αρχική σελίδα, όπου η σύνδεση-μορφή είναι, τότε απλά προσθέστε / κύρια σελίδα για να localhost / mysite / που με επιτυχία φορτία localhost / mysite / κύρια σελίδα.

Όπως μπορείτε να φανταστείτε, αυτό δεν είναι μεγάλη. Ξέρει κανείς τι έκανα λάθος εδώ;

Η θέα μου

def index(request):
    if request.method == POST:
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                messages.info(request, OK)
                return redirect('/mysite/mainpage')
            else:
                messages.error(request, NOT OK)

    form = AuthenticationForm()
    return render(request, 'mysite/login.html', {form:form})

urls.py μου

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^mainpage/$', views.main),
]
Δημοσιεύθηκε 14/02/2020 στις 00:03
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Μπορείτε να χρησιμοποιήσετε το @login_requiredδιακοσμητή [Django-doc] σε σας mainάποψη. Αυτό θα ανακατευθύνει στο σύνολο διαδρομή από την LOGIN_URLρύθμιση [Django-doc] για να συνδεθείτε στο χρήστη:

# app/views.py

from django.contrib.auth.decorators import login_required

def index(request):
    # …

@login_required
def main(request):
    # …

και το settings.py:

# settings.py

# …
LOGIN_URL = 'index'
# …

EDIT : Μπορείτε να παραλείψετε την ?next=παράμετρο ερωτήματος, ορίζοντας την redirect_field_name=…παράμετρο για να None:

@login_required(redirect_field_name=None)
def main(request):
    # …
Απαντήθηκε 14/02/2020 στις 00:08
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more