首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django中的用户登录视图工作不正常?

django中的用户登录视图工作不正常?
EN

Stack Overflow用户
提问于 2020-01-16 19:11:42
回答 1查看 126关注 0票数 0

我在注册页面后有一个登录页面我的登录页面中的问题当我使用有效的凭据登录时,它将重定向到仪表板,当我提供无效的凭据时,它也会使用在登录表单中键入的最后一个有效凭据重定向到仪表板我不明白为什么我的views.py是这样的

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
 <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:

代码语言:javascript
复制
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')



 ]

EN

回答 1

Stack Overflow用户

发布于 2020-01-16 19:38:38

代码语言:javascript
复制
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. 即使用户不存在,您也会呈现仪表板。(Remove 1)
  2. return render(request, 'login.html')应该是main函数的一部分,因为如果您处于状态(方法== Post)并且用户不存在,则main函数将不会返回。如果登录成功,则应将重定向至仪表板视图,而不是render dashboard。

尝尝这个。如果这引起了任何问题,请评论。此外,您还应该使用redirect()将用户重定向到仪表板。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59768408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档