Только начал изучать django - я получаю "неопределенную переменную 'auth'" в VS Code и еще одну ошибку на сервере - PullRequest
0 голосов
/ 26 марта 2019

Итак, я только начал изучать Джанго, используя видео курс с веб-сайта. Я должен создать аутентификацию сейчас, и у парня, который прошел курс, не возникло никаких проблем, но я знаю. Я получаю 2 разные ошибки, но я думаю, что одна из них появляется из-за другой.

Вот ошибка из кода VS:

Undefined variable 'auth'

В то время как другой с сервера:

The current path, accounts/action="/accounts/login", didn't match any of these.

Используя мою логику, первая не имеет ничего общего со второй, но я полагаю, она не работает из-за этой неопределенной переменной.

Вот views.py из приложения учетной записи

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

def register(req):
    if req.method == 'POST':
        first_name = req.POST['first_name']
        last_name = req.POST['last_name']
        username = req.POST['username']
        email = req.POST['email']
        password = req.POST['password']
        password2 = req.POST['password2']

        if password == password2:
            if User.objects.filter(username=username).exists():
                messages.error(req, 'Username already in use')
                return redirect('register')
            else:
                if User.objects.filter(email=email).exists():
                    messages.error(req, 'Email already in use')
                    return redirect('register')
                else:
                    user = User.objects.create_user(username=username, password=password, email=email, first_name=first_name, last_name=last_name)
                    user.save()
                    messages.success(req, 'You are now logged in')
                    return redirect('login')
        else:
            messages.error(req, 'Passwords do not match')
            return redirect('register')
    else:
        return render(req, 'accounts/register.html')

def login(req):
    if req.method == 'POST':
        username = req.POST['username']
        password = req.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(req, user)
            messages.success(req, 'You are now logged in')
            return redirect('dashboard')
        else:
            messages.error(req, 'Invalid credentials')
            return redirect('login')
        return
    else:
        return render(req, 'accounts/login.html')

def logout(req):
    return redirect('index')

def dashboard(req):
    return render(req, 'accounts/dashboard.html')

urls.py из основного приложения

urlpatterns = [
    path('', include('pages.urls')),
    path('listings/', include('listings.urls')),
    path('accounts/', include('accounts.urls')),
    path('admin/', admin.site.urls),
]

urls.py из приложения учетных записей

urlpatterns = [
    path('login', views.login, name='login'),
    path('register', views.register, name='register'),
    path('logout', views.logout, name='logout'),
    path('dashboard', views.dashboard, name='dashboard')
]

login.html

<section id="login" class="bg-light py-5">
    <div class="container">
      <div class="row">
        <div class="col-md-6 mx-auto">
          <div class="card">
            <div class="card-header bg-primary text-white">
              <h4>
                <i class="fas fa-sign-in-alt"></i> Login</h4>
            </div>
            <div class="card-body">
              {% include 'partials/_alerts.html' %}
              <form action=action="{% url 'login' %}" method="POST">
                  {% csrf_token %}
                <div class="form-group">
                  <label for="username">Username</label>
                  <input type="text" name="username" class="form-control" required>
                </div>

                <div class="form-group">
                  <label for="password2">Password</label>
                  <input type="password" name="password" class="form-control" required>
                </div>

                <input type="submit" value="Login" class="btn btn-secondary btn-block">
              </form>
            </div>
          </div>
        </div>
      </div>
    </div>
  </section>

Как я уже сказал, я не знаю, производит ли первое второе или нет, но я думаю, что мне нужно исправить их обоих. Я предполагаю, что это некоторые базовые вещи, и я просто не знаю, как это сделать в django, поэтому мне может понадобиться помощь в исправлении этого с хорошим объяснением. Большое спасибо.

//// РЕДАКТИРОВАТЬ: у меня была опечатка в index.html, теперь я исправил ее и получаю

NameError at /accounts/login
name 'auth' is not defined

1 Ответ

0 голосов
/ 26 марта 2019

Вы пропустили импорт:

from django.contrib import auth
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...