如何在 Django 1.6 的多个应用程序中使用相同的身份验证用户配置文件

How to use the same auth userprofile in multiple apps in Django 1.6

我正在使用 Django 1.6 身份验证模块登录用户,我有一个由两个应用程序组成的项目,我想通过在第二个应用程序的视图中调用 request.user.username 来使用同一个用户。也就是说,在我的第一个应用程序模板 login.html 中,这有效 {% if user.is_authenticated %} 但 {% if user.is_authenticated %} 在第二个应用程序模板中不起作用,我是想知道如何在第二个应用程序的函数中获取它?我试图用 user=request.user.username 获取它,但它不起作用。

在我的第一个应用中:

models.py

from django.contrib.auth.models import User
class Userprofile(models.Model):

    user = models.OneToOneField(User)
    title = models.CharField(max_length = 70)
    def __unicode__(self):
        return self.title

class OneUser(models.Model):

    Firstname = models.CharField(max_length = 35)
    Lastname = models.CharField(max_length = 35)
    Email = models.EmailField()
    belongsTo = models.ForeignKey(Userprofile, related_name='pcslabeler_userprofile')
    def __unicode__(self):
        return self.Firstname

在views.py

def LoginIndex(request):
    c = {}
    c.update(csrf(request))
    return render(request,"login.html", c)

    #logins = Login.objects.all()


def one_login(request):
    username = request.POST.get('username', '')
    password = request.POST.get('password', '')
    user = auth.authenticate(username=username, password=password)# user firstname lastname


    if user is not None:
        auth.login(request, user)
        return HttpResponseRedirect('/loggedin')# topic
    else:
        return HttpResponseRedirect('/invalid')




def loggedin(request):
    return render(request,"loggedin.html",{'full_name': request.user.username})

def invalid_login(request):
    return render(request,"invalid_login.html")

def logout(request):
    auth.logout(request)
    return render(request,"logout.html")

在第二个应用程序视图中,我试图在函数 postoneEval:

中使用它
def EvalIndex(request):
    evals = Evaluation.objects.all()

    return render_to_response("evaluation_index.html",{"evals":evals})

def one_evaluation(request, postID):

    one_eval = Evaluation.objects.get(id=postID)
    one_part = Participation.objects.get(id=postID)


    if request.method == 'POST':
        form = EvalForm(request.POST)
        form2 = ParticipationForm(request.POST)
        if form.is_valid() and form2.is_valid():
            postoneEval(request, one_eval)
            postoneParticipant(request, one_part)

    else:
        form = EvalForm()
        form2 = ParticipationForm()


    c = {"one_eval":one_eval,"one_part":one_part, "form":form, "form2":form2}
    c.update(csrf(request))


    return render_to_response("one_evaluation_index.html", c )


def postoneEval(request, one_eval):

    title = request.POST["title"]

    user = request.user.username

    oneEval = OneEvaluation(datetime=datetime.datetime.now(), belongsTo=one_eval, title=title, user=user)

    oneEval.save()

问题出在 render_to_reponse() 调用中。您没有传递 RequesContext 实例,因此上下文处理器不会 运行 用于您的模板。

解决此问题的最简单方法是将 render_to_response() 替换为 render():

return render(request, "evaluation_index.html", {"evals":evals})

和:

return render(request, "one_evaluation_index.html", c)