ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如果user.is_authenticated不起作用,则为Django

2019-07-25 20:59:07  阅读:183  来源: 互联网

标签:python authentication django django-forms


我只是想尝试运行一个简单的{%if user.is_authenticated%}.但它总是返回False.

这是我的所有文件.

views.py

from django.shortcuts import render_to_response, redirect
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.contrib.auth.models import User
from django.http import HttpResponse
from django.contrib.auth.hashers import *
from forms import UserLoginForm
from models import UserLogin

def index(request):
    return render_to_response('index.html', context_instance = RequestContext(request))

def login(request):
    if request.method == 'POST':
        form = UserLoginForm(request.POST or None)
        if form.is_valid():
            email_from_form = form.cleaned_data['email']
            password_from_form = form.cleaned_data['password']
            users = User.objects.filter(email = email_from_form)

            for j in users:
                if j.email == email_from_form:
                    pass_match = check_password(password_from_form, j.password)
                    if pass_match:
                        return redirect(reverse('profile'), context_instance = RequestContext(request))
                    else:
                        return HttpResponse('Entered password did not match')
                else:
                    return HttpResponse('Entered email does not exist')
        else:
            return HttpResponse(form.errors)
    else:
        form = UserLoginForm()

    return render_to_response('login.html', {'form':form}, context_instance = RequestContext(request))


def profile(request):

    return render_to_response('profile.html', context_instance = RequestContext(request))

forms.py

from django import forms

class UserLoginForm(forms.Form):
    email = forms.EmailField(max_length = 100)
    password = forms.CharField(max_length = 100)

models.py

from django.db import models

class UserLogin(models.Model):
    email = models.EmailField(max_length = 100)
    password = models.CharField(max_length = 100)

    def __unicode__(self):
        return self.email

profile.html

<html>
<head>
    <title>profile</title>
</head>
<body>
    {% if user.is_authenticated %}
        Welcome user, you are loged in..
    {% else %}
        You are not logged in
    {% endif %}
</body>
</html>

的login.html

<html>
<head>
    <title>login</title>
</head>
<body>
    <form action="{% url login %}" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" id="submit" name="submit" value="Login" />
    </form>

</body>
</html>

它总是返回你没有登录

我是django的新手,我不明白为什么会这样.

解决方法:

您永远不会记录您的用户.请尝试以下几行:

from django.contrib.auth import authenticate, login as auth_login

if request.method == 'POST':
    form = UserLoginForm(request.POST or None)
    if form.is_valid():
        username = User.objects.get(email=form.cleaned_data['email'])
        password = form.cleaned_data['password']
        user = authenticate(username=username, password=password)
        if user:
            if user.is_active:
                auth_login(request, user)
                return HttpResponseRedirect(request.GET.get('next',
                                            settings.LOGIN_REDIRECT_URL))
        else:
            error = 'Invalid username or password.'

更新以使用您的表单清晰;错误检查排除在外

标签:python,authentication,django,django-forms
来源: https://codeday.me/bug/20190725/1536897.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有