【问题标题】:Django POST With Using Ajax使用 Ajax 的 Django POST
【发布时间】:2017-05-10 17:16:33
【问题描述】:

我有一个应用程序名称 register_login,这个应用程序管理登录和注册操作。我在 localhost:8000/login 页面上有一个表单,我希望按钮重定向到我在 register_login 应用程序中的函数,但我做不到。我是 Django 框架的新手。我该如何处理?

主要网址.PY

from django.conf.urls import include,url
from django.contrib import admin
from register_login.views import login, register, test


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^homepage/', include('homepage.urls')),
    url(r'^login/$', login),
    url(r'^register/$', register),
    url(r'^success/$', test),
]

登录页面 .HTML

<form id=registerLogin style="margin-top: 30px; margin-left: 350px;">
      <header>Login</header>
      <label >Username <span>*</span></label>
      <input id="username"/>
      <label >Password <span>*</span></label>
      <input id="password"/>
      <button id="login">Login</button>
      <h1 style="margin-left: 20px;">Are you not registered?</h1>
      <button id="register">Register</button>
</form>

在这个 html 的末尾有我的 .js 文件。我没有忘记。

JAVASCRIPT

if (!jQuery) { throw new Error("This page requires jQuery") }


function readInput() {
    e.preventDefault();
    var userName = document.getElementById('username').value;
    var password = document.getElementById('password').value;
    debugger

    $.ajax({
        type: "POST",
        url: "/success/",
        data: {'username':username,'password':password, csrfmiddlewaretoken: '{{ csrf_token }}'},
        dataType: 'json',
        success : function(json) {
            $('#post-text').val(''); // remove the value from the input
            console.log(json); // log the returned json to the console
            console.log("success"); // another sanity check
        },     
    }); 
}

(function ($) {

$("#login").click(function(){
    readInput();
});


})(jQuery);

最后是我的功能。正如我之前所说,它在 register_login 应用程序中

REGISTER_LOGIN 视图

def test(request):
    embed()
    if request.method == 'POST':
        embed()
    return HttpResponse("hell world")

我尝试更改 URL,例如“/register_login/success/”、“/register_login/success”、“/register_login/success/$”、“/success/”、“success/”或“/success/$” .没有任何效果

我需要去那个功能,但它没有:(

【问题讨论】:

    标签: javascript jquery python ajax django


    【解决方案1】:

    由于您是通过 ajax 登录,因此您无法在 test 视图中重定向。您可以做的是在您的 ajax 成功函数中添加重定向。像这样的:

    // similar behavior as an HTTP redirect
    window.location.replace("/some-url/");
    

    或

    // similar behavior as clicking on a link
    window.location.href = "/some-url/";
    

    另外,您需要修复您的 javascript 代码,在点击处理程序中添加 preventDefault 并在 readInput.xml 中将其删除。您还需要删除数据对象中的引号并确保您使用了正确的变量。像这样的:

    $(function() {
        function readInput() {
            var username = document.getElementById('username').value;
            var password = document.getElementById('password').value;
    
            $.ajax({
                type: "POST",
                url: "/success/",
                data: {
                    username: username,
                    password: password,
                    csrfmiddlewaretoken: '{{ csrf_token }}'
                },
                dataType: 'json',
                success : function(json) {
                    window.location.replace("/some-url/");
                }
            }); 
        }
    
        $("#login").click(function(e){
            e.preventDefault();
            readInput();
        });
    });
    

    【讨论】:

    • 感谢您的回复。我需要我的 func() 与 ajax 但我不能:(
    • @Berkin 你的意思是你没有进入test 方法吗?
    • 当我点击“登录”按钮时,我需要将用户名和密码变量传递给我的 func -its test- 以检查我的数据库变量以进行身份​​验证。但就我而言,我无法将我的 json 传递给我的函数 :(
    • @Berkin 我已经更新了我的答案,请确保您有 jquery,然后检查您在 javascript 中使用的变量。
    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 2016-06-07
    • 2016-04-17
    • 2019-02-26
    • 2013-01-12
    • 1970-01-01
    • 2011-11-01
    • 2011-07-15
    相关资源
    最近更新 更多