Django重定向不更新页面

时间:2019-01-25 20:57:36

标签: django django-forms

在用户尝试登录(成功或失败)之后成功调用重定向时遇到问题。在控制台中,我确实注意到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

1 个答案:

答案 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")