Только начал изучать django — я получаю «неопределенную переменную ‘auth'» в VS Code и другую ошибку на сервере

#python #django

#python #django

Вопрос:

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

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

 Undefined variable 'auth'
  

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

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

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

Вот views.py из приложения account

 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 из приложения accounts

 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:

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

 from django.contrib import auth
  

Комментарии:

1. Я перепроверил руководство, и у него его вообще нет. Это весь код, который у него есть в файле, и он работает. Однако ваш ответ работает. Я приму это как правильное как можно скорее.