![](/img/trans.png)
[英]How do I show one page to logged-in user and another to a not-logged in user with 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.py
的django.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.