Django-profiletools er en Django app, der giver værktøjer til profil modeller i Django.
Installation
Få koden:
pip installere Django-profiletools
Installer middleware og context_processor i dit settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
& Nbsp; ...
& Nbsp; "profiletools.context_processors.fetch_profile«,
)
MIDDLEWARE_CLASSES = (
...
»Profiletools.middleware.LazyProfileMiddleware«,
)
Også i settings.py Indstil AUTH_PROFILE_MODULE på din profil model:
AUTH_PROFILE_MODULE = "profiles.Profile"
Baseret på, at hvis din profil model ligne noget i retning af:
# Profiles.models.Profile.py
fra django.contrib.auth.models import Bruger
fra django.db import- modeller
klasse Profile (models.Model):
& Nbsp; user = models.OneToOneField (Bruger)
& Nbsp; def __unicode __ (selv-):
& Nbsp; tilbagevenden self.user.username
Bemærk: Hvis du ikke bruger profiles.models.Profile, siger members.models.UserProfile gå videre og ændre AUTH_PROFILE_MODULE til "members.UserProfile".
Anvendelse
I dine skabeloner:
{{Request.my_profile}}
I din funktionelle synspunkter:
profil = request.my_profile
I din klasse-baserede visninger:
profil = self.request.my_profile
Ring my_profile så mange gange som du ønsker, det kun belastninger gang. Så hvis du kalder det 100 gange i en visning, er SQL SELECT kun gjort første gang. Hvis der ikke bruger findes så my_profile opkald resultatet er Ingen, som gør det nemmere at håndtere skabeloner, som har behov for at kunne håndtere ikke-godkendte brugere (ligesom om side).
Bemærk: Hvis du bruger members.UserProfile eksempel skal du kalde det ved at bruge request.my_userprofile.
Problemer med Pythons "er" vurdering og "type" indbygget
Hvis du bruger en vurdering før du gør noget andet med my_profile objekt, vil det opføre sig på en lidt uventet måde:
Den vil altid vende tilbage falsk. For eksempel:
>>> Print (request.my_profile er ingen)
False
>>> P = request.user.get_profile ()
>>> Print (request.my_profile er p)
False
Desuden vil den type indbyggede returnere en django.utils.functional.SimpleLazyObject objekt:
>>> Print (type)
Husk, hvad der er placeret i my_profile værdi er ikke en ModelClass instans eller Ingen objekt, men snarere en django.utils.functional.SimpleLazyObject.
Hvordan til at vurdere my_profile objekt
Brug == at evaluere my_profile objekt. Dette tvinger genstand, der skal evalueres, og vil ikke vende tilbage frustrerende falsk-positive.
Inspiration
Den dovne lastning af profiler er inspireret af den temmelig utrolige Noah Kantrowitz
Egenskaber :.
- Lazy lastning af dine bekræftet profil rekord tværs anmodningen objekt levetid. Det betyder i Python kode og skabeloner.
- Navngiv din profil model noget, du ønsker i settings.AUTH_PROFILE_MODULE.
Krav :
- Python
- Django
Kommentarer ikke fundet