2016-04-11 21 views
0

Ich folgte http://blog.narenarya.in/right-way-django-authentication.html, um eine Benutzerauthentifizierung in meinem Django-Projekt hinzuzufügen, aber wenn ich es starte und gehe zu http://127.0.0.1:8000/log zeigt es Seite nicht gefunden404! noch die anderen Anwendungen arbeiten normalerweise newsite/settings.pySeite nicht gefunden 404 Django?

import os 

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

SECRET_KEY = '[email protected]+(lwis6$1e73$&f3xzk##qfs%$zv#=5n^st+05)zk%*@[email protected]' 

DEBUG = True 

ALLOWED_HOSTS = [] 

INSTALLED_APPS = [ 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'aps', 
'mail', 
'log', 
] 

MIDDLEWARE_CLASSES = [ 
'django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

ROOT_URLCONF = 'newsite.urls' 

TEMPLATES = [ 
{ 
    'BACKEND': 'django.template.backends.django.DjangoTemplates', 
    'DIRS': ['templates'], 
    'APP_DIRS': True, 
    'OPTIONS': { 
     'context_processors': [ 
      'django.template.context_processors.debug', 
      'django.template.context_processors.request', 
      'django.contrib.auth.context_processors.auth', 
      'django.contrib.messages.context_processors.messages', 
     ], 
    }, 
}, 
] 

WSGI_APPLICATION = 'newsite.wsgi.application' 
MEDIA_URL = '/media/' 
MEDIA_ROOT = BASE_DIR + '/media/' 

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': '/home/hanou/Bureau/malouka/db.sqlite3', 
    'USER': 'root', 
    'PASSWORD': 'MOTDEPASSE', 
    'HOST': '127.0.0.1',      
    'PORT': '', 
} 
} 

AUTH_PASSWORD_VALIDATORS = [ 
{ 
    'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
}, 
{ 
    'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
}, 
{ 
    'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
}, 
{ 
    'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
}, 
] 

LANGUAGE_CODE = 'fr-fr' 

TIME_ZONE = 'Europe/Paris' 

USE_I18N = True 

USE_L10N = True 

USE_TZ = True 

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
BASE_DIR + '/static/', 
) 
EMAIL_HOST='smtp.gmail.com' 
EMAIL_PORT=587 
EMAIL_HOST_USER='*********@gmail.com' 
EMAIL_HOST_PASSWORD='*********' 
EMAIL_USE_TLS = True 
LOGIN_REDIRECT_URL = '/' 

newsite/urls.py

from django.conf.urls import include, url 
from django.contrib import admin 
from aps import views 
from mail import views 
from log import views 
from django.contrib.auth import views 
from log.forms import LoginForm 

urlpatterns = [ 
url(r'^admin/', admin.site.urls),  
url(r'^aps/', include('aps.urls')), 
url(r'^mail/', include('mail.urls')), 
url(r'^log/', include('log.urls')), 
url(r'^login/$',views.login, {'template_name': 'login.html', 'authentication_form': LoginForm}), 
url(r'^logout/$', views.logout, {'next_page': '/login'}), 
] 

newsite/log/Ansichten

from django.shortcuts import render 
from django.contrib.auth.decorators import login_required 

@login_required(login_url="login/") 
def home(request): 
    return render(request,"home.html") 

newsite/log/urls.py

from django.conf.urls import url 
from . import views 

urlpatterns = [ 
    url(r'^$', views.home, name='home'), 
] 
+1

Können Sie uns log.urls zeigen? – Francesco

+0

Wie wäre es mit 'http: //127.0.0.1: 8000/log /'? Auch, was ist in 'log/urls.py'? – alecxe

+0

'http: //127.0.0.1: 8000/log /' (beachten Sie den Schrägstrich am Ende und in der URL-Konfiguration) –

Antwort

1

Ihre login_url fehlt ein führender Schrägstrich. Das bedeutet, dass Sie von /log/ zu /log/login/ umgeleitet wird, die wird eine geben 404.

Sie können das Problem beheben, indem sie es auf sich ändernde:

@login_required(login_url="/login/") 
def home(request): 

Es funktioniert im Tutorial, weil sie

url(r'', include('log.urls')), 
verwendet

statt

url(r'^log/', include('log.urls')), 

, jedoch woul I Ich empfehle nicht, relative URLs wie diese zu verwenden. Es ist viel besser, die absolute URL mit dem Schrägstrich oder noch besser mit reverse the url zu verwenden, statt sie hart zu codieren.

Zur Fixierung des NoReverseMatch Fehlers auf der Anmeldeseite den Formular-Tag der Vorlage ändern:

<form method="post" action="{% url 'login' %}"> 

und den Namen auf die Login-URL-Muster hinzufügen.

url(r'^login/$',views.login, {'template_name': 'login.html', 'authentication_form': LoginForm}, name='login'), 

ich auch LOGIN_URL, um Ihre Einstellungen hinzufügen würde,

LOGIN_URL = 'login' 

und dann werden Sie es nicht jedes Mal, wenn login_required verwenden angeben.

@login_required 
def home(request): 
+0

oh ich habe es nicht beachtet. Aber ich habe den Server gewechselt geht automatisch auf http://127.0.0.1:8000/login/?next=/log/ und als Ergebnis sagt NoReverseMatch um/login/ – 2mesfe

+0

Das ist ein separates Problem in der Login-Vorlage. Siehe meine aktualisierte Antwort. – Alasdair

+0

vielen dank !! Ich habe es jetzt ausprobiert und es hat funktioniert :) – 2mesfe

Verwandte Themen