2017-03-18 3 views
0

OK 그래서 잘 작동합니다. 난 내가 내가 models.py URL을 포함 한 그 길이야을 의지하는 경향이 있으므로 로그인 섹션을 찍을 때 폼의 나머지 작품 어딘가에 다음페이지를 찾을 수 없습니다. 404 로그인 버튼을 클릭 할 때

Request Method: POST 
Request URL: http://localhost:8000/users/%7Burl%20'users:login'%20%25%7D 
Using the URLconf defined in loginReg.urls, Django tried these URL patterns, in this order: 
^users/ ^$ [name='index'] 
^users/ ^register$ [name='register'] 
^users/ ^success$ [name='success'] 
^users/ ^login$ [name='login'] 
^users/ ^logout$ [name='logout'] 
The current URL, users/{url 'users:login' %}, didn't match any of these. 

의 오류를 trowing되는 오류가 있습니다. py 및 두 html의 일부 나는 누군가가 오류가 누락 된 오류를 볼 수 있기를 바랍니다. Models.py

from __future__ import unicode_literals 
from django.db import models 
import re, bcrypt 
EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9.+_-][email protected][a-zA-Z0-9._-]+\.[a-zA-Z]+$') 

class UserManager(models.Manager): 
    def add_user(self, postData): 
     errors = [] 
     if not len(postData['first_name']): 
      errors.append('First name is required') 
     if len(postData['last_name']) < 2: 
      errors.append('Last name must be at least 2 characters long!') 
     if not len(postData['email']): 
      errors.append('Email is required!') 
     if not EMAIL_REGEX.match(postData['email']): 
      errors.append('Please enter a valid email!') 
     check_email = self.filter(email = postData['email']) 
     if check_email: 
      errors.append('Sorry email already exist!') 
     if len(postData['password']) < 8: 
      errors.append('Password must be at least 8 characters!') 
     if not postData['password'] == postData['confirm_password']: 
      errors.append('Passwors must match!') 

     modelsResponse = {} 



     if errors: 
      # failed validations 
      modelsResponse ['isRegistered'] = False 
      modelsResponse['errors'] = errors 
     else: 
      # passed validations, create a new user 
      hashed_password = bcrypt.hashpw(postData['password'].encode(), bcrypt.gensalt()) 
      user = self.create(first_name = postData['first_name'] , last_name = postData['last_name'], password = hashed_password) 
      modelsResponse ['isRegistered']= True 
      modelsResponse['user'] = user 

     return modelsResponse 

     def login_user(self, postData): 
      user = self.filter(email = postData['email']) 
      errors = [] 
      modelsResponse = {} 
      if not user: 
       #invalid email 
       errors.append('Invalid email!') 

      else: 
       #found a user match, check the password to see if they match 
       if bcrypt.checkpw(postData['password'].encode(), user[0].password.encode()): 
        #login the user 
        modelsResponse['isLoggedIn'] = True 
        modelsResponse['user'] = user[0] 
       else: 
        # invalid email password combination 
        errors.append('Invalid email/password combination!') 

      if errors: 
       modelsResponse['isLoggedIn'] = False 
       modelsResponse['errors'] = errors 

     return modelsResponse 

class User(models.Model): 
    first_name = models.CharField(max_length = 50) 
    last_name = models.CharField(max_length = 50) 
    email = models.CharField(max_length = 100) 
    password = models.CharField(max_length =100) 
    created_at = models.DateTimeField(auto_now_add = True) 
    updated_at = models.DateTimeField(auto_now = True) 

    objects = UserManager() 

Urls.py이 django.conf.urls에서

이 URL을 가져

인덱스 HTML

<!DOCTYPE html> 
<html> 
<head> 
    <title>Login and Registration</title> 
</head> 
<body> 
    {% if messages %} 
     {% for message in messages %} 
      <p>{{ message }}</p> 
     {% endfor %} 
    {% endif %} 
    <div class="register"> 
     <h1>Register</h1> 
     <form class="" action="{% url 'users:register' %}" method="post"> 
      {% csrf_token %} 
      <p>First Name: <input type="text" name="first_name" value=""></p> 
      <p>Last Name: <input type="text" name="last_name" value=""></p> 
      <p>Email: <input type="text" name="email" value=""></p> 
      <p>Password: <input type="Password" name="password" value=""></p> 
      <p>Confirm Password: <input type="password" name="confirm_password" value=""></p> 
      <input type="submit" name="" value="Register"> 
     </form> 
    </div> 
    <div class="login"> 
     <h1>Login</h1> 
     {% csrf_token %} 
     <form class="" action="{url 'users:login' %}" method="post"> 
     <p>Email: <input type="text" name="email" value=""></p> 
     <p>Password: <input type="Password" name="password" value=""></p> 
     <input type="submit" name="" value="Login"> 
     </form> 
    </div> 
</body> 
</html> 

는에서 을 포함한다. 수입 전망

urlpatterns = [ 
    url(r'^$', views.index, name= 'index'), 
    url(r'^register$', views.register, name = 'register'), 
    url(r'^success$', views.success, name = 'success'), 
    url(r'^login$', views.login, name = 'login'), 
    url(r'^logout$', views.logout, name = 'logout'), 
] 

views.py

from django.shortcuts import render, redirect 
from . models import User 
from django.contrib import messages 

# Create your views here. 
def index(request): 
    return render(request, 'logReg/index.html') 

def register(request): 
    viewsResponse = User.objects.add_user(request.POST) 
    if viewsResponse['isRegistered']: 
     request.session['user_id'] = viewsResponse['user'].id 
     request.session['user_fname'] = viewsResponse['user'].first_name 
     return redirect('users:success') 
    else: 
     for errors in viewsResponse['errors']: 
      messages.error(request, errors) 
     return redirect('users:index') 


def success(request): 
    if 'user_id' not in request.session: 
     messages.error(request, 'Must be logged in!') 
     return redirect('users.index') 
    return render(request, 'logReg/success.html') 

def login(request): 
    viewsResponse = User.objects.login_user(request.POST) 
    if viewsResponse['isLoggedIn']: 
     request.session['user_id'] = viewsResponse['user'].id 
     request.session['user_fname'] = viewsResponse['user'].first_name 
     return redirect('users:success') 
    else: 
     for errors in viewsResponse['errors']: 
      messages.error(request, errors) 
     return redirect('users:index') 

def logout(request): 
    return redirect('users.index') 

답변

1

당신은

{% url 'users:login' %} 
#^ missing % 
+0

은 내가 두 번째 필요하다고 멍청한 짓이었다 알고 감사해야 오타

{url 'users:login' %} 

이 한 쌍의 eys. 나는 2 분 안에 대답을 받아 들일 수있다. –

관련 문제