2011-11-03 14 views
16

He implementado un sistema de registro/inicio de sesión/autenticación usando this Django guide.¿Cómo iniciar sesión en el usuario de la sesión en Django?

Pero, ¿cómo podría acceder a la información de un usuario desde mi punto de vista para poder enviar la información del usuario a un archivo de plantilla?

Quiero poder acceder a la identificación de un usuario para poder enviar un formulario con la ID del usuario adjunta al formulario.

Respuesta

5

Este:

def view(request): 
    if request.user.is_authenticated(): 
     user = request.user 
     # do something with user 
42

En caso de que alguien quiere extraer realmente una ID de usuario de un objeto Session real (por la razón que sea - lo hice!), He aquí cómo:

from django.contrib.sessions.models import Session 
from django.contrib.auth.models import User 

session_key = '8cae76c505f15432b48c8292a7dd0e54' 

session = Session.objects.get(session_key=session_key) 
session_data = session.get_decoded() 
print session_data 
uid = session_data.get('_auth_user_id') 
user = User.objects.get(id=uid) 

crédito debe ir a Scott Barnham

+0

Genial, esto podría ahorrar hasta 1 consulta: 'request.session.get ('_ auth_user_id')', en lugar de 'request.user.id', pero parece que' Solicitud Middleware' o 'RequestContext' realmente hacen una consulta para recuperar el usuario de autenticación, por lo que no es un ahorro real en algunos casos. –

+0

¿cuándo se adjunta '_auth_user_id' al objeto' Session' mientras se crea una 'Sesión' nueva? –

0

En caso hwjp solución no funciona para usted ("datos está dañado"), aquí es otra solución:

import base64 
import hashlib 
import hmac 
import json 

def session_utoken(msg, secret_key, class_name='SessionStore'): 
    key_salt = "django.contrib.sessions" + class_name 
    sha1 = hashlib.sha1((key_salt + secret_key).encode('utf-8')).digest() 
    utoken = hmac.new(sha1, msg=msg, digestmod=hashlib.sha1).hexdigest() 
    return utoken 


def decode(session_data, secret_key, class_name='SessionStore'): 
    encoded_data = base64.b64decode(session_data) 
    utoken, pickled = encoded_data.split(b':', 1) 
    expected_utoken = session_utoken(pickled, secret_key, class_name) 
    if utoken.decode() != expected_utoken: 
     raise BaseException('Session data corrupted "%s" != "%s"', 
          utoken.decode(), 
          expected_utoken) 
    return json.loads(pickled.decode('utf-8')) 

s = Session.objects.get(session_key=session_key) 
decode(s.session_data, 'YOUR_SECRET_KEY')) 

crédito a: http://joelinoff.com/blog/?p=920

Cuestiones relacionadas