簡體   English   中英

在 Django 中,我如何知道當前登錄的用戶?

[英]In Django, how do I know the currently logged-in user?

在 Django 中,我如何知道當前登錄的用戶?

你在哪里需要了解用戶?

視圖中 ,用戶在請求中作為request.user

有關模板中的用戶處理,請參見此處

如果要保存模型實例的創建者或編輯者,可以執行以下操作:

model.py

class Article(models.Model):
    created_by = models.ForeignKey(User, related_name='created_by')
    created_on = models.DateTimeField(auto_now_add = True)
    edited_by  = models.ForeignKey(User, related_name='edited_by')
    edited_on  = models.DateTimeField(auto_now = True)
    published  = models.BooleanField(default=None)

admin.py

class ArticleAdmin(admin.ModelAdmin):
    fields= ('title','slug','text','category','published')
    inlines = [ImagesInline]
    def save_model(self, request, obj, form, change): 
        instance = form.save(commit=False)
        if not hasattr(instance,'created_by'):
            instance.created_by = request.user
        instance.edited_by = request.user
        instance.save()
        form.save_m2m()
        return instance

    def save_formset(self, request, form, formset, change): 

        def set_user(instance):
            if not instance.created_by:
                instance.created_by = request.user
            instance.edited_by = request.user
            instance.save()

        if formset.model == Article:
            instances = formset.save(commit=False)
            map(set_user, instances)
            formset.save_m2m()
            return instances
        else:
            return formset.save()

我在互聯網上找到了這個,但我不知道在哪里

擴展@ vikingosegundo的答案,如果你想獲得Models中的用戶名,我找到了一種涉及聲明MiddleWare的方法。 在您的應用內創建一個名為get_username.py的文件,其中包含以下內容:

from threading import current_thread

_requests = {}

def get_username():
    t = current_thread()
    if t not in _requests:
         return None
    return _requests[t]

class RequestMiddleware(object):
    def process_request(self, request):
        _requests[current_thread()] = request

編輯您的settings.py並將其添加到MIDDLEWARE_CLASSES

MIDDLEWARE_CLASSES = (
    ...
    'yourapp.get_username.RequestMiddleware',
)

現在,在save()方法中,您可以獲得如下的當前用戶名:

from get_username import get_username

...

def save(self, *args, **kwargs):
    req = get_username()
    print "Your username is: %s" % (req.user)

Django 1.9.6默認項目在默認模板中有user

所以你可以直接寫這樣的東西:

{% if user.is_authenticated %}
    {{ user.username }}
{% else %}
    Not logged in.
{% endif %}

此功能由settings.pydjango.contrib.auth.context_processors.auth上下文處理器提供。

專用模板問題: 如何在Django模板中訪問用戶配置文件?

您只需要請求當前用戶:

 def foo():
         current_user = request.user
         return print(current_user)
 foo()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM