擅长:python、mysql、java
<p>我还没有足够的声誉来编辑或回复(我想),但我发现,虽然ionaut的解决方案在简单的情况下有效,但对我来说,一个更健壮的解决方案是使用会话变量。这样,即使AJAX请求也能得到正确的服务,而无需修改请求URL以包含GET模拟参数。</p>
<pre><code>class ImpersonateMiddleware(object):
def process_request(self, request):
if request.user.is_superuser and "__impersonate" in request.GET:
request.session['impersonate_id'] = int(request.GET["__impersonate"])
elif "__unimpersonate" in request.GET:
del request.session['impersonate_id']
if request.user.is_superuser and 'impersonate_id' in request.session:
request.user = User.objects.get(id=request.session['impersonate_id'])
</code></pre>
<p>用法:</p>
<pre><code>log in: http://localhost/?__impersonate=[USERID]
log out (back to admin): http://localhost/?__unimpersonate=True
</code></pre>