在用户尝试登录(成功或失败)之后成功调用重定向时遇到问题。在控制台中,我确实注意到GET和POST语句是正确的。在此先感谢大家,因为这已成为皇家PIA。
views.py
class UserLoginFormView(View):
form_class = UserLoginForm
template_name = 'home/login.html'
#Display Blank Form
def get(self,request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
#Process Form Data
def post(self,request):
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('home')
else:
return redirect('products')
urls.py
urlpatterns = [
url(r'^$', views.HomeView, name='home'),
url(r'^register/$', views.UserFormView.as_view(), name="register"),
url(r'^login/$', views.UserLoginFormView.as_view(), name="user_login"),
url(r'^products/$', views.ProductsView, name="products"),
]
login.html
<form class="cozy" action="" method="post">
{% csrf_token %}
<div class="form-group control">
<label for="username" class="control-label">Username</label>
<input type="text" name="username" id="username" class="form-control">
</div>
<div class="form-group control">
<label for="password" class="control-label">Password</label>
<input type="password" name="password" id="password" class="form-control">
</div>
{% if form.errors %}
<p class=" label label-danger">
Your username and password didn't match. Please try again.
</p>
{% endif %}
<div class="d-flex align-content-center justify-content-center">
<button type="submit" class="btn btn-lg btn-accent">Login</button>
</div>
</form>
控制台输出
System check identified no issues (0 silenced).
January 25, 2019 - 15:39:24
Django version 1.11.18, using settings 'svcreporter.settings'
Starting development server at http://127.0.0.1:9000/
Quit the server with CTRL-BREAK.
[25/Jan/2019 15:39:28] "GET /home/login/ HTTP/1.1" 200 4490
[25/Jan/2019 15:39:34] "POST /home/login/ HTTP/1.1" 302 0
[25/Jan/2019 15:39:34] "GET /home/ HTTP/1.1" 200 17242
答案 0 :(得分:0)
您错过了as_view()
部分:
urlpatterns = [
url(r'^$', views.HomeView, name='home'),
# ...
]
应该是:
urlpatterns = [
url(r'^$', views.HomeView.as_view(), name='home'),
# ...
]
我想说的是,在某些时候您也会为此而苦苦挣扎:
# Add .as_view() to views.ProductsView
url(r'^products/$', views.ProductsView, name="products")