在Django中,我如何知道当前登录的用户?
在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()
我在互联网上找到了这个,但我不记得具体在哪里了。
set_user
并通过instances
进行映射时它对我不起作用。它只是没有将新模型保存到数据库中。我不得不使用for instance in instances:
,并在循环内部使用set_user
体,这样就完美地解决了问题。此外,我认为if formset.model == Article
应该是if formset.model == Image
。感谢@vikingosegundo的答案。我已经试图解决这个问题好几天了! - ekauffmann在扩展@vikingosegundo的答案时,如果您想要在模型内获取用户名,我找到了一种涉及声明中间件的方法。在应用程序中创建一个名为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)
Models
对象中的get_username()
吗?如果是这样的话,有一个关于此的规范文档链接会很好。在1.9.5中是否有更新的本地Django函数可以完成相同的操作? - alvasDjango 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()