在实际工作中,前后端数据交互大部分都是用的json格式,后端把数据处理完后,把json传给前端,前端再解析

项目结构

测开之路一百五十四:ajax+json前后台数据交互

models里面加入把数据转为字典的方法

测开之路一百五十四:ajax+json前后台数据交互

from datetime import datetime
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()


class Department(db.Model):
""" 部门 """
__tablename__ = 'department'
# primary_key=True:主键, autoincrement=True:自动递增
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50), unique=True)

def __init__(self, name):
self.name = name

def __repr__(self):
return f'部门{self.id},{self.name}'

def to_json(self):
""" 用于后面把SQLAlchemy的内容转成json对象 """
return dict(id=self.id, name=self.name)


class Employee(db.Model):
""" 员工 """
__tablename__ = 'employee'
# primary_key=True:主键, autoincrement=True:自动递增
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(50))
gender = db.Column(db.String)
job = db.Column(db.String)
birthdate = db.Column(db.Date)
idcard = db.Column(db.String)
address = db.Column(db.String)
salary = db.Column(db.Float)
release_time = db.Column(db.DateTime)

# 外键: db.Column(db.Integer, db.ForeignKey(表名))
department_id = db.Column(db.Integer, db.ForeignKey('department.id')) # 声明是外键,为department表的id字段

# db.relationship('Department', backref=db.backref('employee', lazy='dynamic'))
# db.relationship(主键类名, backref=引用属性名, lazy='dynamic'))
# lazy:延迟查询:dynamic:动态、select、subquery、joined
department = db.relationship('Department', backref=db.backref('employee', lazy='dynamic')) # 类与表的关系

def __init__(self, name=None, gender=None, job=None, birthdate=None, idcard=None, address=None, salary=None,
release_time=None):
self.name = name
self.gender = gender
self.job = job
self.birthdate = birthdate
self.idcard = idcard
self.address = address
self.salary = salary
self.release_time = release_time if release_time else datetime.now()

def __repr__(self):
return f'员工:{self.id} {self.name} {self.salary} {self.address}'

def to_json(self):
""" 用于后面把SQLAlchemy的内容转成json对象 """
return dict(id=self.id, name=self.name, address=self.address, salary=self.salary)


if __name__ == '__main__':
db.create_all()

emp-json.html

测开之路一百五十四:ajax+json前后台数据交互测开之路一百五十四:ajax+json前后台数据交互

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>josn数据</title>
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
部门:<select name="部门" ;
$.each(datas['datas'], function (i, data) {
rows += '<tr><td>' + data.id + '</td><td>' + data.name + '</td><td>' + data.address + '</td><td>' + data.salary + '</td></tr>';
$('#emp-list').html(table_header + rows + '</table>');
});
}
}
});

});
});
</script>

main.py

测开之路一百五十四:ajax+json前后台数据交互测开之路一百五十四:ajax+json前后台数据交互

from flask import Flask, render_template, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from personal.models import Employee, Department

app = Flask(__name__, static_url_path='')
db = SQLAlchemy(app)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./db/test.db' # 声明数据库类型和地址
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True # 跟踪改变


# app.config['SQLALCHEMY_ECHO'] = True # 打印对应的sql,此操作用sql是怎么样的


# 返回部门信息
@app.route('/department/')
def get_department():
""" 单个的情况
dept = Department.query.first()
return jsonify(dept.to_json())
"""
# 多个的情况
depts = Department.query.all()
return jsonify([d.to_json() for d in depts])


@app.route('/emp-info/')
def emp_info():
"""
1、从地址栏获取要查询的的部门好好员工名
2、根据部门和员工名,获取员工信息
3、返回json格式的信息
"""
name = request.args.get('name', '')
dept = request.args.get('department', '')
# datas = db.session.query(Employee).filter(Employee.name == name, Employee.department_id == dept)
datas = db.session.query(Employee).filter(Employee.name == name).filter(Employee.department_id == dept)
if datas:
return jsonify({
'status': 0,
'datas': [d.to_json() for d in datas]
})
return jsonify({
'status': 1,
'datas': []
})


@app.route('/emp-json/')
def emp_json():
return render_template('emp-json.html')


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

数据信息:

测开之路一百五十四:ajax+json前后台数据交互

访问

测开之路一百五十四:ajax+json前后台数据交互

有效数据

测开之路一百五十四:ajax+json前后台数据交互

无效数据,会清空内容,并不渲染

测开之路一百五十四:ajax+json前后台数据交互

 

相关文章:

  • 2022-12-23
  • 2021-06-20
  • 2022-12-23
  • 2021-09-26
  • 2021-09-26
  • 2022-12-23
  • 2021-11-04
猜你喜欢
  • 2021-09-09
  • 2021-08-26
  • 2022-12-23
  • 2021-09-26
  • 2021-07-19
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案