Python Django用户传递
我是python和django的新手,我必须构建一个web应用程序。假设在用户登录后,他会被重定向到另一个页面,在那里他会选择一个项目进行工作。问题是,当他选择一个项目时,成功登录后,我从登录视图中得到了“无效登录凭据”错误。我以为我们已经过去了。。。 以下是视图文件:Python Django用户传递,python,django,web-applications,Python,Django,Web Applications,我是python和django的新手,我必须构建一个web应用程序。假设在用户登录后,他会被重定向到另一个页面,在那里他会选择一个项目进行工作。问题是,当他选择一个项目时,成功登录后,我从登录视图中得到了“无效登录凭据”错误。我以为我们已经过去了。。。 以下是视图文件: def login(request): context=RequestContext(request) if request.method=='POST': username=request.P
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 (???????)")
这是项目的URL:
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模式使用正则表达式并返回第一个匹配项。在正则表达式中,
^
表示字符串的开始,$
表示字符串的结束。如果两者都不存在,则该模式可以在字符串中的任何位置找到,并且仍然匹配。现在看看你的第一个模式
url(r'', 'views.login'),
此模式可以匹配字符串中的任何位置,如果字符串“包含”一个空字符串,即您能想到的每一个字符串,则它会匹配。所有请求都将定向到您的视图。登录视图
要修复它,必须使用模式r'^$'
。这将匹配url路径的开始和结束,中间没有任何内容,即只有www.example.com/
(第一个斜杠总是被截断)。然后,您可以通过/logout/
和/main/
访问其他视图 显然,如果您需要更多信息或其他文件,我很乐意回复。您熟悉Django的通用视图吗?使用这些可能是最快捷、最简单的方法,而不是编写自己的视图。ListView
通用视图应该包含项目列表,而django.contrib.auth
下的login
视图应该可以进行身份验证。还有一个注销视图。基于类的视图和Django的泛型视图非常出色,但很难掌握。这个网站是Django文档中缺少的一点,非常有用:包含基于类的视图的简单介绍。此外,在POST请求后总是重定向是一个很好的做法(在web上的任何地方,而不仅仅是Django)。这样可以防止在用户重新加载页面时意外发送两次数据。因为POST请求应该有副作用,除非用户再次显式发送数据,否则您真的不希望这样。