συμπεριλαμβανομένης πάντα το χρήστη στο πλαίσιο πρότυπο Django

ψήφοι
27

Εργάζομαι σε ένα μικρό χώρο intranet για μια μικρή εταιρεία, όπου ο χρήστης θα πρέπει να είναι σε θέση να δημοσιεύσετε. Έχω φανταστεί ένα πολύ απλό μηχανισμό ελέγχου ταυτότητας, όπου οι άνθρωποι εισέρχονται μόνο τη διεύθυνση ηλεκτρονικού ταχυδρομείου τους, και αποστέλλεται ένα μοναδικό url σύνδεσης, που θέτει ένα cookie που θα τους εντοπίζουν πάντα για τις μελλοντικές αιτήσεις.

Στη ρύθμιση πρότυπο μου, έχω base.html, και οι άλλες σελίδες επέκταση αυτή. Θέλω να δείξω συνδεθεί στο σύστημα ή εγγραφείτε κουμπί στο base.html, αλλά πώς μπορώ να διασφαλίσω ότι οι απαραίτητες μεταβλητές είναι πάντα ένα μέρος του πλαισίου; Φαίνεται ότι κάθε άποψη ακριβώς ορίζει το πλαίσιο, όπως τους αρέσει, και δεν υπάρχει καμία παγκόσμιου πληθυσμού πλαίσιο. Είναι ένας τρόπος για να γίνει αυτό χωρίς να περιλαμβάνεται το χρήστη σε κάθε δημιουργία πλαισίου εκεί;

Ή θα πρέπει να κάνω τη δική μου προσαρμοσμένες συντομεύσεις για να ρυθμίσετε το κείμενο σωστά;

Δημοσιεύθηκε 03/09/2008 στις 13:22
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
2

Εάν μπορείτε να συνδέσετε ταυτότητας σας στο σύστημα ελέγχου ταυτότητας Django θα είστε σε θέση να χρησιμοποιήσετε request.user.

Νομίζω ότι αυτό πρέπει να είναι μόνο μια περίπτωση καλώντας authenticate()και login()με βάση τα περιεχόμενα των Cookie σας.

Επεξεργασία: @Staale - Χρησιμοποιώ πάντα το locals()κόλπο για το πλαίσιο μου, ώστε όλα τα πρότυπά μου μπορεί να δει requestκαι τόσο request.user. Αν δεν είστε τότε υποθέτω ότι δεν θα ήταν τόσο απλό.

Απαντήθηκε 03/09/2008 στις 13:28
πηγή χρήστη

ψήφοι
18

Σε μια γενικότερη αίσθηση ότι δεν χρειάζεται να οριστεί ρητά μεταβλητές σε κάθε προβολή, ακούγεται σαν να θέλετε να δείτε να γράφει τα δικά σας επεξεργαστή πλαίσιο .

Από τα έγγραφα:

Ένας επεξεργαστής πλαίσιο έχει ένα πολύ απλό interface: Είναι απλά μια λειτουργία Python που παίρνει ένα επιχείρημα, ένα αντικείμενο HttpRequest, και επιστρέφει ένα λεξικό που παίρνει προστεθεί στο πλαίσιο πρότυπο. Κάθε επεξεργαστής πλαίσιο πρέπει να επιστρέψει ένα λεξικό.

Απαντήθηκε 03/09/2008 στις 13:31
πηγή χρήστη

ψήφοι
2

@Dave Για να χρησιμοποιήσετε `user`.`username` σε πρότυπα μου, θα πρέπει στη συνέχεια να χρησιμοποιήσετε RequestContext και όχι απλώς ένα κανονικό χάρτη / hash: http://www.djangoproject.com/documentation/templates_python/#subclassing-context- RequestContext

Έτσι υποθέτω ότι δεν υπάρχουν globals ότι οι έλεγχοι κινητήρα πρότυπο.

Αλλά η RequestContext έχει κάποια prepopulate τάξεις που μπορώ να εξετάσει για να λύσει τα προβλήματά μου. Ευχαριστώ.

Απαντήθηκε 03/09/2008 στις 13:33
πηγή χρήστη

ψήφοι
33

@Ryan: Τεκμηρίωση για προεπεξεργαστές είναι λίγο μικρό

@Staale: Προσθήκη χρήστη στο πλαίσιο κάθε φορά που κάποιος καλεί το πρότυπο κατά τη γνώμη, ΞΗΡΑ

Λύση είναι να χρησιμοποιήσετε ένα προεπεξεργαστή

Α : Στις ρυθμίσεις σας προσθέσουν

TEMPLATE_CONTEXT_PROCESSORS = (
    'myapp.processor_file_name.user',
)

Β : Σε MyApp / processor_file_name.py ένθετο

def user(request):
    if hasattr(request, 'user'):
        return {'user':request.user }
    return {}

Από τώρα και στο εξής θα είστε σε θέση να χρησιμοποιήσετε τις λειτουργίες αντικείμενο χρήστη σε πρότυπά σας.

` user`.`get_full_name `
Απαντήθηκε 06/11/2008 στις 17:05
πηγή χρήστη

ψήφοι
43

Δεν υπάρχει καμία ανάγκη να γράψω ένα επεξεργαστή πλαίσιο για το αντικείμενο χρήστη, αν έχετε ήδη το "django.core.context_processors.auth"στο και αν χρησιμοποιείτε κατά την άποψή σας.TEMPLATE_CONTEXT_PROCESSORS RequestContext

αν χρησιμοποιείτε Django 1.4 ή πιο πρόσφατη τη μονάδα έχει μετακινηθεί σε django.contrib.auth.context_processors.auth

Απαντήθηκε 30/06/2009 στις 17:14
πηγή χρήστη

ψήφοι
1

, Κάνοντας τα παρακάτω βήματα, βεβαιωθείτε του δυνατού, από προεπιλογή έχετε προσθέσει το πλαίσιο «django.contrib.auth.context_processors.auth» στις ρυθμίσεις σας. Από προεπιλογή της προστίθενται settings.py, τόσο του εμφάνιση, όπως αυτή

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.auth',)

Και μπορείτε να έχετε πρόσβαση αντικείμενο χρήστη όπως αυτό,

{% if user.is_authenticated %}
<p>Welcome, ` user`.`username `. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

Για περισσότερες πληροφορίες, ανατρέξτε εδώ http://docs.djangoproject.com/en/1.2/topics/auth/#authentication-data-in-templates

Απαντήθηκε 27/01/2011 στις 12:15
πηγή χρήστη

ψήφοι
3

Οι συμβουλές είναι σε κάθε απάντηση, αλλά και πάλι, από το «μηδέν», για αρχάριους:

τα στοιχεία ταυτότητας είναι σε πρότυπα (σχεδόν) εξ ορισμού - με ένα μικρό τέχνασμα:

στο views.py:

from django.template import RequestContext
...
def index(request):
    return render_to_response('index.html', 
                              {'var': 'value'},
                              context_instance=RequestContext(request))

στο index.html:

...
Hi, ` user`.`username `
var: ` value `
... 

Από εδώ: https://docs.djangoproject.com/en/1.4/topics/auth/#authentication-data-in-templates

Αυτή η μεταβλητή πλαίσιο πρότυπο δεν είναι διαθέσιμη εάν ένα RequestContext δεν χρησιμοποιείται.

Απαντήθηκε 09/08/2012 στις 08:28
πηγή χρήστη

ψήφοι
0

Χρήση context_processors. https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-TEMPLATES-OPTIONS

settings.py

'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
            'myapp.functions.test'
        ],
},

MyApp / functions.py

def test(request):
    return {'misc': 'misc'}
Απαντήθηκε 03/11/2019 στις 22:10
πηγή χρήστη

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