Django 用户传递
Django user passing
我是 python 和 django 的新手,我必须构建一个网络应用程序。假设在用户登录后,他被重定向到另一个页面,他可以在该页面上选择要处理的项目。问题是,当他选择一个项目时成功登录后,我从登录视图中收到 "Invalid login credentials" 错误。我以为我们已经过去了...
这是视图文件:
def login(request):
context=RequestContext(request)
if request.method=='POST':
username=request.POST.get('username')
password=request.POST.get('password')
user=auth.authenticate(username=username, password=password)
if user:
if user.is_active:
auth.login(request,user)
return render_to_response('ProjectLogging/main.html',{'user':user, 'project_list':Project.objects.all()}, context)
else:
return HttpResponse("Your account is disabled.")
else:
return HttpResponse("Invalid login credentials.")
return render_to_response('ProjectLogging/login.html',context)
@login_required
def logout(request, user):
context=RequestContext(request)
auth.logout(request, user)
return render_to_response('ProjectLogging/login.html',{'user':None},context)
@login_required
def main(request, user):
context = RequestContext(request)
user=user
if request.method=='POST':
project=request.POST['project']
if project:
change=Change(user=user, project=project,starttime=datetime.datetime.now())
change.save()
else:
HttpResponse("Choose a valid project!")
else:
HttpResponse("Choose a POST method (???????)")
这是项目的网址:
urlpatterns=patterns('',
url(r'', 'views.login'),
url(r'^login/$', 'views.login'),
url(r'^logout/$', 'views.logout'),
url(r'^main/$','views.main'),
)
另外,我还没有掌握视图、url 和 html 文件在 django 中是如何协作的,所以如果你能推荐一个网站来研究,我将不胜感激。最后,注销不起作用,所以如果您对此有任何想法,我将更加感激。谢谢。
Url 模式使用正则表达式和 return 第一个匹配项。在正则表达式中,^
表示字符串的开始,$
表示结束。如果两者都不存在,则可以在字符串中的任何位置找到该模式,并且它仍然会匹配。现在看看你的第一个模式。
url(r'', 'views.login'),
这个模式可以匹配字符串中的任何地方,如果字符串 "contains" 是空字符串,即 每个 你能想到的单个字符串,它就会匹配。所有请求都将定向到您的 views.login
视图。
要修复它,您必须使用模式 r'^$'
。这将匹配 url 路径的开始和结束,中间没有任何内容,即只有 www.example.com/
(第一个斜杠总是被切掉)。然后您可以在 /logout/
和 /main/
访问您的其他视图。
我是 python 和 django 的新手,我必须构建一个网络应用程序。假设在用户登录后,他被重定向到另一个页面,他可以在该页面上选择要处理的项目。问题是,当他选择一个项目时成功登录后,我从登录视图中收到 "Invalid login credentials" 错误。我以为我们已经过去了... 这是视图文件:
def login(request):
context=RequestContext(request)
if request.method=='POST':
username=request.POST.get('username')
password=request.POST.get('password')
user=auth.authenticate(username=username, password=password)
if user:
if user.is_active:
auth.login(request,user)
return render_to_response('ProjectLogging/main.html',{'user':user, 'project_list':Project.objects.all()}, context)
else:
return HttpResponse("Your account is disabled.")
else:
return HttpResponse("Invalid login credentials.")
return render_to_response('ProjectLogging/login.html',context)
@login_required
def logout(request, user):
context=RequestContext(request)
auth.logout(request, user)
return render_to_response('ProjectLogging/login.html',{'user':None},context)
@login_required
def main(request, user):
context = RequestContext(request)
user=user
if request.method=='POST':
project=request.POST['project']
if project:
change=Change(user=user, project=project,starttime=datetime.datetime.now())
change.save()
else:
HttpResponse("Choose a valid project!")
else:
HttpResponse("Choose a POST method (???????)")
这是项目的网址:
urlpatterns=patterns('',
url(r'', 'views.login'),
url(r'^login/$', 'views.login'),
url(r'^logout/$', 'views.logout'),
url(r'^main/$','views.main'),
)
另外,我还没有掌握视图、url 和 html 文件在 django 中是如何协作的,所以如果你能推荐一个网站来研究,我将不胜感激。最后,注销不起作用,所以如果您对此有任何想法,我将更加感激。谢谢。
Url 模式使用正则表达式和 return 第一个匹配项。在正则表达式中,^
表示字符串的开始,$
表示结束。如果两者都不存在,则可以在字符串中的任何位置找到该模式,并且它仍然会匹配。现在看看你的第一个模式。
url(r'', 'views.login'),
这个模式可以匹配字符串中的任何地方,如果字符串 "contains" 是空字符串,即 每个 你能想到的单个字符串,它就会匹配。所有请求都将定向到您的 views.login
视图。
要修复它,您必须使用模式 r'^$'
。这将匹配 url 路径的开始和结束,中间没有任何内容,即只有 www.example.com/
(第一个斜杠总是被切掉)。然后您可以在 /logout/
和 /main/
访问您的其他视图。