Cum să vă conectați utilizatorul în Django?

În prezent, lucrez la un proiect Django pentru a mă familiariza mai mult cu Django. În acest moment încerc să fac două șabloane, una fiind pagina principală cu un link către pagina de conectare, care va autentifica utilizatorul și apoi va reveni la șablon și va afișa conținut suplimentar (va fi gestionat prin nginx) și un alt șablon care pot fi accesate numai când sunteți conectat. Din anumite motive, dar nu par să funcționeze sau să spunem că datele de conectare nu funcționează.

Acesta este fișierul views.py:

from django.shortcuts import render_to_response, get_object_or_404, HttpResponse
from django.contrib.auth import *
from django.contrib.auth.decorators import login_required

def index(request):
        return render_to_response('index.html')

@login_required
def main(request):
    return render_to_response('loginrequired.html')

Și acesta este modelul principal:

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<html>
<head>
<title>Django NGINX Test</title>
</head>
<body>

Django NGINX Test




{% if user.is_authenticated %} Log out {{user.username}} {% else %} Log in {% endif %}

 
</body>
</html>

Acesta este șablonul login_required:

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<html>
<head>
<title>Django NGINX Test</title>
</head>
<body>

Django NGINX Test




Welcome {{user.username}}. You're now logged in as required.

{% if user.is_authenticated %} Log out {{user.username}} {% else %} Log in {% endif %}

 
</body>
</html>

Și în fine, dar nu în ultimul rând, șablonul meu de conectare:

<html>
<head>
    <title>User Login</title>
</head>

User Login

{% if form.errors %}
    
Your username and password didn't match. Please try again. {% endif %} <form method="post" action="." > {% csrf_token %}
{{ form.username }}
{{ form.password }} <input type="hidden" name="next" value="/" /> <input type="submit" value="login" /> </form> </body> </html>

I would appreciate any help. I have already studied the Django Tutorial for this, but I didn't get it.

0
Ei bine, când încerc să accesez șablonul login_required, acesta mi-a arătat-o ​​fără a cere o autentificare. Nu sunt sigur dacă sunt deja conectat, dar nu îmi afișează numele de utilizator sau trebuie să trec asta într-un fel?
adăugat autor masterlampe, sursa
În ce mod nu funcționează? Ce se întâmplă atunci când încercați să mergeți la pagina de autentificare necesară?
adăugat autor murgatroid99, sursa
care este eroarea?
adăugat autor sumit, sursa

2 răspunsuri

Utilizatorul este conectat, dar nu îl transmiteți șablonului, astfel încât acesta nu va afișa detaliile utilizatorului. Asigurați-vă că redarea șabloanelor dvs. cu un RequestContext sau folosiți noua comandă render în loc de render_to_response .

0
adăugat

Trebuie să vă asigurați că includeți următorul middleware în settings.py :

  • SessionMiddleware
  • AuthenticationMiddleware

Pentru a vă asigura că o variabilă de context numită user este disponibilă pentru șabloanele dvs., trebuie să vă asigurați că procesorul de context django.contrib.auth.context_processors.auth se află în codul dvs. settings.py .

Mai multe informații pot fi găsite în subiect de autor Djano .

0
adăugat
+1 pentru motivele @ menționate anterior și pentru a adăuga că trebuie să utilizați render pentru a vă asigura că RequestContext este inclus.
adăugat autor Burhan Khalid, sursa
Înlocuind acest răspuns: faceți lucruri mai grele decât trebuie să fie dacă nu utilizați formularele și metodele listate în linkul de mai sus.
adăugat autor Tom, sursa