NoReverseMatch(未找到“ user_login”的反向条目)

时间:2018-07-01 08:31:27

标签: django login django-forms django-urls

我有一个名为log的django项目和一个名为basic_app的应用程序。我创建了一个注册表,但是当我想创建一个user_login时,出现此错误:

位于/ basic_app / user_login /的NoReverseMatch 找不到'user_login'的反向按钮。 'user_login'不是有效的视图函数或模式名称。

views.py:

from django.shortcuts import render
from basic_app.forms import UserForm, UserProfileInfoForm
from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth.decorators import login_required


# Create your views here.

def index(request):
    return render(request, 'basic_app/index.html')


@login_required
def special(request):
    return HttpResponse('You are loged in!')

@login_required
def user_logout(request):
    logout(request)
    return HttpResponseRedirect(reverse('index'))




def register(request):
    registered = False

    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForm(data=request.POST)

        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save()
            user.set_password(user.password)
            user.save()

            profile = profile_form.save(commit=False)
            profile.user = user

            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES[
                    'profile_pic'
                ]

            profile.save()
            registered = True

        else:
             print(user_form.errors, profile_form.errors)

    else:
            user_form = UserForm()
            profile_form = UserProfileInfoForm()

    return render(request, 'basic_app/registration.html',
                             {'user_form':user_form,
                              'profile_form':profile_form,
                              'registered':registered})

def user_login(request):

    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username = username, password = password)

        if user:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(reverse('index'))
            else:
                return HttpResponse('Account Not Active.')

        else:
            print('Someone tried to login and failed!')
            print('username:{} and password:{}'.format(username, password))
            return HttpResponse('invalid login details supplied!')

    else:
        return render(request, 'basic_app/login.html',{})

basic_app / urls.py:

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

#TEMPLATE URLS

app_name = 'basic_app'

urlpatterns = [
    url(r'^register/$', views.register, name='register'),
    url(r'^user_login/$', views.user_login, name='user_login'),

log / urls.py:

from django.conf.urls import url, include
from django.contrib import admin
from basic_app import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^admin/', admin.site.urls),
    url(r'^basic_app/', include('basic_app.urls')),
    url(r'^logout/$', views.user_logout, name='logout'),
    url(r'special/', views.special, name='special')

login.html:

{% extends 'basic_app/basic.html' %}
{% block body_block %}

<div class="jumbotron">
    <h1>Please Login: </h1>
    <form action="{% url 'basic_app: user_login' %}" method="post">

        {% csrf_token %}
        <label for="username">Username:</label>
        <input type="text" name="username" placeholder="Enter Username">

        <label for="passwrod">Password:</label>
        <input type="password" name="password">

        <input type="submit" name="" value="Login">

    </form>


</div>


{% endblock %}

0 个答案:

没有答案