2016-04-25 49 views
0

演示/ urls.pyDjango的1.9將不會呈現在鏈接右頁

from django.conf.urls import url, include, patterns 
from django.contrib import admin 

import views 
from . import views 

urlpatterns = patterns('demo.urls', 
    url(r'^admin', admin.site.urls), 
    url(r'^', views.login, name="login"), 
    url(r'^resetpwd', views.resetpwd, name='resetpwd'), 
    url(r'^mechanics/', include('mechanics.urls', namespace="mechanics")), 
) 

力學/ urls.py

import views 

from . import views 

urlpatterns = patterns('mechanics.urls', 
    url(r'^admin', include(admin.site.urls)), 
    url(r'^$', views.login, name="login"), 
    url(r'^resetpwd', views.resetpwd, name='resetpwd'), 
    url(r'^loandelinquency', views.loandelinquency, name='loandelinquency'), 
) 

力學/ views.py

from django.shortcuts import render 
from django.http import HttpResponse 
from django.template import loader 
import cPickle 

def loandelinquency(request): 
    return render(request, 'mechanics/LoanDelinquency.html') 

def login(request): 
    try: 
     users = cPickle.load(open('users.p', 'rb')) 
    except: 
     users = {'[email protected]':'**********'} 
     cPickle.dump(users, open('users.p', 'wb')) 
    if request.method == 'POST': 
     try: 
      users = cPickle.load(open('users.p', 'rb')) 
     except: 
      users = {'[email protected]':'**********'} 
      cPickle.dump(users, open('users.p', 'wb')) 
     user = request.POST.get('user','') 
     pwd = request.POST.get('pwd', '') 
     request.session['user'] = user 
     request.session['pwd'] = pwd 
     try: 
      if user in users: 
       if users[user] == pwd: 
        return render(request, 'mechanics/inside.html') 
       else: 
        wronguser = '' 
        wrongpwd = 'Wrong password.' 
        return render(request, 'mechanics/login.html', {'wrongpwd': wrongpwd, 'wronguser':wronguser}) 
      else: 
       wronguser = 'Wrong username' 
       wrongpwd = '' 
       return render(request, 'mechanics/login.html', {'wrongpwd': wrongpwd, 'wronguser':wronguser}) 
     except: 
      return render(request, 'mechanics/login.html') 
    if request.method == "GET": 
     return render(request, 'mechanics/login.html') 

def resetpwd(request): 
    if request.method == 'GET': 
     return render(request, "resetpwd.html") 

mechanics/templates/mechanics/login.html

<html> 
    <body> 
     <title>Data Science Demo</title> 
      <h1 align="center">Ninja's</h1> 
       <br> 
       <div align="center"><font size=24>Login</font> 
       <br> 
        <form align="center" method="post"> 
         {% csrf_token %} 
         E-mail<br> 
         <input type="text" align="center" name="user"><br> 
         Password<br> 
         <input type="password" align="center" name="pwd"><br> 
         <input type="submit" value="Submit"> 
        {% if wrongpwd %} 
         <br> 
         <font color="red">{{ wrongpwd }}</font><br> 
        {% endif %} 
        {% if wronguser %} 
         <br> 
         <font color="red">{{ wronguser }}</font> 
        {% endif %} 
        </form> 
        <a href="{% url 'mechanics:resetpwd' %}">Reset Password</a> 
       </div> 
    </body> 
</html> 
<style> 

div { 
    position: relative; 
    width: 300px; 
    padding: 25px; 
    border: 25px solid navy; 
    margin: auto; 
    background-color: #b0e0e6; 
} 
</style> 

力學/模板/機械/ resetpwd.html

<html> 
    <title>Reset Password</title> 
     <body> 
      <p>You did it!</p> 
     </body> 
</html> 

<a href="{% url 'mechanics:resetpwd' %}">Reset Password</a>只是我返回到登錄頁面。它與我用來編碼的每個其他鏈接都是一樣的。我該如何解決?

回答

4

您需要在正則表達式的結尾包含美元符號。

url(r'^$', views.login, name="login"), 

沒有美元符號,正則表達式r'^'將匹配所有URL,所以在這之下的任何URL模式將被忽略。

實際上您可以從根url配置中刪除此url和resetpwd,因爲您已經在包含的mechanics.urls中包含這些視圖。

請注意,Django自帶an authentication system。你應該使用這個而不是試圖寫你自己的。

1

有幾個問題與您的代碼:

首先,你完全Django的認證系統的工作。如果你知道你在做什麼,這很好(但它真的讓你想知道你爲什麼使用Django)。

  1. 您使用明文密碼(Django的就不會)
  2. 你是不是驗證在Django用戶這樣你就不會:

    在任何其他情況下,你真的應該,因爲使用它能夠使用的任何的功能,與Django一起基於身份驗證,如修飾器login_required()將處理正確的重定向到登錄頁面,本地化,權限,密碼重置通過電子郵件等等。

補充說明:

你有兩個loginresetpw頁面,你包括管理的網站兩次(在基本urls.py和力學一個)。