2016-04-11 33 views
0

Django projemde bir kullanıcı kimlik doğrulaması eklemek için http://blog.narenarya.in/right-way-django-authentication.html'u takip ettim, ancak çalıştırdığımda ve http://127.0.0.1:8000/log'a gittiğimde sayfa bulunamadı404! Diğer uygulamalar hala normal çalışma YeniSite/settings.pySayfa bulunamadı 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 = '/' 

YeniSite/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'}), 
] 

YeniSite/log/incelemeler

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

YeniSite/log/urls.py

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

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

Bize log.urls gösterebilir misiniz? – Francesco

+0

http: //127.0.0.1: 8000/log/'hakkında ne dersiniz? Ayrıca, 'log/urls.py' içinde ne var? – alecxe

+0

'http: //127.0.0.1: 8000/log /' (satırın sonuna ve URL yapılandırmasına dikkat edin) –

cevap

1

login_url'ünüzde bir eğik çizgi eksik. Yani sağlayacak bütün /log/ den /log/login/ yönlendirilecek anlamına gelir 404.

Sen bunu değiştirerek çözebilirsiniz:

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

onlar

url(r'', include('log.urls')), 
kullanılan çünkü öğretici çalışır Ancak bunun yerine

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

ait

, ben woul Bunun gibi göreli URL'ler kullanmanızı önermiyoruz. Mutlak URL'yi eğik çizgi ile kullanmak veya daha da iyisi, daha iyi kodlamak yerine reverse the url'a geçmek daha iyidir.

, giriş sayfasında NoReverseMatch hatayı düzeltmek için şablonun Form etiketini değiştirmek için:

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

ve giriş url desenine adı ekleyin.

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

Ben de ayarlarınıza LOGIN_URL eklersiniz,

LOGIN_URL = 'login' 

ve sonra bunu size login_required kullanmak her zaman belirtmek zorunda kalmazsınız.

@login_required 
def home(request): 
+0

oh Dikkat etmedim. Ama ben değiştirdim sunucu otomatik olarak http://127.0.0.1:8000/login/?next=/log/ ve sonuç olarak NoReverseMatch diyor/login/ – 2mesfe

+0

Bu giriş şablonunda ayrı bir sorun. Güncellenmiş cevabımı görün. – Alasdair

+0

çok teşekkür ederim! Şimdi denedim ve işe yaradı :) – 2mesfe

İlgili konular