2015-03-17 4 views
1

Я новичок в python и django, и мне нужно создать веб-приложение. Предполагается, что после входа пользователя в систему он перенаправляется на другую страницу, где он выбирает проект для работы. Проблема заключается в том, что ПОСЛЕ успешной регистрации, когда он выбирает проект, я получаю ошибку «Недействительные учетные данные» из окна входа в систему. Я думал, мы это в прошлом ... Вот файл просмотров:Django user pass


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 (???????)") 

Это является URLs проекта:

urlpatterns=patterns('', 
    url(r'', 'views.login'), 
    url(r'^login/$', 'views.login'), 
    url(r'^logout/$', 'views.logout'), 
    url(r'^main/$','views.main'), 

)

Кроме того, я не осилил как представления, URL-адреса и html-файлы сотрудничают в django, поэтому, если вы можете предложить сайт для изучения, я был бы благодарен. Наконец, выход из системы не работает, поэтому, если у вас есть какие-либо идеи, я был бы еще более благодарен. Спасибо.

+0

Очевидно, что если вам требуется дополнительная информация или другие файлы, я был бы рад ответить. –

+1

Вы знакомы с общим для Django видом? С их помощью, вероятно, самый быстрый и простой способ перейти сюда, а не писать свои собственные взгляды. Общий вид «ListView» должен охватывать список проектов, а представление 'login' под' django.contrib.auth' должно быть хорошо для аутентификации. Также есть выход из системы. –

+1

Взгляды на основе классов и общие представления Django являются блестящими, но труднодоступными. Этот сайт является своего рода недостающим битом в документации Django и очень полезен: http://ccbv.co.uk/ – ecstaticpeon

ответ

2

Урны используют регулярные выражения и возвращают первое совпадение. В регулярном выражении ^ обозначает начало строки и конец $. Если ни один из них не присутствует, шаблон можно найти в любом месте строки, и он все равно будет соответствовать. Теперь взглянем на ваш первый шаблон.

url(r'', 'views.login'), 

Эта модель может соответствовать в любом месте строки, и это соответствует, если строка «содержит» пустая строка, то есть каждый одной строки вы можете думать. Все запросы будут направлены на ваш вид views.login.

Чтобы исправить это, вы должны использовать рисунок r'^$'. Это будет соответствовать началу и концу пути URL-адреса, между которыми нет ничего, т. Е. Только www.example.com/ (первая косая черта всегда прерывается). Затем вы можете добраться до других видов на /logout/ и /main/.

+2

Еще одна вещь, это хорошая практика (везде в Интернете, а не только в Django) всегда перенаправлять после запроса POST. Это предотвращает случайное отправление данных дважды, если пользователь перезагружает страницу. Поскольку POST-запрос должен иметь побочные эффекты, вы действительно не хотите этого, если пользователь явно не отправит данные снова. – knbk