1

我正在尝试为我的 Django 网站创建一个登录页面。起初我尝试了 Django 附带的所有内置登录功能,但是我遇到了一个问题。我的问题是,目前登录页面一直在尝试重定向到主页。(我也尝试了另一个页面,没有工作)一旦用户登录,重定向页面呈现为 html,但是当它应该是 /mobile/ 或 / 时,url 保持为 /accounts/login/ 并且因为这没有任何链接工作,并且没有加载静态文件。

以下是我的登录视图代码:

def login(request):
        if request.method == "POST":
            redirect_to = request.POST['next']
            print 'method is post'
            form = AuthenticationForm(data=request.POST)
            username = request.POST.get('username', '')
            password = request.POST.get('password', '')
            user = auth.authenticate(username=username, password=password)
            if form.is_valid() and user is not None and user.is_active:
                print 'form is valid'
                netloc = urlparse.urlparse(redirect_to)[1]
                print 'original redirect_to is: ',redirect_to
                # Use default setting if redirect_to is empty
                if not redirect_to:
                    print 'changing redict to default: ', redirect_to
                    redirect_to = settings.LOGIN_REDIRECT_URL

                print 'redirect to is: ',redirect_to
                # Heavier security check -- don't allow redirection to a different
                # host.
                #elif netloc and netloc != request.get_host():
                #    redirect_to = settings.LOGIN_REDIRECT_URL

                # Okay, security checks complete. Log the user in.
                print form.get_user()
                auth.login(request, user)
                print 'user logged in'

                return redirect(reverse('builds.views.mobile_view'))
        else:
            redirect_to = request.REQUEST.get('next')
            form = AuthenticationForm(request)
            c = {
                'next':redirect_to,
                'form': form,
                }

            print 'returning render to response login'
            return TemplateResponse(request,'registration/login.html', context = c)

由于内置的​​登录视图似乎不起作用,我想如果我自己编写它可能会起作用,但问题仍然存在。

这是我的登录html代码:

<!-- Start of first page: START -->
<div data-role="page" class="type-interior" id="LOGIN" data-theme="a">
    {% if form.errors %}
    <div data-role="header" data-theme="a" data-content-theme="a">
        <h1>Your username and password didn't match. Please try again.</h1>
    </div><!-- /header -->

    {% else %}

    <div data-role="header" data-theme="a" data-content-theme="a">
        <h1>Please Enter Your Username and Password</h1>
    </div><!-- /header -->

    {% endif %}

    <form method="post" action="/accounts/login/" id="login_form">



        <label for="username">User name:</label>
        <input type="text" name="username" value="" id="username">


        <label for="password">Password:</label>
        <input type="password" name="password" value="" id="password">

        <input type="submit" value="Login" id="button"/>

        <input type="hidden" name="next" value="{{ next|escape }}" />


    </form>

    <div data-role="footer" data-theme="a">
        <h4></h4>
    </div>

</div>

请帮我!我觉得我已经尝试了一切。另外请告诉我是否应该包含任何其他代码。

编辑:

好的!我已将问题缩小到我在登录页面的标题中使用的 java 脚本内容(我正在使用 jquery)。标题是:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <title>Install Builds</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1.0, user-scalable=no">
    <link rel="stylesheet" href="{{ STATIC_URL }}blablahblachname.css" />
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile.structure-1.1.0.min.css" />
    <!--<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
    <script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>-->
    <link rel="apple-touch-icon-precomposed" href="{{ STATIC_URL }}static/homepage_icon.png" />
    <link rel="icon" href="{{ STATIC_URL }}homepage_icon.png" type="image/vnd.microsoft.icon" />
</head>

有解决办法吗?还是我必须完全排除 javascript,因此登录页面看起来平淡无奇:(

4

2 回答 2

1

我认为这个问题与 jQuery 移动有关。您可以通过添加data-ajax="false"到您的表单元素来修复它,同时保留 jQuery Mobile 的其他功能,如jQuery Mobile 的表单示例中所述。如果您需要的话,您可能需要在 jQuery Mobile 上阅读一些内容才能使 AJAX 登录正常工作。

于 2012-07-19T18:12:17.140 回答
0

您是否尝试过使用django.contrib.auth.views.loginwithnext_page参数?我在我的网站中使用过它,而且效果很好。请仔细阅读。

于 2012-07-19T16:25:04.333 回答