Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django用户传递_Python_Django_Web Applications - Fatal编程技术网

Python Django用户传递

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

我是python和django的新手,我必须构建一个web应用程序。假设在用户登录后,他会被重定向到另一个页面,在那里他会选择一个项目进行工作。问题是,当他选择一个项目时,成功登录后,我从登录视图中得到了“无效登录凭据”错误。我以为我们已经过去了。。。 以下是视图文件:


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请求应该有副作用,除非用户再次显式发送数据,否则您真的不希望这样。