Django Website Http Error 405; Method Not Allowed (POST): /dashboard/

Я пытаюсь получить доступ к своей странице 'dashboard' после входа в систему на странице 'login' в Django. Введенный url выдает http ошибку 405. Если я заменяю url на другую страницу (например, 'dbtable'), то она работает абсолютно нормально. Ниже приведен мой код в django:

urls.py:

urlpatterns = [
    path('',views.register_login, name='login'),
    path('dashboard/', DashboardPageView.as_view(), name='dashboard'),
        path('dbtable/', views.DBTableView, name = 'dbtable'),
]

views.py (включает представление входа в систему и представление приборной панели):

def register_login(request):
    form = UserCreationForm()
    if "register" in request.method == 'POST':
        form = UserCreationForm(request.POST) == "Register"
        if form.is_valid():
            form.save()
            user = form.cleaned_data['username']
            messages.success(request,"Account was Created for " + user)
        
    context = {'form':form}
    return render(request,'login.html',context)
    
    if "login" in request.method == "POST":
        if request.POST['submit'] == 'Login':
            username = request.POST['username']
            password = request.POST['password']

            user = authenticate(request, username=username, password=password)

            if user is not None:
                login(request,user)
                return redirect('login')
            else:
                messages.error(request, 'Wrong Username or password')
    context = {}
    return render(request,'login.html',context)
            
class DashboardPageView(TemplateView): 
    template_name = 'dashboard.html'
    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(DashboardPageView, self).get_context_data(**kwargs)
        
        
        context['plot'] = plot1.cumulative_plot()
        return context

login.html:

<!-- SIGN IN -->
            <div class="col align-items-center flex-col sign-in">
                <div class="form-wrapper align-items-center">
                    <div class="form sign-in">
                        <div class="input-group">
                            <form  action = "{% url 'dashboard' %}" method="POST" name="login" value="login">
                                {% csrf_token %}
                                <i class='bx bxs-user'></i>
                                <input type="text" name = "username"  placeholder="Username" class="form-control" Required>
                        
                            <i class='bx bxs-lock-alt'></i>
                            <input type="password" name = "password" placeholder="Password" class="form-control" Required>
                                <button type="submit" >
                                    Sign in
                                </button>
                                <p>
                                    <b>
                                        Forgot password?
                                    </b>
                                </p>
                                <p>
                                    <span>
                                        Don't have an account?
                                    </span>
                                    <b onclick="toggle()" class="pointer">
                                        Sign up here
                                    </b>
                                </p>
                            </form>
                        </div>

Вот что появляется на терминале:

[02/Oct/2022 17:04:24] "GET / HTTP/1.1" 200 4720

Метод не разрешен (POST): /dashboard/

Метод не разрешен: /dashboard/

[02/Oct/2022 17:04:42] "POST /dashboard/ HTTP/1.1" 405 0

Ваша форма входа отправляет форму в представление приборной панели. Представление приборной панели определяет только метод get, поэтому вы и получаете ошибку. Но в любом случае, я предполагаю, что вы хотели отправить эту форму в представление register_login.

Изменение:

<form  action = "{% url 'dashboard' %}" method="POST" name="login" value="login">

To:

<form  action = "{% url 'login' %}" method="POST" name="login" value="login">

Кроме того, вероятно, после перенаправления из представления входа в систему при успехе, вы хотите перенаправить на приборную панель, а не на страницу входа в систему снова.

Вернуться на верх