首页 文章

Django:为什么我的登录视图/表单和下一个重定向在Safari中不起作用?

提问于
浏览
0

我在Safari中的Django登录表单出现问题,在Chrome和IE中都能成功运行 .

在Chrome / IE中使用时,表单都会正确返回用户名/密码(如果需要),输入正确的用户名/密码后会将用户登录并重定向到{} .

在safari下,用户名/密码错误也可以正常工作,但是当输入有效的用户名和密码时,用户将被重定向回登录页面而不是{} .

这是我的登录视图:

def login_user(request):
   next = request.GET['next']

   state = ""
   username = password = ""

   if request.POST:
       username = request.POST.get('username')
       password = request.POST.get('password')

       user = authenticate(username = username, password = password)
       if user is not None:
           if user.is_active:
               login(request, user)

               return HttpResponseRedirect(next)
           else:
               state = "You're account is not active"
       else:
           state = "Your're username and/or password are incorrect."

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

和登录模板中的表单:

<form action="" method="post">{% csrf_token %}
<label for="username">username:</label>
    <input type="text" id="username" name="username"/>      
    <label for="password">password:</label>
<input type="password" name="password"/>
    <input type="submit" value="Log In" />

    <p><strong>{{ state }}</strong></p>
</form>

2 回答

  • 0

    好吧, HttpResponseRedirect 无效或 next 值错误 .

    我已多次使用HttpResponseRedirect并且到目前为止没有遇到任何问题 .

    让我们看看第二个选项 . 当您在URL参数中传递它时,浏览器可以转义某些字符 . 所以你得到的结果不起作用 . 也许如果你在控制台中打印下一个,你会看到什么是错的?

    希望能帮助到你!

  • 0

    这是我的登录模板(位于templates / registration / login.html中),它的工作原理如下:

    {% load url from future %}
    
    {% block content %}
    
    {% if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    
    <form method="post" action="{% url 'django.contrib.auth.views.login' %}">
        {% csrf_token %}
        <table>
        <tr>
            <td>{{ form.username.label_tag }}</td>
            <td>{{ form.username }}</td>
        </tr>
        <tr>
            <td>{{ form.password.label_tag }}</td>
            <td>{{ form.password }}</td>
        </tr>
        </table>
    
        <input type="submit" value="login" />
        <input type="hidden" name="next" value="{{ next }}" />
    </form>
    

    只需连接到django auth插件,它就可以“正常工作”而无需自定义视图方法 .

相关问题