首页 > 解决方案 > 向 django 发送 POST 请求时未调用视图中的函数

问题描述

我是 Django 的初学者,我正在使用 HTML 表单将输入表单数据存储到数据库中。但是,只要生成请求,就不会调用注册函数。

我的登录表单和注册表单在一个网页中。我的网页包含打开注册表单时的向下滚动动画效果。

这是我的代码:

Login.html(使用 Javascript(jQuery))

<!DOCTYPE html>
<html lang="en">
<head>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/holder/2.9.7/holder.min.js" rel = "stylesheet" type="text/css">
    <link rel="stylesheet" href="jQuery/slick-1.8.1/slick/slick.css" type="text/css">
    <link rel="stylesheet" href="jQuery/slick-1.8.1/slick/slick-theme.css" type="text/css">
    <link type="text/css" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
    <!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">-->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <!--<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>-->
    <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
    <meta charset="UTF-8">
    <title>Login | Register</title>
</head>
<body>
<script>
    $(document).ready(function(){

        $('#lgcollapse').collapse('show');

        $('#reg-uncollapse').hide();

        $('#register-form-opener').click(function(){
            $('#lgcollapse').slideUp(500);
            setTimeout(function(){
                $('#reg-uncollapse').fadeIn(1000);
                $('#lgcollapse').hide();
            },800);
        });

        $('#login-opener').click(function(){
            $('#lgcollapse').slideDown(500,function(){
                $('#reg-uncollapse').hide();
            });
            /*setTimeout(function(){
                $('#lgcollapse').fadeIn(1000);
            },800);*/
        });
    });
</script>
<style>
    .nmp{
        background: #ffffff;
        transition: 1s ease;
        box-shadow:  5px 5px 10px #bfc2c4, -5px -5px 10px #ffffff;
    }
    .nmp:hover{
        box-shadow: none;
    }
</style>
<body style="background-color: #e9ecef!important;">
    <div class = "row my-5" id="lgcollapse"  style="background-color: #ffffff!important;box-shadow: inset 5px 5px 18px -2px #000000;margin-right: 0px!important;">
        <div class = "container">
            <div class = "row">
                <div class = "col-md-12">
                    <div class = "card my-5" style="background-color: #e9ecef!important;">
                        <div class="card-title text-center">
                            <div class = "jumbotron-fluid">
                                <h4 class = "display-4">Login</h4>
                            </div>
                        </div>
                        <div class = "card-body">
                            <div class = "card-title text-center">
                                <i class = "fa fa-user-circle fa-5x"></i>
                            </div>
                            <form class = "needs-validation" novalidate method="POST">
                                <div class = "form-group">
                                    <label><h4 class = "text-primary">Username</h4></label>
                                    <input type="text" class = "form-control nmp" id = "usernm" required>
                                </div>
                                <div class = "form-group">
                                    <label><h4 class = "text-secondary">Password</h4></label>
                                    <input type="password" class = "form-control nmp" id = "lgpasswd" required>
                                </div>

                                <div class = "form-check form-check-inline">
                                    <input type="checkbox" class = "form-check-input ml-auto" id="logged">
                                    <label for = "logged" class="form-check-label ml-auto">Keep Logged in</label>
                                </div>

                                <div class = "form-group text-center">
                                    <button class = "btn btn-success"><i class = "fa fa-sign-in fa-lg"></i> Log In</button>
                                </div>

                                <div class = "form-group text-center">
                                    <label><a href = "#" class = "lead btn-link" id = "register-form-opener">New User ? Register Here...</a></label>
                                </div>

                                <hr class = "clearfix">

                                <div class = "text-center">
                                    <button class = "btn btn-danger" ><i class = "fa fa-google fa-lg"></i> Sign in with <b>Google</b></button>
                                    <button class = "btn btn-primary" ><i class = "fa fa-facebook fa-lg"></i> Sign in with <b>Facebook</b></button>
                                </div>

                                <hr class="clearfix">

                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class = "row my-3 w-100" id="reg-uncollapse">
        <div class = "container">
            <div class = "row">
                <div class = "col-md-12" style="background-color:#e9ecef!important;">
                    <div class = "card my-5" style="background-color:#e9ecef!important;">
                        <div class = "card-title text-center">
                            <div class = "jumbotron-fluid">
                                <h4 class = "display-4">Register</h4>
                            </div>
                        </div>
                        <hr class = "clearfix">
                        <div class = "card-body">
                            <form class = "needs-validation" novalidate method="post" action="login">
                                {% csrf_token %}
                                <div class = "form-row">
                                    <div class = "col-md-4 my-auto">
                                        <div class = "card-title text-dark text-center">
                                            <h5>Customer Name</h5>
                                        </div>
                                    </div>
                                    <div class = "col-md-4">
                                        <input type="text" class = "form-control nmp" placeholder="First Name" name = "fname" required>
                                    </div>
                                    <div class = "col-md-4">
                                        <input type="text" class = "form-control nmp" placeholder="Last Name" name = "lname"  required>
                                    </div>
                                </div>
                                <div class = "form-row mt-4">
                                    <div class = "col-md-4 my-auto">
                                        <div class = "card-title text-dark text-center ">
                                            <h5>E-mail</h5>
                                        </div>
                                    </div>
                                    <!--<div class = "col-md-4">
                                        <input type="text" class = "form-control nmp" placeholder="Username" name="username" required>
                                    </div>-->
                                    <div class = "col-md-8">
                                        <div class = "input-group nmp">
                                            <div class = "input-group-prepend">
                                                <div class = "input-group-text">@</div>
                                            </div>
                                            <input type="email" class = "form-control w-100" placeholder="E-Mail Address" name = "email_domain" required>
                                        </div>
                                    </div>
                                </div>
                                <div class = "form-row mt-4">
                                    <div class = "col-md-4 my-auto text-center text-dark">
                                        <h5>Phone</h5>
                                    </div>
                                    <div class = "col-md-8">
                                        <input type="tel" class = "form-control nmp" name="phone"  required>
                                    </div>
                                </div>
                                <div class = "form-row mt-4">
                                    <div class = "col-md-4 text-center text-dark">
                                        <h5>Shipping Address</h5>
                                    </div>
                                    <div class="col-md-8">
                                        <div class="form-row  text-left">
                                            <div class="form-group col-md-4">
                                                <input class="form-control nmp" type="text" placeholder="House No" name = "hno" required>
                                            </div>
                                            <div class="form-group col-md-8">
                                                <input class="form-control nmp" type="text" placeholder="Street Name" name = "street" required>
                                            </div>
                                            <div class="form-group col-md-12">
                                                <input class="form-control nmp" type="text" placeholder="Route" name = "route" required>
                                            </div>
                                            <div class="form-group col-md-6">

                                                <input class="form-control nmp" type="text" placeholder = "City" name = "city" required>
                                            </div>
                                            <div class="form-group col-md-6">
                                                <input class="form-control nmp" type="text" placeholder="State" name = "state" required>
                                            </div>
                                            <div class="form-group col-md-6">
                                                <input class="form-control nmp" type="text" placeholder="ZIP Code" name = "zipc" required>
                                            </div>
                                            <div class="form-group col-md-6">
                                                <input class="form-control nmp" type="text" placeholder = "Country" name = "country" required>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                <div class = "form-row mt-4">
                                    <div class = "col-md-4 text-center text-dark">
                                        <h5>Password</h5>
                                    </div>
                                    <div class = "col-md-8">
                                        <div class = "form-row">
                                            <div class = "col-md-4">
                                                <input type="password" class = "form-control nmp" placeholder="Password" name = "psswd" value="qwerty" required>
                                            </div>
                                            <div class = "col-md-4">
                                                <input type="password" class = "form-control nmp" placeholder="Confirm Password" name = "cpsswd" value="qwerty" required>
                                            </div>
                                        </div>
                                        <label class = "text-danger">Please be stay Alert while creating your password !! You will not be able to reset password if forgotten!!!</label>
                                    </div>
                                </div>
                                <hr class = "clearfix">
                                <div class = "form-row mt-4">
                                    <div class = "card-text text-center col-md-12">
                                        <h5 class = "btn-link text-center"><a href = "#" id = "login-opener" class = "text-center">Already Registred ? Go to Login</a></h5>
                                        <button class = "btn btn-success mt-2" type="submit" id="reged" ><i class = "fa fa-user-plus fa-lg">&nbsp;Register</i></button>
                                    </div>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>

<script>
    (function() {
        'use strict';
        window.addEventListener('load', function() {
            var forms = document.getElementsByClassName('needs-validation');
            var validation = Array.prototype.filter.call(forms, function(form) {
                form.addEventListener('submit', function(event) {
                    if (form.checkValidity() === false) {
                        event.preventDefault();
                        event.stopPropagation();
                    }
                    form.classList.add('was-validated');
                }, false);
            });
        }, false);
    })();
</script>

</body>
</html>

网址.py

from django.urls import path
from . import views

urlpatterns = {
    path('register', views.register, name="register")
}

视图.py

from django.shortcuts import render,redirect
from  django.contrib.auth.models import User,auth

# Create your views here.
def register(request):
    if request.method == 'POST':
        fname = request.POST['fname']
        lname = request.POST['lname']
        phone = request.POST['phone']
        uname = request.POST['username']
        emdmain = request.POST['email_domain']
        hno = request.POST['hno']
        street = request.POST['street']
        route = request.POST['route']
        city = request.POST['city']
        zipc = request.POST['zipc']
        desh = request.POST['country']
        psswd = request.POST['psswd']
        cpsswd = request.POST['cpsswd']

        user = User.objects.create_user(fname = fname,lname = lname,username=uname,email=emdmain,password=psswd)
        user.save()

        print('user created')

    return render(request,"This Function Is Called")

任何帮助将不胜感激,谢谢!!!!

标签: pythondjangodjango-formsdjango-viewsdjango-templates

解决方案


为什么不使用 Ajax 调用函数?

XXX 是您要发送的日期和姓名

我在 Login.html 中看不到您调用 register 的位置

$.ajax({
                type: "POST",
                url: 'register',
                data: {
                    'XXX': XXX,             
                    'csrfmiddlewaretoken': csrftoken
                },
                success: function (data, textStatus, jqXHR) {

                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {

                }
})

推荐阅读