如何在 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)
我正在使用 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)