国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離)

這篇具有很好參考價值的文章主要介紹了python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

?作者介紹:大二本科網(wǎng)絡(luò)工程專業(yè)在讀,持續(xù)學(xué)習(xí)Java,努力輸出優(yōu)質(zhì)文章
?作者主頁:@逐夢蒼穹
?所屬專欄:項(xiàng)目。

1、前言

本文介紹的是用python實(shí)現(xiàn)的前后端學(xué)生管理系統(tǒng),前后端分離,較為簡單易上手。使用的技術(shù)點(diǎn)為:HTML+CSS+JavaScript+Flask+sqlite+Vue+Axios。
如果想了解前后端不分離的情況,請看我這篇文章:
python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端不分離)

2、思路總覽

下面是關(guān)于實(shí)現(xiàn)的功能的總覽:

首頁

①管理系統(tǒng)的首頁:(如有需求,可以自行使用前端框架美化)
??python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)

其中:
注冊和登陸是鏈接:
??注冊鏈接到注冊功能頁面
??登陸鏈接到登陸功能頁面

注冊

②注冊
注冊功能頁面,注冊功能頁面自定義,需要包含如下注冊信息并對輸入內(nèi)容進(jìn)行校驗(yàn):

注冊信息 驗(yàn)證規(guī)則
姓名 姓名縮寫,不能為空
學(xué)號 數(shù)字類型,不能為空
學(xué)院 不能為空
專業(yè) 不能為空
班級 不能為空
年齡 17-22間的任意數(shù)字,數(shù)字類型,不能為空
電話 數(shù)字類型,不能為空
Email 郵件格式
用戶名 字母大小寫、數(shù)字、下劃線四種類型至少包含三種,字母開始,長度至少6位
密碼 字母大小寫、數(shù)字、下劃線四種類型至少包含三種,長度至少8位
確認(rèn)密碼 重復(fù)密碼

python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)
基本流程:驗(yàn)證成功后,這些注冊信息都需要寫入sqlite的數(shù)據(jù)庫stu.db的students表中(該表需要先單獨(dú)創(chuàng)建,字段為上面的注冊信息,名字自定義,類型要滿足需求,另外用戶名設(shè)置為主鍵,這樣表中的用戶名取值就不能相同)。然后跳轉(zhuǎn)到注冊成功頁面,該頁面有返回首頁鏈接。

登錄

③登錄
登陸功能頁面,該頁面需要輸入用戶名和密碼,輸入的用戶名和密碼與students表中已有記錄進(jìn)行比對,若用戶名和對應(yīng)密碼在表中存在則跳轉(zhuǎn)到登陸成功頁面,否則提示用戶名不存在或密碼錯誤,不跳轉(zhuǎn)。登陸成功頁面直接以表格方式顯示自己注冊的所有信息,如下:
python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)
python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)
python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)

管理員

④管理員賬號
創(chuàng)建一個admin表,字段包括管理員名和密碼,自己通過sql語句插入三條記錄,即創(chuàng)建三個管理員賬號。
網(wǎng)站有個路徑為/admin,供管理員賬號登陸的頁面:
python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)
登錄之后展示全部信息:
python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)

3、詳細(xì)代碼

3.1、項(xiàng)目目錄

python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)

3.2、static

static文件夾需要導(dǎo)入兩個框架,一個是vue.js,一個屬axios.js(這個是本項(xiàng)目實(shí)現(xiàn)前后端分離的關(guān)鍵:發(fā)送異步請求)
需要這兩個框架文件可以點(diǎn)贊收藏加關(guān)注,私聊我發(fā)給你。

3.3、templates

3.3.1、01.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xzl</title>
    <style>
        h1 {color:black}
        a:link {color:#9932CC;align-items:center}
    </style>
</head>
<body>
    <div id="app">
        <br>
        <h1 style="font-size:60px">歡迎訪問本站</h1><br>
        <h1>
            <a href="/newStudent" @click="register">注冊</a><br><br>
            <a href="/enter" @click="login">登錄</a><br>
        </h1>
    </div>
</body>
</html>

3.3.2、02.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xzl</title>
    <style>
    </style>
</head>
<body>
<div id="app" style="text-align:center;">
    <h1>用戶登錄</h1><br>
    <form @submit.prevent="login">
        用戶名: <input type="text" v-model="username" name="user"><br><br>
        密碼: <input type="password" v-model="password" name="pwd"><br><br>
        <input type="submit" value="登錄" /><br><br>
    </form>
    <a href="/" style="color:#3CBC8D;">返回首頁</a>
</div>

<script src="static/js/vue.js"></script>
<script src="static/js/axios-0.18.0.js"></script>
<script>
new Vue({
    el: '#app',
    data: {
        username: '',
        password: '',
        message: ''
    },
    methods: {
        login() {
            axios.post('/check', {
                username: this.username,
                password: this.password
            })
            .then(response => {
                this.message = response.data.message;
                if (response.data.redirect) {
                    alert(this.message)
                    // 進(jìn)行頁面跳轉(zhuǎn)
                    window.loc1ation.href = response.data.redirect;
                }else {
                    alert(this.message)
                }
            })
            .catch(error => {
                console.error(error);
                // 在這里處理請求錯誤
            });
        }
    }
});
</script>
</body>
</html>

3.3.3、03.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>xzl</title>
    <script>
    function submitForm(event) {
        event.preventDefault();

        const name = document.getElementById('name').value;
        const num = document.getElementById('number').value;
        const academy = document.getElementById('academy').value;
        const major = document.getElementById('major').value;
        const Class = document.getElementById('Class').value;
        const age = document.getElementById('age').value;
        const phone = document.getElementById('phone-number').value;
        const email = document.getElementById('email').value;
        const user = document.getElementById('user').value;
        const pwd = document.getElementById('password').value;
        const repwd = document.getElementById('surePassword').value;

        if (pwd !== repwd) {
            document.getElementById('message').textContent = '兩次密碼不一致';
            return;
        }

        const data = {
            name: name,
            num: num,
            academy: academy,
            major: major,
            Class: Class,
            age: age,
            phone: phone,
            email: email,
            user: user,
            pwd: pwd
        };

        fetch('/addrec', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(data)
        })
            .then(response => response.json())
            .then(result => {
                if (result.success) {
                    alert(result.message);
                    document.getElementById('message').textContent = '';
                    document.getElementById('name').value = '';
                    document.getElementById('number').value = '';
                    document.getElementById('academy').value = '';
                    document.getElementById('major').value = '';
                    document.getElementById('Class').value = '';
                    document.getElementById('age').value = '';
                    document.getElementById('phone-number').value = '';
                    document.getElementById('email').value = '';
                    document.getElementById('user').value = '';
                    document.getElementById('password').value = '';
                    document.getElementById('surePassword').value = '';
                } else {
                    document.getElementById('message').textContent = result.message + ' ' + result.reason;
                }
            })
            .catch(error => {
                console.error('Error:', error);
                document.getElementById('message').textContent = '請求失敗';
            });
    }

    var flag = false;
    function checkName() {
        var name = document.getElementById("name").value;
        if (name.length == 0 || name == null) {
            document.getElementById("name-error").innerHTML = "名字不能為空";
            flag = false;
        }else {
            document.getElementById("name-error").innerHTML = "";
            flag=true;
        }
    }
    function checkNumber() {
        var number = document.getElementById("number").value;
        if (number.length == 0 || number == null) {
            document.getElementById("number-error").innerHTML = "學(xué)號不能為空";
            flag = false;
        } else {
            var regex = /^\d+$/;
            if (!regex.test(number)) {
                document.getElementById("number-error").innerHTML = "學(xué)號必須是數(shù)字";
                flag = false;
            } else {
                document.getElementById("number-error").innerHTML = "";
                flag=true;
            }
        }
    }
    function checkAcademy() {
        var academy = document.getElementById("academy").value;
        if (academy.length == 0 || academy == null) {
            document.getElementById("academy-error").innerHTML = "學(xué)院不能為空";
            flag = false;
        } else {
            document.getElementById("academy-error").innerHTML = "";
            flag=true;
        }
    }
    function checkMajor() {
        var flag = false;
        var major = document.getElementById("major").value;
        if (major.length == 0 || major == null) {
            document.getElementById("major-error").innerHTML = "專業(yè)不能為空";
            flag = false;
        } else {
            document.getElementById("major-error").innerHTML = "";
            flag=true;
        }
    }
    function checkCLASS() {
        var classValue = document.getElementById("Class").value;
        if (classValue.length == 0 || classValue == null) {
            document.getElementById("Class-error").innerHTML = "班級不能為空";
            flag = false;
        } else {
            document.getElementById("Class-error").innerHTML = "";
            flag=true;
        }
    }
    function checkAge() {
        var age = document.getElementById("age").value;
        if (age.length == 0 || age == null) {
            document.getElementById("age-error").innerHTML = "年齡不能為空";
            flag = false;
        } else if (isNaN(age)) {
            document.getElementById("age-error").innerHTML = "年齡必須為數(shù)字";
            flag = false;
        } else if (age < 17 || age > 22) {
            document.getElementById("age-error").innerHTML = "年齡必須在17-22之間";
            flag = false;
        } else {
            document.getElementById("age-error").innerHTML = "";
            flag=true;
        }
    }
    function checkPhoneNumber() {
        var phoneNumber = document.getElementById("phone-number").value;
        if (phoneNumber.length == 0 || phoneNumber == null) {
            document.getElementById("phone-number-error").innerHTML = "電話號碼不能為空";
            flag = false;
        } else if (isNaN(phoneNumber)) {
            document.getElementById("phone-number-error").innerHTML = "電話號碼必須為數(shù)字";
            flag = false;
        } else {
            document.getElementById("phone-number-error").innerHTML = "";
            flag = true;
        }
    }
    function checkEmail() {
        var email = document.getElementById("email").value;
        if (email.length == 0 || email == null) {
            document.getElementById("email-error").innerHTML = "郵箱不能為空";
            flag = false;
        } else {
            var regex = /\S+@\S+\.\S+/;
            if (!regex.test(email)) {
                document.getElementById("email-error").innerHTML = "郵箱格式有誤";
                flag = false;
            } else {
                document.getElementById("email-error").innerHTML = "";
                flag=true;
            }
        }
    }
    function checkUser() {
        var user = document.getElementById("user").value;
        if (user.length < 6) {
            document.getElementById("user-error").innerHTML = "用戶名長度不能少于6位";
            flag = false;
        } else {
            var regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d|_)[a-zA-Z\d_]{6,}$/;
            if (!regex.test(user)) {
                document.getElementById("user-error").innerHTML = "用戶名必須包含字母大小寫、數(shù)字、下劃線四種類型中的至少三種";
                flag = false;
            } else {
                document.getElementById("user-error").innerHTML = "";
                flag=true;
            }
        }
    }
    function checkPassword() {
        var password = document.getElementById("password").value;
        if (password.length < 8) {
            document.getElementById("password-error").innerHTML = "密碼長度不能少于8個字符";
            flag = false;
        } else {
            var regex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d|_)[a-zA-Z\d_]{8,}$/;
            if (!regex.test(password)) {
                document.getElementById("password-error").innerHTML = "密碼必須包含字母大小寫、數(shù)字、下劃線四種類型中的至少三種";
                flag = false;
            } else {
                document.getElementById("password-error").innerHTML = "";
                flag = true;
            }
        }
    }
    function checkSurePassword() {
        var password1 = document.getElementById("password").value;
        var password2 = document.getElementById("surePassword").value;
        if(password1!=password2){
            document.getElementById("surePassword-error").innerHTML = "兩次密碼不一致";
            flag = false;
        }else {
            document.getElementById("surePassword-error").innerHTML = "";
            flag=true;
        }
    }

    function checkForm() {
        var nameValid = checkName();
        var numberValid = checkNumber();
        var academyValid = checkAcademy();
        var majorValid = checkMajor();
        var classValid = checkCLASS();
        var ageValid = checkAge();
        var phoneNumberValid = checkPhoneNumber();
        var emailValid = checkEmail();
        var userValid = checkUser();
        var passwordValid = checkPassword();
        var surePasswordValid = checkSurePassword();
        if(flag){
            alert("提交成功")
            return true;
        }else{
            alert("提交失敗")
            return false;
        }
    }
    </script>
</head>

<body>
<h1>歡迎注冊</h1>
<form onsubmit="submitForm(event)">
    <h3>請?zhí)顚懩愕男畔?span id="n5n3t3z"    class="token tag"></h3>
    <h4>
        姓名: <input type="text" name="name" id="name" onblur="checkName()">
    <span id="name-error" style="color: red;"></span><br>
    學(xué)號: <input type="text" name="num" id="number" onblur="checkNumber()">
    <span id="number-error" style="color: red;"></span><br>
    學(xué)院: <input type="text" name="academy" id="academy" onblur="checkAcademy()">
    <span id="academy-error" style="color: red;"></span><br>
    專業(yè): <input type="text" name="major" id="major" onblur="checkMajor()">
    <span id="major-error" style="color: red;"></span><br>

    班級: <input type="text" name="Class" id="Class" onblur="checkCLASS()">
    <span id="Class-error" style="color: red;"></span><br>

    年齡: <input type="text" name="age" id="age" onblur="checkAge()">
    <span id="age-error" style="color: red;"></span><br>
    電話: <input type="text" name="phone" id="phone-number" onblur="checkPhoneNumber()">

    <span id="phone-number-error" style="color: red;"></span><br>
    Email: <input type="text" name="email" id="email" onblur="checkEmail()">
    <span id="email-error" style="color: red;"></span><br>
    用戶名: <input type="text" name="user" id="user" onblur="checkUser()">
    <span id="user-error" style="color: red;"></span><br>
    密碼: <input type="password" name="pwd" id="password" onblur="checkPassword()">
    <span id="password-error" style="color: red;"></span><br>
    確認(rèn)密碼: <input type="password" name="repwd" id="surePassword" onblur="checkSurePassword()">
    <span id="surePassword-error" style="color: red;"></span><br>
    </h4>
    <input type="submit" value="提交">
    <span id="message" style="color: red;"></span><br>
    <h3><a href="/" style="color:#3CBC8D;">返回首頁</a></h3>
</form>
</body>

</html>

3.3.4、04.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xzl</title>
    <style>
        #customers
        {
            width:88%;
            border-collapse:collapse;
            margin: auto;
        }
        th {
            width:200px;
            font-size: 1.1em;
            text-align: left;
            padding-top: 5px;
            padding-bottom: 4px;
            background-color: blue;
            color: #ffffff;
            white-space: nowrap;
        }
        td
        {
            border:1px solid #98bf21;
        }
    </style>
</head>
<body>
<div style="text-align:center;">
    <h1>學(xué)生信息表</h1><br>
    <table id="students-table">
        <thead>
            <th>name</th>
            <th>num</th>
            <th>academy</th>
            <th>major</th>
            <th>Class</th>
            <th>age</th>
            <th>phone</th>
            <th>email</th>
            <th>user</th>
        </thead>
        <tbody>
        </tbody>
    </table>
    <br>
    <a href="/" style="color:#3CBC8D;">返回首頁</a>
</div>

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
    document.addEventListener("DOMContentLoaded", function() {
        var user = '{{ user }}';
        axios.get('/List',{
            params:{
                user : user
            }
        })
            .then(function(response) {
                var student = response.data; // 獲取學(xué)生信息數(shù)組

                var tableBody = document.querySelector('#students-table tbody');

                //students.forEach(function(student) {
                var row = '<tr>' +
                    '<td>' + student.name + '</td>' +
                    '<td>' + student.num + '</td>' +
                    '<td>' + student.academy + '</td>' +
                    '<td>' + student.major + '</td>' +
                    '<td>' + student.Class + '</td>' +
                    '<td>' + student.age + '</td>' +
                    '<td>' + student.phone + '</td>' +
                    '<td>' + student.email + '</td>' +
                    '<td>' + student.user + '</td>' +
                    '</tr>';
                tableBody.innerHTML += row;
                //});
            })
            .catch(function(error) {
                console.log(error);
            });
    });
</script>
</body>
</html>

3.3.5、05.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xzl</title>
    <style>
    </style>
</head>
<body>
<div id="app" style="text-align:center;">
    <h1>管理員登錄</h1><br>
    <form @submit.prevent="loginAdmin">
        用戶名: <input type="text" v-model="username" name="user"><br><br>
        密碼: <input type="password" v-model="password" name="pwd"><br><br>
        <input type="submit" value="登錄" /><br><br>
    </form>
    <a href="/" style="color:#3CBC8D;">返回首頁</a>
</div>

<script src="static/js/vue.js"></script>
<script src="static/js/axios-0.18.0.js"></script>
<script>
new Vue({
    el: '#app',
    data: {
        username: '',
        password: '',
        message: ''
    },
    methods: {
        loginAdmin() {
            axios.post('/checkAdmin', {
                username: this.username,
                password: this.password
            })
            .then(response => {
                this.message = response.data.message;
                if (response.data.redirect) {
                    alert(this.message)
                    // 進(jìn)行頁面跳轉(zhuǎn)
                    window.location.href = response.data.redirect;
                }else {
                    alert(this.message)
                }
            })
            .catch(error => {
                console.error(error);
                // 在這里處理請求錯誤
            });
        }
    }
});
</script>
</body>
</html>

3.3.6、06.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>xzl</title>
    <style>
        #customers
        {
            width:98%;
            border-collapse:collapse;
            margin: auto;
        }
        th {
            width:200px;
            font-size: 1.1em;
            text-align: left;
            padding-top: 5px;
            padding-bottom: 4px;
            background-color: #ADD8E6;
            color: #ffffff;
            white-space: nowrap;
        }
        td
        {
            border:1px solid #98bf21;
        }

    </style>
</head>
<body>
<div style="text-align:center;">
    <h1>管理員權(quán)限:學(xué)生信息表</h1><br>
    <table id="students-table-admin">
        <thead>
        <th>姓名</th>
        <th>學(xué)號</th>
        <th>學(xué)院</th>
        <th>專業(yè)</th>
        <th>班級</th>
        <th>年齡</th>
        <th>電話</th>
        <th>郵箱</th>
        <th>用戶名</th>
        <th>密碼</th>
        <th>delete</th>
        </thead>
        <tbody>
        </tbody>
    </table>
    <br>
    <a href="/" style="color:#3CBC8D;">返回首頁</a>
</div>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
    document.addEventListener("DOMContentLoaded", function() {

        axios.get('/listAdmin',{

        })
            .then(function(response) {
                var students = response.data.students; // 獲取學(xué)生信息數(shù)組

                var tableBody = document.querySelector('#students-table-admin tbody');

                students.forEach(function(student) {
                    var row = '<tr>' +
                        '<td>' + student.name + '</td>' +
                        '<td>' + student.num + '</td>' +
                        '<td>' + student.academy + '</td>' +
                        '<td>' + student.major + '</td>' +
                        '<td>' + student.Class + '</td>' +
                        '<td>' + student.age + '</td>' +
                        '<td>' + student.phone + '</td>' +
                        '<td>' + student.email + '</td>' +
                        '<td>' + student.user + '</td>' +
                        '<td>' + student.pwd + '</td>' +
                        '<td><a href="/delete/' + student.user + '">刪除</a></td>' +
                        '</tr>';
                    tableBody.innerHTML += row;
                });
            })
            .catch(function(error) {
                console.log(error);
            });
    });
</script>
</body>
</html>

3.4、sqlite.py

sqlite.py文件的代碼是用來生成數(shù)據(jù)庫表單和管理員賬號密碼的:

import sqlite3 as sql
conn=sql.connect('database.db')
print("opened database successfully")

conn.execute('CREATE TABLE students(name TEXT,\
                                    num INT,\
                                    academy TEXT,\
                                    major TEXT,\
                                    Class TEXT,\
                                    age INT,\
                                    phone INT,\
                                    email TEXT,\
                                    user TEXT PRIMARY KEY,\
                                    pwd TEXT)')
conn.execute('CREATE TABLE admins(admin TEXT PRIMARY KEY,pwd TEXT)')
cur=conn.cursor()
cur.execute("INSERT INTO admins (admin,pwd) VALUES('xzl1','xzl1')")
cur.execute("INSERT INTO admins (admin,pwd) VALUES('xzl2','xzl2')")
cur.execute("INSERT INTO admins (admin,pwd) VALUES('xzl3','xzl3')")
conn.commit()
print("Table created successfully")
conn.close()

運(yùn)行成功之后,會在代碼文件的同目錄下生成database.db數(shù)據(jù)庫文件:
python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離),項(xiàng)目,python,開發(fā)語言,學(xué)生信息管理系統(tǒng)

3.5、flaskAxios.py

這個是該項(xiàng)目的后端服務(wù)器代碼,基于flask實(shí)現(xiàn)。類似于Java的注解web開發(fā)。其中相較于之前發(fā)布過的前后端不分離的版本,做出了一些改動,比如前后端交互的數(shù)據(jù)格式改為json,前后端響應(yīng)json之后再去響應(yīng)。文章來源地址http://www.zghlxwxcb.cn/news/detail-554917.html

# -*- coding: utf-8 -*-
# @Author:︶ㄣ釋然
# @Time: 2023/6/19 9:25
from flask import Flask, render_template, request, redirect, url_for, jsonify
import sqlite3 as sql

app = Flask(__name__)


@app.route('/')
def home():
    return render_template('01.html')


@app.route('/newStudent')
def new_student():
    return render_template('03.html')


@app.route('/enter')
def enter():
    return render_template('02.html')


@app.route('/check', methods=['POST'])
def check():
    if request.method == 'POST':
        date = request.get_json()
        # user = request.form.get('user')
        # pwd = request.form.get('pwd')
        user = date['username']
        pwd = date['password']
        with sql.connect("database.db") as con:
            cur = con.cursor()
            cur.execute('select pwd from students where user = ?', (user,))
            psw = cur.fetchall()
            print("psw:", psw)
            if not psw:
                msg = "用戶名錯誤"
                print(msg)
                message = {'message': msg}
                return jsonify(message)
            elif psw[0][0] == pwd:
                msg = "登錄成功"
                print(msg)
                return jsonify({'message': msg, 'redirect': url_for('toHtml', user=user)})
            else:
                msg = "密碼錯誤"
                print(msg)
                return jsonify({'message': msg})


@app.route('/addrec', methods=['POST'])
def addrec():
    try:
        name = request.json['name']
        num = request.json['num']
        academy = request.json['academy']
        major = request.json['major']
        Class = request.json['Class']
        age = request.json['age']
        phone = request.json['phone']
        email = request.json['email']
        user = request.json['user']
        pwd = request.json['pwd']

        with sql.connect("database.db") as con:
            cur = con.cursor()
            cur.execute("INSERT INTO students (name, num, academy, major, Class, age, phone, email, user, pwd) \
                         VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                        (name, num, academy, major, Class, age, phone, email, user, pwd))
            con.commit()

        return jsonify({'success': True, 'message': '增加記錄成功'})

    except sql.IntegrityError:
        return jsonify({'success': False, 'message': '增加記錄失敗', 'reason': '可能原因?yàn)橛脩裘貜?fù)'})

    except Exception as e:
        return jsonify({'success': False, 'message': '增加記錄失敗', 'reason': str(e)})


# @app.route('/List/<user>')
# def List(user):
#     con =sql.connect("templates/database.db")
#     con.row_factory=sql.Row
#     cur=con.cursor()
#     cur.execute('select name,num,academy,major,Class,age,phone,email,user,pwd from students where user=(?)',(user,))
#     rows=cur.fetchall()
#     return render_template("testxzl04.html",rows=rows)
@app.route('/toHtml/<user>')
def toHtml(user):
    return render_template("04.html", user=user)


@app.route('/toHtmlAdmin')
def toHtmlAdmin():
    return render_template("06.html")


@app.route('/List')
def List():
    user = request.args.get('user')
    con = sql.connect("database.db")
    con.row_factory = sql.Row
    cur = con.cursor()
    cur.execute('SELECT name, num, academy, major, Class, age, phone, email, user, pwd FROM students WHERE user = ?', (user,))
    rows = cur.fetchall()

    students = []
    print(rows)
    for row in rows:
        student = {
            'name': row['name'],
            'num': row['num'],
            'academy': row['academy'],
            'major': row['major'],
            'Class': row['Class'],
            'age': row['age'],
            'phone': row['phone'],
            'email': row['email'],
            'user': row['user']
        }
        students.append(student)
    print(students[0])
    # return redirect(url_for('show_students', students_json=students))
    return jsonify(students[0])


@app.route('/students')
def show_students():
    students_json = request.args.get('students_json')
    print(students_json)
    return render_template('04.html', students_json=students_json)
    # return jsonify(students_json)


@app.route('/listAdmin')
def listAdmin():
    con = sql.connect("database.db")
    con.row_factory = sql.Row
    cur = con.cursor()
    cur.execute('select name,num,academy,major,Class,age,phone,email,user,pwd from students ')
    rows = cur.fetchall()

    students = []
    print(rows)
    for row in rows:
        student = {
            'name': row['name'],
            'num': row['num'],
            'academy': row['academy'],
            'major': row['major'],
            'Class': row['Class'],
            'age': row['age'],
            'phone': row['phone'],
            'email': row['email'],
            'user': row['user'],
            'pwd': row['pwd']
        }
        students.append(student)
    print(students)
    # return render_template("testxzl06.html", rows=rows)
    jsonData = {'students': students}
    print(jsonData)
    return jsonify(jsonData)


@app.route('/delete/<user>')
def delete(user):
    try:
        with sql.connect("database.db") as con:
            cur = con.cursor()
            cur.execute('delete from students where user=(?)', (user,))
            con.commit()
            print("刪除記錄成功")
            msg = "刪除記錄成功"
            # return redirect(url_for('listAdmin', msg=msg))
            return render_template("06.html")

    except:
        con.rollback()
        print("刪除記錄失敗")
        msg = "刪除記錄失敗"
        # return redirect(url_for('listAdmin', msg=msg))
        return render_template("06.html")

    finally:
        con.close()


@app.route('/admin')
def admin():
    return render_template('05.html')


@app.route('/checkAdmin', methods=['POST'])
def checkAdmin():
    if request.method == 'POST':
        data = request.get_json()
        user = data['username']
        pwd = data['password']
        # user = request.form['user']
        # pwd = request.form['pwd']
        with sql.connect("database.db") as con:
            cur = con.cursor()
            cur.execute('select pwd from admins where admin=(?)', (user,))
            psw = cur.fetchall()
            print("psw:", psw)
            if not psw:
                msg = "管理員用戶名錯誤"
                print(msg)
                message = {'message': msg}
                # return render_template("testxzl05.html",msg=msg)
                return jsonify(message)
            elif psw[0][0] == pwd:
                msg = "登錄成功"
                print(msg)
                # return redirect(url_for('listAdmin'))
                return jsonify({'message': msg, 'redirect': url_for('toHtmlAdmin', user=user)})
            else:
                msg = "管理員密碼錯誤"
                print(msg)
                # return render_template("testxzl05.html",msg=msg)
                return jsonify({'message': msg})


if __name__ == '__main__':
    app.run(debug=True)

到了這里,關(guān)于python實(shí)現(xiàn)前后端學(xué)生管理系統(tǒng)(前后端分離)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于springboot + vue實(shí)現(xiàn)的前后端分離-酒店管理系統(tǒng)

    基于springboot + vue實(shí)現(xiàn)的前后端分離-酒店管理系統(tǒng)

    項(xiàng)目介紹 ????????基于springboot + vue實(shí)現(xiàn)的酒店管理系統(tǒng)一共有酒店管理員和用戶這兩種角色。 管理員功能 登錄:管理員可以通過登錄功能進(jìn)入系統(tǒng),確保只有授權(quán)人員可以訪問系統(tǒng)。 用戶管理:管理員可以添加、編輯和刪除酒店的用戶,包括前臺員工、服務(wù)員等。他們

    2024年02月22日
    瀏覽(21)
  • python使用 flask+vue 制作前后端分離圖書信息管理系統(tǒng)

    python使用 flask+vue 制作前后端分離圖書信息管理系統(tǒng)

    前言 大家早好、午好、晚好吖 ? ~歡迎光臨本文章 制作前后端分離圖書信息管理系統(tǒng)的思路: 前端部分 首先,我們可以使用 VueJS 作為前端框架,并通過 Vue CLI 工具進(jìn)行創(chuàng)建和管理項(xiàng)目。 后端部分 后端部分我們可以采用 Python Flask 框架,這個框架是一個輕量級的Web框架,十分

    2024年02月09日
    瀏覽(18)
  • 基于Java+SpringBoot+Vue前后端分離倉庫管理系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)

    基于Java+SpringBoot+Vue前后端分離倉庫管理系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 基于Jav

    2023年04月09日
    瀏覽(1144)
  • 基于Java+SpringBoot+vue前后端分離企業(yè)客戶管理系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)

    基于Java+SpringBoot+vue前后端分離企業(yè)客戶管理系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月13日
    瀏覽(232)
  • 基于Java+SpringBoot+Vue實(shí)現(xiàn)前后端分離美術(shù)館管理系統(tǒng)

    基于Java+SpringBoot+Vue實(shí)現(xiàn)前后端分離美術(shù)館管理系統(tǒng)

    ?博主介紹 : ? 全網(wǎng)粉絲20W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 ?java項(xiàng)

    2024年02月07日
    瀏覽(96)
  • 基于Java+SpringBoot+Vue前后端分離圖書管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+SpringBoot+Vue前后端分離圖書管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月10日
    瀏覽(302)
  • 基于Java+SpringBoot+Vue前后端分離倉庫管理系統(tǒng)詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+SpringBoot+Vue前后端分離倉庫管理系統(tǒng)詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月16日
    瀏覽(100)
  • 基于Java+SpringBoot+Vue前后端分離醫(yī)院后臺管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+SpringBoot+Vue前后端分離醫(yī)院后臺管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月11日
    瀏覽(96)
  • 基于Java+SpringBoot+vue前后端分離疫情下圖書館管理系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)

    基于Java+SpringBoot+vue前后端分離疫情下圖書館管理系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月13日
    瀏覽(83)
  • 基于Java+SpringBoot+Vue前后端分離社區(qū)醫(yī)院管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+SpringBoot+Vue前后端分離社區(qū)醫(yī)院管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月11日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包