django中的用户登录视图无法正常工作?

时间:2020-01-16 11:11:42

标签: django django-templates django-views

注册页面后有登录页面,登录页面时出现问题,当我使用有效的凭据登录时,该页面将重定向至仪表板,当我提供无效的凭据时,还将重定向至使用输入的最后一个有效凭据的仪表盘登录表单我不明白为什么会这样 我的views.py

def user_register(request):
    if request.method == 'POST': # if there is a post request in the form
        user_form = UserForm(data=request.POST) #first of all it is a user_form will be posted details present in the user_form
        user_requirement_form = UserRequirementForm(data=request.POST)# after posting the details of the user_form post the details
        if user_form.is_valid() and user_requirement_form.is_valid():
         # if user_form & user_requirement form is valid

         User = user_form.save()#if form is valid save
         User.set_password(request.POST['password'])
         User.save()
         user_requirement = user_requirement_form.save(commit=False)
         # Set user
         user_requirement.user = User
         user_requirement.save()
         user_requirement_form.save_m2m()
         messages.success(request,('Project saved successfully'))
         return render(request,'home1.html')
        else:
          messages.warning(request, 'Please correct the errors above')
    else:  
        user_form = UserForm()
        user_requirement_form = UserRequirementForm()
    return render(request,'register.html', {'user_form': user_form, 'requirements_form': user_requirement_form})



def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                auth.login(request, user)
                messages.success(request, 'You are now logged in')
                return render(request,'dashboard.html')
        else:
            messages.error(request,'Invalid Credentials')
            return render(request,'dashboard.html')
    else:
        return render(request, 'login.html')


def dashboard(request):
    return render(request, 'dashboard.html',);

我的dashboard.html:

<details>
  <summary class="summary ml-4">User Details</summary>
  <p class="p1 ml-4">The contents that are selected by the user</p>
  <p class="p2 ml-4">{{request.user.user_requirement.user}}</p>
</details>

<p class="p3 ml-4 mt-4"><b>Room:<br></b>{{request.user.user_requirement.room}}</p>

 <p class="p4 ml-4"><b>GOAL:</b>
  {% for goal in request.user.user_requirement.goal.all %}
  <br>{{goal}}
  {% if not forloop.last %}, {% endif %}
  {% endfor %}
</p>
<p class="p5 ml-4"><b>FURNITURE:</b><br>{{request.user.user_requirement.furniture}}</p>
<p class="p4 ml-4"><b>DESIGN:</b>
  {% for design in request.user.user_requirement.design.all %}
  <br>{{design}}
  {% if not forloop.last %}, {% endif %}
  {% endfor %}
</p>

我的form.html:

 <form action="{% url 'modsy: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>

URLS.py:

urlpatterns = [
    # ex: /polls/
    path('', views.index, name='index'),
    path('rooms/', views.project1, name='project1'),
    path('goals/', views.project2, name='project2'),
    path('furniture/', views.project3, name='project3'),
    path('styles/', views.project4, name='project4'),
    path('register/', views.home, name='home'),
    path('user_register/', views.user_register, name='user_register'),
    path('login/', views.login,name='login'),
    path('dashboard/', views.dashboard,name='dashboard')



 ]

enter image description here

1 个答案:

答案 0 :(得分:2)

from django.http import HttpResponseRedirect

def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                auth.login(request, user)
                messages.success(request, 'You are now logged in')
                return HttpResponseRedirect(reverse('dashboard')) # Edit
        else:
            messages.error(request,'Invalid Credentials')
            # return render(request,'dashboard.html') ## removed 1
    # else: ## removed 2
    return render(request, 'login.html')
  1. 即使用户不存在,您也正在呈现仪表板。 (删除1)
  2. return render(request, 'login.html')应该是主要功能的一部分 因为如果您处于状态(方法==发布)并且用户不存在, 主函数将没有回报。
  3. 如果登录成功,您应该重定向到仪表板视图,而不是呈现

尝试一下。如果这有任何问题,请发表评论。另外,您应该使用redirect()将用户重定向到仪表板。

相关问题