python-Flask框架用ajax对数据表实现简单的增删改查

python-Flask框架用ajax对数据表实现简单的增删改查

以下为实现效果


在这里插入图片描述

以下为代码实现
Blueprint其实本身只是对view上的接口进行了注册,然后整体挂载在app上,Blueprint本身的目的就是组织多模块的平行共存,避免直接在app上注册view,其实更多的只是方便开发和代码的维护,因为最终所有的views上的接口都仍然是直接挂载在app上,其实对应整个应用来说,没有什么明显的区别。
Flask 中的Blueprint不是一个可插拨的应用,因为它不是一个真正的应用,而是一套可以注册 在应用中的操作,并且可以注册多次。

#app.py代码实现
from flask import Flask,render_template,request,Response,session,url_for
import config
from config_class import *
from datetime import timedelta
from _md5 import MD5Type
import hashlib
from controllor.usercontroller import usercontroller
from controllor.jobcontroller import jobcontroller

app = Flask(__name__)
app.config['DEBUG']=True
app.config['PERMANENT_SESSION_LIFETIME']=timedelta(minutes=30)
#使用class定义配置
app.config.from_object(DebugConfig)
# 使用config 文件定义配置
app.config.from_object(config)

app.register_blueprint(usercontroller)
#绑定路由
app.register_blueprint(jobcontroller)

@app.route('/')  #URL路由
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(host=app.config['SERVER_ADDR'],port=app.config['SERVER_PORT'],debug=True)

#controller文件夹下-jobcontroller.py实现代码
from flask import Blueprint,Flask,render_template,request,Response,session,url_for,jsonify
from service.jobservice import JobService
from entity.job import Job
import json

jobService=JobService()  #引入服务层

jobcontroller=Blueprint('jobcontroller',__name__)

@jobcontroller.route('/goajaxjob.do',methods=['POST','GET'])
def goAjaxJob():
    return render_template('systeminfo/jobajax.html')
    pass

@jobcontroller.route('/ajaxjob.do',methods=['POST','GET'])
def getJobInfo():
    jobData = request.get_data()
    jobDict = json.loads(jobData)
    tData = {
   }

    job=Job()
    jobId=int(jobDict.get('jobId'))
    job.jobId=jobId
    job.jobPosition=jobDict.get('jobPosition')
    job.jobCompany=jobDict.get('jobCompany')
    job.jobSalary=jobDict.get('jobSalary')
    job.jobCity=jobDict.get('jobCity')

    currentPage = int(jobDict.get('currentPage'))
    pageSize = int(jobDict.get('pageSize'))
    opr = jobDict.get('opr')

    delResult = 0
    if opr == 'del':
        delResult = jobService.removeJob(jobId)
        pass
    elif opr == 'update':
        tJob = jobService.findJobByJobId(jobId)
        tData['jobId'] = tJob.jobId
        tData['jobPosition'] = tJob.jobPosition
        tData['jobCompany'] = tJob.jobCompany
        tData['jobSalary'] = tJob.jobSalary
        tData['jobCity'] = tJob.jobCity
        returnData = {
   'code': 1, 'jobData': tData, 'pageSize': pageSize, 'currentPage': currentPage, 'opr': 'update'}
        return json.dumps(returnData)
    elif opr == 'submitUpdate':
        jobService.updateJob(job)
    elif opr=='submitadd':
        jobService.addJob(job,pageSize, currentPage)


    result = jobService.findPageJobList(job, pageSize, currentPage)
    counts = jobService.countJobs(job)
    totalPage = 0

    if (counts % pageSize == 0):
        totalPage = counts // pageSize
    else:
        totalPage = counts // pageSize + 1
        pass

    returnData = {
   'code': 1, 'jobData': result, 'pageSize': pageSize, 'currentPage': currentPage,
                  'totalPage': totalPage, 'delcode': delResult, 'opr': 'search', 'counts': counts}

    return json.dumps(returnData)
    pass


#service文件夹下-jobservice.py实现代码
from dao.jobdao import JobDao
from entity.job import Job

class JobService():

    def findPageJobList(self,job,pageSize,currentPage):
        jobDao=JobDao()
        return jobDao.findPageJobList(job,pageSize,currentPage)
        pass

    def removeJob(self,jobId):
        jobDao=JobDao()
        return jobDao.removeJob(jobId)
        pass

    def updateJob(self,job):
        jobDao=JobDao()
        return jobDao.updateJob(job)
        pass

    def addJob(self,job,pageSize,currentPage):
        jobDao = JobDao()
        return jobDao.addJob(job)
        pass

    def countJobs(self,job):
        jobDao = JobDao()
        return jobDao.countJobs(job)[0]
        pass

    def findJobByJobId(self,jobId):
        jobDao=JobDao()
        result=jobDao.findJobByJobId(jobId)
        job=None
        if result:
            job=Job()
            job.jobId=result[0][0]
            job.jobPosition=result[0][1]
            job.jobCompany=result[0][2]
            job.jobSalary=result[0][4]
            job.jobCity=result[0][12]
            pass
        return job
        pass
    pass

#dao层文件夹-jobdao.py代码实现
from .basedao import BaseDao
class JobDao(BaseDao):
    def findPageJobList(self,job,pageSize,currentPage):
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前后端分离的实现方式有很多种,以下是一种基于 Flask 和 Vue.js 的实现方式: 1. 后端使用 Flask 框架搭建 API,可以使用 Flask-RESTful 库来方便地实现 RESTful API。例如: ```python from flask import Flask, jsonify, request from flask_cors import CORS app = Flask(__name__) CORS(app) tasks = [ { 'id': 1, 'title': 'Task 1', 'description': 'This is task 1', 'done': False }, { 'id': 2, 'title': 'Task 2', 'description': 'This is task 2', 'done': False } ] @app.route('/tasks', methods=['GET']) def get_tasks(): return jsonify({'tasks': tasks}) @app.route('/tasks/<int:task_id>', methods=['GET']) def get_task(task_id): task = [task for task in tasks if task['id'] == task_id] if len(task) == 0: abort(404) return jsonify({'task': task[0]}) @app.route('/tasks', methods=['POST']) def create_task(): if not request.json or not 'title' in request.json: abort(400) task = { 'id': tasks[-1]['id'] + 1, 'title': request.json['title'], 'description': request.json.get('description', ''), 'done': False } tasks.append(task) return jsonify({'task': task}), 201 @app.route('/tasks/<int:task_id>', methods=['PUT']) def update_task(task_id): task = [task for task in tasks if task['id'] == task_id] if len(task) == 0: abort(404) if not request.json: abort(400) task[0]['title'] = request.json.get('title', task[0]['title']) task[0]['description'] = request.json.get('description', task[0]['description']) task[0]['done'] = request.json.get('done', task[0]['done']) return jsonify({'task': task[0]}) @app.route('/tasks/<int:task_id>', methods=['DELETE']) def delete_task(task_id): task = [task for task in tasks if task['id'] == task_id] if len(task) == 0: abort(404) tasks.remove(task[0]) return jsonify({'result': True}) if __name__ == '__main__': app.run(debug=True) ``` 2. 前端使用 Vue.js 框架搭建页面,通过 AJAX 调用后端提供的 API 来实现增删改查功能。例如: ```html <!DOCTYPE html> <html> <head> <title>Tasks</title> <meta charset="utf-8"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.min.css"> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> </head> <body> <div id="app"> <v-app> <v-container> <v-text-field label="Title" v-model="title"></v-text-field> <v-text-field label="Description" v-model="description"></v-text-field> <v-btn color="primary" @click="createTask">Create</v-btn> <v-data-table :headers="headers" :items="tasks" :search="search" item-key="id"> <template v-slot:top> <v-toolbar flat> <v-toolbar-title>Tasks</v-toolbar-title> <v-spacer></v-spacer> <v-text-field v-model="search" append-icon="search" label="Search"></v-text-field> </v-toolbar> </template> <template v-slot:item.actions="{ item }"> <v-icon small class="mr-2" @click="editTask(item)">edit</v-icon> <v-icon small @click="deleteTask(item)">delete</v-icon> </template> </v-data-table> <v-dialog v-model="dialog" persistent max-width="600px"> <v-card> <v-card-title> <span class="headline">{{ formTitle }}</span> </v-card-title> <v-card-text> <v-text-field label="Title" v-model="editedTask.title"></v-text-field> <v-text-field label="Description" v-model="editedTask.description"></v-text-field> </v-card-text> <v-card-actions> <v-spacer></v-spacer> <v-btn color="blue darken-1" text @click="closeDialog">Cancel</v-btn> <v-btn color="blue darken-1" text @click="saveTask">Save</v-btn> </v-card-actions> </v-card> </v-dialog> </v-container> </v-app> </div> <script> new Vue({ el: '#app', data: { title: '', description: '', headers: [ { text: 'ID', value: 'id' }, { text: 'Title', value: 'title' }, { text: 'Description', value: 'description' }, { text: 'Done', value: 'done' }, { text: 'Actions', value: 'actions' } ], tasks: [], search: '', dialog: false, formTitle: '', editedTask: { id: 0, title: '', description: '', done: false } }, created: function () { this.fetchTasks(); }, methods: { fetchTasks: function () { axios.get('/tasks') .then(response => { this.tasks = response.data.tasks; }) .catch(error => { console.log(error); }); }, createTask: function () { axios.post('/tasks', { title: this.title, description: this.description }) .then(response => { this.tasks.push(response.data.task); this.title = ''; this.description = ''; }) .catch(error => { console.log(error); }); }, editTask: function (task) { this.formTitle = 'Edit Task'; this.editedTask = Object.assign({}, task); this.dialog = true; }, saveTask: function () { axios.put('/tasks/' + this.editedTask.id, { title: this.editedTask.title, description: this.editedTask.description, done: this.editedTask.done }) .then(response => { var index = this.tasks.findIndex(task => task.id == response.data.task.id); Vue.set(this.tasks, index, response.data.task); this.dialog = false; }) .catch(error => { console.log(error); }); }, deleteTask: function (task) { axios.delete('/tasks/' + task.id) .then(response => { var index = this.tasks.findIndex(t => t.id == task.id); this.tasks.splice(index, 1); }) .catch(error => { console.log(error); }); }, closeDialog: function () { this.dialog = false; setTimeout(() => { this.editedTask = { id: 0, title: '', description: '', done: false }; }, 300); } } }); </script> </body> </html> ``` 以上代码仅供参考,具体实现方式可以根据实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值