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">
Кроме того, вероятно, после перенаправления из представления входа в систему при успехе, вы хотите перенаправить на приборную панель, а не на страницу входа в систему снова.