在Django中,我如何知道当前login的用户?
在Django中,我如何知道当前login的用户?
你需要知道用户在哪里?
在视图中 ,用户在请求中被提供为request.user
。
有关模板中的用户处理,请参阅此处
如果要保存模型实例的创build者或编辑者,可以执行如下操作:
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的答案,如果你想在模型中获得用户名,我find了一个涉及到声明一个MiddleWare的方法。 在你的应用程序中创build一个名为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 %}
这个function由settings.py
的django.contrib.auth.context_processors.auth
上下文处理器提供。
专用模板问题: 如何访问Django模板中的用户configuration文件?